Files
aego/render/shaderx/shaderx_test.go
sanspie a6822156cd
ci-platforms / windows amd64 smoke (push) Skipped
ci / release (push) Successful in 8m58s
ci-platforms / darwin amd64 smoke (push) Skipped
ci-platforms / darwin arm64 smoke (push) Skipped
ci / checks (push) Successful in 4m46s
ci / build (amd64, linux, ubuntu-24.04) (push) Successful in 13m28s
Finish Stage 12 editor fixes and refreshed platformer
2026-11-05 17:36:42 +03:00

81 lines
1.9 KiB
Go

package shaderx
import (
"os"
"os/exec"
"path/filepath"
"strings"
"testing"
)
const shaders = "../../engine/res/shaders"
func sources(t *testing.T) []string {
t.Helper()
var out []string
for _, pat := range []string{"*.vert", "*.frag"} {
m, err := filepath.Glob(filepath.Join(shaders, pat))
if err != nil {
t.Fatal(err)
}
out = append(out, m...)
}
if len(out) == 0 {
t.Fatal("no shaders found")
}
return out
}
func TestCommittedESShadersAreCurrent(t *testing.T) {
for _, f := range sources(t) {
src, err := os.ReadFile(f)
if err != nil {
t.Fatal(err)
}
want, err := Translate(string(src), filepath.Base(f))
if err != nil {
t.Fatal(err)
}
got, err := os.ReadFile(filepath.Join(shaders, ESDir, filepath.Base(f)))
if err != nil {
t.Fatalf("%s: run make shaders: %v", filepath.Base(f), err)
}
if string(got) != want {
t.Errorf("%s is out of date, run make shaders", filepath.Base(f))
}
}
}
func TestESShadersValidate(t *testing.T) {
bin := glslang(t)
for _, f := range sources(t) {
es := filepath.Join(shaders, ESDir, filepath.Base(f))
if out, err := exec.Command(bin, es).CombinedOutput(); err != nil {
t.Errorf("%s: %s", filepath.Base(f), strings.TrimSpace(string(out)))
}
}
}
func TestRejectsLegacyAndForeignHeaders(t *testing.T) {
if _, err := Translate("#version 120\nvoid main(){}", "x"); err == nil {
t.Fatal("accepted a foreign version")
}
if _, err := Translate(SourceVersion+"\nvoid main(){ gl_FragColor = vec4(1.0); }", "x"); err == nil {
t.Fatal("accepted gl_FragColor")
}
}
// glslang finds glslangValidator; AEGO_REQUIRE_GLSLANG=1 makes a missing validator fail rather than skip the test.
func glslang(t *testing.T) string {
t.Helper()
bin, err := exec.LookPath("glslangValidator")
if err != nil {
if os.Getenv("AEGO_REQUIRE_GLSLANG") == "1" {
t.Fatal("glslangValidator is required: install glslang-tools")
}
t.Skip("glslangValidator is not installed")
}
return bin
}