summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/internal/testtext/codesize.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/internal/testtext/codesize.go')
-rw-r--r--vendor/golang.org/x/text/internal/testtext/codesize.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/testtext/codesize.go b/vendor/golang.org/x/text/internal/testtext/codesize.go
new file mode 100644
index 0000000..5fc5eae
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/testtext/codesize.go
@@ -0,0 +1,53 @@
+// Copyright 2015 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 testtext
+
+import (
+ "bytes"
+ "fmt"
+ "io/ioutil"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "runtime"
+)
+
+// CodeSize builds the given code sample and returns the binary size or en error
+// if an error occurred. The code sample typically will look like this:
+// package main
+// import "golang.org/x/text/somepackage"
+// func main() {
+// somepackage.Func() // reference Func to cause it to be linked in.
+// }
+// See dict_test.go in the display package for an example.
+func CodeSize(s string) (int, error) {
+ // Write the file.
+ tmpdir, err := ioutil.TempDir(os.TempDir(), "testtext")
+ if err != nil {
+ return 0, fmt.Errorf("testtext: failed to create tmpdir: %v", err)
+ }
+ defer os.RemoveAll(tmpdir)
+ filename := filepath.Join(tmpdir, "main.go")
+ if err := ioutil.WriteFile(filename, []byte(s), 0644); err != nil {
+ return 0, fmt.Errorf("testtext: failed to write main.go: %v", err)
+ }
+
+ // Build the binary.
+ w := &bytes.Buffer{}
+ cmd := exec.Command(filepath.Join(runtime.GOROOT(), "bin", "go"), "build", "-o", "main")
+ cmd.Dir = tmpdir
+ cmd.Stderr = w
+ cmd.Stdout = w
+ if err := cmd.Run(); err != nil {
+ return 0, fmt.Errorf("testtext: failed to execute command: %v\nmain.go:\n%vErrors:%s", err, s, w)
+ }
+
+ // Determine the size.
+ fi, err := os.Stat(filepath.Join(tmpdir, "main"))
+ if err != nil {
+ return 0, fmt.Errorf("testtext: failed to get file info: %v", err)
+ }
+ return int(fi.Size()), nil
+}