92 lines
2.1 KiB
Go
92 lines
2.1 KiB
Go
// 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
|
|
}
|