1package client
2
3import (
4 "crypto/sha256"
5 "fmt"
6 "os"
7 "strings"
8 "testing"
9
10 "github.com/bnema/go-wayland-bindings/spec"
11)
12
13func TestIncludedLGPLLicense(t *testing.T) {
14 content, err := os.ReadFile("../../../LICENSES/LGPL-2.1-or-later.txt")
15 if err != nil {
16 t.Fatal(err)
17 }
18 const expected = "5749785c8bdefafcb5d798270ed0a967036fe2ca63dcedade1627565dfef81d2"
19 if got := fmt.Sprintf("%x", sha256.Sum256(content)); got != expected {
20 t.Fatalf("LGPL text checksum %s, want %s", got, expected)
21 }
22}
23
24func TestGeneratedSourceRetainsProtocolLicense(t *testing.T) {
25 for _, c := range []struct{ pkg, source string }{
26 {"serverdecoration", "server-decoration.xml"},
27 {"wlrlayershell", "wlr-layer-shell-unstable-v1.xml"},
28 {"wayland", "wayland.xml"},
29 } {
30 t.Run(c.pkg, func(t *testing.T) {
31 data, err := spec.Open(c.pkg)
32 if err != nil {
33 t.Fatal(err)
34 }
35 s := NewScanner()
36 if err := s.Load(data, c.source); err != nil {
37 t.Fatal(err)
38 }
39 s.CrossPackage = map[string]string{
40 "wl_surface": "github.com/bnema/go-wayland-bindings/client/wayland",
41 "wl_output": "github.com/bnema/go-wayland-bindings/client/wayland",
42 "xdg_popup": "github.com/bnema/go-wayland-bindings/client/xdgshell",
43 }
44 generated, err := s.Generate("wayland")
45 if err != nil {
46 t.Fatal(err)
47 }
48 header, _, ok := strings.Cut(string(generated), "\npackage wayland")
49 if !ok {
50 t.Fatal("package declaration missing")
51 }
52 if !strings.Contains(header, "// Source: "+c.source+"\n") {
53 t.Errorf("source name missing from header:\n%s", header)
54 }
55 for _, line := range strings.Split(strings.TrimSpace(s.protocol.Copyright), "\n") {
56 if text := strings.TrimSpace(line); text != "" && !strings.Contains(header, text) {
57 t.Errorf("upstream license line missing from header: %q", text)
58 }
59 }
60 })
61 }
62}