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}