| // Copyright 2020 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 embedtest_test | |
| import ( | |
| "embed" | |
| "os" | |
| "testing" | |
| ) | |
| var ( | |
| global2 = global | |
| concurrency2 = concurrency | |
| glass2 = glass | |
| sbig2 = sbig | |
| bbig2 = bbig | |
| ) | |
| //go:embed testdata/*.txt | |
| var global embed.FS | |
| //go:embed c*txt | |
| var concurrency string | |
| //go:embed testdata/g*.txt | |
| var glass []byte | |
| //go:embed testdata/ascii.txt | |
| var sbig string | |
| //go:embed testdata/ascii.txt | |
| var bbig []byte | |
| func testFiles(t *testing.T, f embed.FS, name, data string) { | |
| t.Helper() | |
| d, err := f.ReadFile(name) | |
| if err != nil { | |
| t.Error(err) | |
| return | |
| } | |
| if string(d) != data { | |
| t.Errorf("read %v = %q, want %q", name, d, data) | |
| } | |
| } | |
| func testString(t *testing.T, s, name, data string) { | |
| t.Helper() | |
| if s != data { | |
| t.Errorf("%v = %q, want %q", name, s, data) | |
| } | |
| } | |
| func TestXGlobal(t *testing.T) { | |
| testFiles(t, global, "testdata/hello.txt", "hello, world\n") | |
| testString(t, concurrency, "concurrency", "Concurrency is not parallelism.\n") | |
| testString(t, string(glass), "glass", "I can eat glass and it doesn't hurt me.\n") | |
| testString(t, concurrency2, "concurrency2", "Concurrency is not parallelism.\n") | |
| testString(t, string(glass2), "glass2", "I can eat glass and it doesn't hurt me.\n") | |
| big, err := os.ReadFile("testdata/ascii.txt") | |
| if err != nil { | |
| t.Fatal(err) | |
| } | |
| testString(t, sbig, "sbig", string(big)) | |
| testString(t, sbig2, "sbig2", string(big)) | |
| testString(t, string(bbig), "bbig", string(big)) | |
| testString(t, string(bbig2), "bbig", string(big)) | |
| if t.Failed() { | |
| return | |
| } | |
| // Could check &glass[0] == &glass2[0] but also want to make sure write does not fault | |
| // (data must not be in read-only memory). | |
| old := glass[0] | |
| glass[0]++ | |
| if glass2[0] != glass[0] { | |
| t.Fatalf("glass and glass2 do not share storage") | |
| } | |
| glass[0] = old | |
| // Could check &bbig[0] == &bbig2[0] but also want to make sure write does not fault | |
| // (data must not be in read-only memory). | |
| old = bbig[0] | |
| bbig[0]++ | |
| if bbig2[0] != bbig[0] { | |
| t.Fatalf("bbig and bbig2 do not share storage") | |
| } | |
| bbig[0] = old | |
| } |