Last active
April 15, 2017 08:14
-
-
Save chinmay185/15e0a81deee73571ce9b74d65d1da7eb to your computer and use it in GitHub Desktop.
Revisions
-
chinmay185 revised this gist
Apr 15, 2017 . 1 changed file with 22 additions and 8 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -56,14 +56,28 @@ func TestGrepper(t *testing.T) { g.Process(path) // then t.Run("test results", func(t *testing.T) { select { case res := <-results: if len(res) != 0 { t.Errorf("results should have been empty but got %+v", res) } case <-time.After(1 * time.Second): t.Error("timeout, couldn't read from results channel in 1 second") } }) t.Run("test waitgroup", func(t *testing.T) { done := make(chan bool) go func(d chan bool) { wg.Wait() d <- true }(done) select { case <-done: case <-time.After(1 * time.Second): t.Error("timeout, wait group didn't complete in 1 second") } }) }) t.Run("test search", func(t *testing.T) { @@ -90,8 +104,8 @@ func TestGrepper(t *testing.T) { } } }) } func setupFile() (string, error) { path := filepath.Join(".", "__test_file__.go") if _, err := os.Create(path); err != nil { -
chinmay185 created this gist
Apr 14, 2017 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,123 @@ package grep import ( "os" "path/filepath" "strings" "sync" "testing" "time" ) type testProcessor struct { files []string } func (t *testProcessor) Process(name string) { t.files = append(t.files, name) } func TestWalker(t *testing.T) { t.Run("test walk", func(t *testing.T) { parent, err := setupDirs() defer removeDirs(parent) if err != nil { t.Errorf("cannot complete setup %+v", err) return } dummy := &testProcessor{} w := makeWalker(".go", parent) // when w.Walk(dummy) // then if len(dummy.files) != 2 { t.Errorf("expected 2 found %d\n", len(dummy.files)) } }) } func TestGrepper(t *testing.T) { t.Run("test Process", func(t *testing.T) { path, err := setupFile() defer removeFile(path) if err != nil { t.Errorf("cannot complete setup %+v", err) return } var wg sync.WaitGroup results := make(chan []string) g := makeGrepper(results, &wg, "test") // when g.Process(path) // then select { case res := <-results: if len(res) != 0 { t.Errorf("results should have been empty but got %+v", res) } case <-time.After(1 * time.Second): t.Error("timeout, couldn't read from channel in 1 second") } }) t.Run("test search", func(t *testing.T) { var wg sync.WaitGroup g := makeGrepper(make(chan []string), &wg, "test") matchingLine1 := "line1 test" matchingLine2 := "testline2" nonMatchingLine := "something else" reader := strings.NewReader(strings.Join([]string{matchingLine1, nonMatchingLine, matchingLine2}, "\n")) prefix := "/prefix" // when results := g.search(reader, prefix) // then expectedResults := []string{prefix + ":" + matchingLine1, prefix + ":" + matchingLine2} if len(expectedResults) != len(results) { t.Errorf("expected length %d but found %d", len(expectedResults), len(results)) return } for i := range expectedResults { if expectedResults[i] != results[i] { t.Errorf("expected %s but got %s", expectedResults[i], results[i]) } } }) } func setupFile() (string, error) { path := filepath.Join(".", "__test_file__.go") if _, err := os.Create(path); err != nil { return "", err } return path, nil } func removeFile(path string) { os.Remove(path) } func setupDirs() (string, error) { parent := filepath.Join(".", "__test__") dir1 := filepath.Join(parent, "dir1") dir2 := filepath.Join(dir1, "dir2") os.MkdirAll(dir2, 0755) if _, err := os.Create(filepath.Join(dir1, "file1.go")); err != nil { return "", err } if _, err := os.Create(filepath.Join(dir2, "file2.go")); err != nil { return "", err } return parent, nil } func removeDirs(parent string) { os.RemoveAll(parent) }