-
Notifications
You must be signed in to change notification settings - Fork 60
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2be6adc
commit 2946c4e
Showing
36 changed files
with
828 additions
and
27 deletions.
There are no files selected for viewing
This file contains 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 characters
This file contains 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 characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// Copyright 2016 The Go 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 content | ||
|
||
import ( | ||
"bytes" | ||
"errors" | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
"os/exec" | ||
"path/filepath" | ||
"strings" | ||
"testing" | ||
|
||
// Keep github.com/ardanlabs/gotour/external/tour/wc in our go.mod require list for use during test. | ||
_ "github.com/ardanlabs/gotour/external/tour/wc" | ||
) | ||
|
||
// Test that all the .go files inside the content file build | ||
// and execute (without checking for output correctness). | ||
// Files that contain the string "// +build no-build" are not built. | ||
// Files that contain the string "// +build no-run" are not executed. | ||
func TestContent(t *testing.T) { | ||
if _, err := exec.LookPath("go"); err != nil { | ||
t.Skipf("skipping because 'go' executable not available: %v", err) | ||
} | ||
|
||
scratch, err := ioutil.TempDir("", "tour-content-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(scratch) | ||
|
||
err = filepath.Walk(".", func(path string, fi os.FileInfo, err error) error { | ||
if filepath.Ext(path) != ".go" { | ||
return nil | ||
} | ||
if filepath.Base(path) == "content_test.go" { | ||
return nil | ||
} | ||
t.Run(path, func(t *testing.T) { | ||
t.Parallel() | ||
if err := testSnippet(t, filepath.ToSlash(path), scratch); err != nil { | ||
t.Errorf("%v: %v", path, err) | ||
} | ||
}) | ||
return nil | ||
}) | ||
if err != nil { | ||
t.Error(err) | ||
} | ||
} | ||
|
||
func testSnippet(t *testing.T, path, scratch string) error { | ||
b, err := ioutil.ReadFile(path) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
build := string(bytes.SplitN(b, []byte{'\n'}, 2)[0]) | ||
if !strings.HasPrefix(build, "// +build ") { | ||
return errors.New("first line is not a +build comment") | ||
} | ||
if !strings.Contains(build, "OMIT") { | ||
return errors.New(`+build comment does not contain "OMIT"`) | ||
} | ||
|
||
if strings.Contains(build, "no-build") { | ||
return nil | ||
} | ||
bin := filepath.Join(scratch, filepath.Base(path)+".exe") | ||
out, err := exec.Command("go", "build", "-o", bin, path).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("build error: %v\noutput:\n%s", err, out) | ||
} | ||
defer os.Remove(bin) | ||
|
||
if strings.Contains(build, "no-run") { | ||
return nil | ||
} | ||
out, err = exec.Command(bin).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("%v\nOutput:\n%s", err, out) | ||
} | ||
return nil | ||
} |
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// Copyright 2016 The Go 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 content | ||
|
||
import ( | ||
"bytes" | ||
"errors" | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
"os/exec" | ||
"path/filepath" | ||
"strings" | ||
"testing" | ||
|
||
// Keep github.com/ardanlabs/gotour/external/tour/wc in our go.mod require list for use during test. | ||
_ "github.com/ardanlabs/gotour/external/tour/wc" | ||
) | ||
|
||
// Test that all the .go files inside the content file build | ||
// and execute (without checking for output correctness). | ||
// Files that contain the string "// +build no-build" are not built. | ||
// Files that contain the string "// +build no-run" are not executed. | ||
func TestContent(t *testing.T) { | ||
if _, err := exec.LookPath("go"); err != nil { | ||
t.Skipf("skipping because 'go' executable not available: %v", err) | ||
} | ||
|
||
scratch, err := ioutil.TempDir("", "tour-content-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(scratch) | ||
|
||
err = filepath.Walk(".", func(path string, fi os.FileInfo, err error) error { | ||
if filepath.Ext(path) != ".go" { | ||
return nil | ||
} | ||
if filepath.Base(path) == "content_test.go" { | ||
return nil | ||
} | ||
t.Run(path, func(t *testing.T) { | ||
t.Parallel() | ||
if err := testSnippet(t, filepath.ToSlash(path), scratch); err != nil { | ||
t.Errorf("%v: %v", path, err) | ||
} | ||
}) | ||
return nil | ||
}) | ||
if err != nil { | ||
t.Error(err) | ||
} | ||
} | ||
|
||
func testSnippet(t *testing.T, path, scratch string) error { | ||
b, err := ioutil.ReadFile(path) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
build := string(bytes.SplitN(b, []byte{'\n'}, 2)[0]) | ||
if !strings.HasPrefix(build, "// +build ") { | ||
return errors.New("first line is not a +build comment") | ||
} | ||
if !strings.Contains(build, "OMIT") { | ||
return errors.New(`+build comment does not contain "OMIT"`) | ||
} | ||
|
||
if strings.Contains(build, "no-build") { | ||
return nil | ||
} | ||
bin := filepath.Join(scratch, filepath.Base(path)+".exe") | ||
out, err := exec.Command("go", "build", "-o", bin, path).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("build error: %v\noutput:\n%s", err, out) | ||
} | ||
defer os.Remove(bin) | ||
|
||
if strings.Contains(build, "no-run") { | ||
return nil | ||
} | ||
out, err = exec.Command(bin).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("%v\nOutput:\n%s", err, out) | ||
} | ||
return nil | ||
} |
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
// Copyright 2016 The Go 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 content | ||
|
||
import ( | ||
"bytes" | ||
"errors" | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
"os/exec" | ||
"path/filepath" | ||
"strings" | ||
"testing" | ||
|
||
// Keep github.com/ardanlabs/gotour/external/tour/wc in our go.mod require list for use during test. | ||
_ "github.com/ardanlabs/gotour/external/tour/wc" | ||
) | ||
|
||
// Test that all the .go files inside the content file build | ||
// and execute (without checking for output correctness). | ||
// Files that contain the string "// +build no-build" are not built. | ||
// Files that contain the string "// +build no-run" are not executed. | ||
func TestContent(t *testing.T) { | ||
if _, err := exec.LookPath("go"); err != nil { | ||
t.Skipf("skipping because 'go' executable not available: %v", err) | ||
} | ||
|
||
scratch, err := ioutil.TempDir("", "tour-content-test") | ||
if err != nil { | ||
t.Fatal(err) | ||
} | ||
defer os.RemoveAll(scratch) | ||
|
||
err = filepath.Walk(".", func(path string, fi os.FileInfo, err error) error { | ||
if filepath.Ext(path) != ".go" { | ||
return nil | ||
} | ||
if filepath.Base(path) == "content_test.go" { | ||
return nil | ||
} | ||
t.Run(path, func(t *testing.T) { | ||
t.Parallel() | ||
if err := testSnippet(t, filepath.ToSlash(path), scratch); err != nil { | ||
t.Errorf("%v: %v", path, err) | ||
} | ||
}) | ||
return nil | ||
}) | ||
if err != nil { | ||
t.Error(err) | ||
} | ||
} | ||
|
||
func testSnippet(t *testing.T, path, scratch string) error { | ||
b, err := ioutil.ReadFile(path) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
build := string(bytes.SplitN(b, []byte{'\n'}, 2)[0]) | ||
if !strings.HasPrefix(build, "// +build ") { | ||
return errors.New("first line is not a +build comment") | ||
} | ||
if !strings.Contains(build, "OMIT") { | ||
return errors.New(`+build comment does not contain "OMIT"`) | ||
} | ||
|
||
if strings.Contains(build, "no-build") { | ||
return nil | ||
} | ||
bin := filepath.Join(scratch, filepath.Base(path)+".exe") | ||
out, err := exec.Command("go", "build", "-o", bin, path).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("build error: %v\noutput:\n%s", err, out) | ||
} | ||
defer os.Remove(bin) | ||
|
||
if strings.Contains(build, "no-run") { | ||
return nil | ||
} | ||
out, err = exec.Command(bin).CombinedOutput() | ||
if err != nil { | ||
return fmt.Errorf("%v\nOutput:\n%s", err, out) | ||
} | ||
return nil | ||
} |
This file contains 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 characters
This file contains 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 characters
This file contains 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 characters
Oops, something went wrong.