| // Copyright 2016 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| package main |
| |
| import ( |
| "io/ioutil" |
| "os" |
| "path/filepath" |
| "sort" |
| "testing" |
| |
| "fuchsia.googlesource.com/jiri/gitutil" |
| "fuchsia.googlesource.com/jiri/jiritest" |
| "fuchsia.googlesource.com/jiri/project" |
| ) |
| |
| func makeProjects(t *testing.T, fake *jiritest.FakeJiriRoot) []*project.Project { |
| projects := []*project.Project{} |
| for _, name := range []string{"a", "b", "c", "t1", "t2"} { |
| projectPath := "r." + name |
| if name == "t1" { |
| projectPath = "sub/" + projectPath |
| } |
| if name == "t2" { |
| projectPath = "sub/sub2/" + projectPath |
| } |
| if err := fake.CreateRemoteProject(projectPath); err != nil { |
| t.Fatal(err) |
| } |
| p := project.Project{ |
| Name: projectPath, |
| Path: filepath.Join(fake.X.Root, projectPath), |
| Remote: fake.Projects[projectPath], |
| RemoteBranch: "master", |
| } |
| if err := fake.AddProject(p); err != nil { |
| t.Fatal(err) |
| } |
| projects = append(projects, &p) |
| } |
| if err := fake.UpdateUniverse(false); err != nil { |
| t.Fatal(err) |
| } |
| |
| return projects |
| } |
| |
| func expectGrep(t *testing.T, fake *jiritest.FakeJiriRoot, args []string, expected []string) { |
| results, err := doGrep(fake.X, args) |
| if err != nil { |
| t.Fatal(err) |
| } |
| sort.Strings(results) |
| sort.Strings(expected) |
| if len(results) != len(expected) { |
| t.Fatalf("grep %v, expected %d matches, got %d matches", args, len(expected), len(results)) |
| } |
| for i, result := range results { |
| if result != expected[i] { |
| t.Fatalf("grep %v, expected:\n%s\ngot:\n%s", args, expected[i], result) |
| } |
| } |
| } |
| |
| func TestGrep(t *testing.T) { |
| fake, cleanup := jiritest.NewFakeJiriRoot(t) |
| defer cleanup() |
| |
| cwd, err := os.Getwd() |
| if err != nil { |
| t.Fatal(err) |
| } |
| defer os.Chdir(cwd) |
| os.Chdir(fake.X.Root) |
| |
| projects := makeProjects(t, fake) |
| |
| files := []string{ |
| "Shall I compare thee to a summer's day?", |
| "Thou art more lovely and more temperate:", |
| "Rough winds do shake the darling buds of May,", |
| "And summer's lease hath all too short a date:", |
| "Sometime too hot the eye of heaven shines,", |
| } |
| |
| if got, want := len(projects), len(files); got != want { |
| t.Errorf("got %v, want %v", got, want) |
| } |
| |
| for i, project := range projects { |
| path := project.Path + "/file.txt" |
| err := ioutil.WriteFile(path, []byte(files[i]), 0644) |
| if err != nil { |
| t.Fatal(err) |
| } |
| git := gitutil.New(fake.X, gitutil.RootDirOpt(project.Path)) |
| git.Add(path) |
| } |
| |
| expectGrep(t, fake, []string{"too"}, []string{ |
| "sub/r.t1/file.txt:And summer's lease hath all too short a date:", |
| "sub/sub2/r.t2/file.txt:Sometime too hot the eye of heaven shines,", |
| }) |
| |
| expectGrep(t, fake, []string{"supercalifragilisticexpialidocious"}, []string{}) |
| } |