github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/builtins/core/test/unit.go (about)

     1  package cmdtest
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/lmorg/murex/lang"
     7  	"github.com/lmorg/murex/utils/json"
     8  )
     9  
    10  func testUnitDefine(p *lang.Process) error {
    11  	mod, err := p.Parameters.String(1)
    12  	if err != nil {
    13  		return errUsage("", err)
    14  	}
    15  
    16  	function, err := p.Parameters.String(2)
    17  	if err != nil {
    18  		return errUsage("", err)
    19  	}
    20  
    21  	b, err := p.Parameters.Byte(3)
    22  	if err != nil {
    23  		return errUsage("", err)
    24  	}
    25  
    26  	plan := new(lang.UnitTestPlan)
    27  	err = json.UnmarshalMurex(b, plan)
    28  	if err != nil {
    29  		return err
    30  	}
    31  
    32  	switch mod {
    33  	case "function":
    34  		// do nothing
    35  
    36  	case "private":
    37  		function = p.FileRef.Source.Module + "/" + function
    38  
    39  	case "autocomplete":
    40  		function = lang.UnitTestAutocomplete + "/" + function
    41  
    42  	case "open":
    43  		function = lang.UnitTestOpen + "/" + function
    44  
    45  	case "event":
    46  		function = lang.UnitTestEvent + "/" + function
    47  
    48  	default:
    49  		return errUsage("", fmt.Errorf("unsupported block type (eg `function`, `private`, `event`): `%s`", mod))
    50  	}
    51  
    52  	lang.GlobalUnitTests.Add(function, plan, p.FileRef)
    53  
    54  	return nil
    55  }
    56  
    57  func testUnitRun(p *lang.Process) error {
    58  	function, err := p.Parameters.String(1)
    59  	if err != nil {
    60  		return errUsage("", err)
    61  	}
    62  
    63  	err = p.Config.Set("test", "enabled", true, p.FileRef)
    64  	if err != nil {
    65  		return err
    66  	}
    67  
    68  	err = p.Config.Set("test", "auto-report", true, p.FileRef)
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	lang.GlobalUnitTests.Run(p, function)
    74  
    75  	return p.Tests.WriteResults(p.Config, p.Stdout)
    76  }