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  }