github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/management/source_test.go (about) 1 package management 2 3 import ( 4 "strings" 5 "testing" 6 7 _ "github.com/lmorg/murex/builtins/core/index" 8 _ "github.com/lmorg/murex/builtins/core/io" 9 _ "github.com/lmorg/murex/builtins/core/runtime" 10 _ "github.com/lmorg/murex/builtins/types/json" 11 "github.com/lmorg/murex/lang" 12 "github.com/lmorg/murex/lang/ref" 13 "github.com/lmorg/murex/test/count" 14 ) 15 16 func TestSourceMethod(t *testing.T) { 17 block := `tout block { out "Hello, world!" } -> source` 18 19 lang.InitEnv() 20 21 fork := lang.ShellProcess.Fork(lang.F_FUNCTION | lang.F_NO_STDIN | lang.F_CREATE_STDOUT | lang.F_CREATE_STDERR) 22 testSourceFileRef(t, fork, block) 23 } 24 25 func TestSourceParameter(t *testing.T) { 26 block := `source { out "Hello, world!" }` 27 28 lang.InitEnv() 29 30 fork := lang.ShellProcess.Fork(lang.F_FUNCTION | lang.F_NO_STDIN | lang.F_CREATE_STDOUT | lang.F_CREATE_STDERR) 31 testSourceFileRef(t, fork, block) 32 } 33 34 func TestSourceFile(t *testing.T) { 35 block := `source source_test.mx` 36 37 lang.InitEnv() 38 39 fork := lang.ShellProcess.Fork(lang.F_FUNCTION | lang.F_NO_STDIN | lang.F_CREATE_STDOUT | lang.F_CREATE_STDERR) 40 testSourceFileRef(t, fork, block) 41 } 42 43 func testSourceFileRef(t *testing.T, fork *lang.Fork, block string) { 44 count.Tests(t, 1) 45 46 fork.Name.Set("(fork)") 47 48 exitNum, err := fork.Execute([]rune(block)) 49 if exitNum != 0 { 50 t.Errorf("fork.Execute().exitNum != 0: %d", exitNum) 51 } 52 if err != nil { 53 t.Errorf("fork.Execute().err != nil: %s", err.Error()) 54 } 55 56 b, err := fork.Stderr.ReadAll() 57 if err != nil { 58 t.Errorf("fork.Stderr.ReadAll().err != nil: %s", err.Error()) 59 } 60 if len(b) != 0 { 61 t.Errorf("fork.Stderr.ReadAll().b != ``: %s", string(b)) 62 } 63 64 b, err = fork.Stdout.ReadAll() 65 if err != nil { 66 t.Errorf("fork.Stdout.ReadAll().err != nil: %s", err.Error()) 67 } 68 if string(b) != "Hello, world!\n" { 69 t.Errorf(`fork.Stdout.ReadAll().b != "Hello, world!\n": %s`, string(b)) 70 } 71 72 v := ref.History.Dump() 73 74 for _, d := range v { 75 if d.Filename == "" { 76 t.Errorf("Source Filename == ``") 77 } 78 if d.Module == "" { 79 t.Errorf("Source Module == ``") 80 } 81 if !strings.HasPrefix(d.Module, fork.FileRef.Source.Module+":") { 82 t.Errorf("Source Module != `module:...`") 83 } 84 if d.Source == "" { 85 t.Errorf("Source Source == ``") 86 } 87 if !strings.Contains(d.Source, `out "Hello, world!"`) { 88 t.Errorf(`Source Source != out "Hello, world!"`) 89 } 90 } 91 }