GitRoot

Craft your forge, Build your project, Grow your community freely
 1// SPDX-FileCopyrightText: 2026 Romain Maneschi <romain@gitroot.dev>
 2//
 3// SPDX-License-Identifier: EUPL-1.2
 4
 5package main
 6
 7import (
 8	_ "embed"
 9	"log"
10	"path/filepath"
11	"strings"
12	"testing"
13
14	"golang.org/x/tools/go/packages"
15)
16
17//go:embed resources/go/pluginconf.go
18var goSource string
19
20//go:embed resources/ts/plugin/src/pluginconf.ts
21var tsRes string
22
23//go:embed resources/rust/plugin/src/pluginconf.rs
24var rsRes string
25
26func TestGenerate(t *testing.T) {
27	virtualFile := "./resources/go/pluginconf.go"
28
29	cfg := &packages.Config{
30		Mode: packages.NeedName | packages.NeedFiles | packages.NeedSyntax | packages.NeedTypes | packages.NeedTypesInfo,
31		Overlay: map[string][]byte{
32			virtualFile: []byte(goSource),
33		},
34	}
35
36	pkgs, err := packages.Load(cfg, virtualFile)
37	if err != nil {
38		log.Fatalf("Erreur lors du chargement : %v", err)
39	}
40
41	absTargetDir, err := filepath.Abs("./resources/go/")
42	if err != nil {
43		log.Fatalf("error abs path : %v", err)
44	}
45
46	g := Transform(absTargetDir, pkgs)
47	toDir := "resources/"
48	nbGenerated := 0
49	g.Execute(toDir, func(filepath, filecontent string) {
50		nbGenerated++
51		if strings.HasSuffix(filepath, ".rs") {
52			if filecontent != rsRes {
53				t.Fatal("rust differ")
54			}
55		} else {
56			if filecontent != tsRes {
57				t.Fatal("ts differ")
58			}
59		}
60	})
61	if nbGenerated != 2 {
62		t.Fatalf("should have 2 generated but was %d", nbGenerated)
63	}
64}