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 }