github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/lang/test_states.go (about)

     1  package lang
     2  
     3  import "fmt"
     4  
     5  func testStates(p *Process) {
     6  	for _, name := range p.testState {
     7  		p.Tests.mutex.Lock()
     8  		block := p.Tests.stateBlocks[name]
     9  		p.Tests.mutex.Unlock()
    10  		if len(block) == 0 {
    11  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestError, "No test state defined with that name")
    12  			continue
    13  		}
    14  
    15  		fork := p.Fork(F_PARENT_VARTABLE | F_BACKGROUND | F_NO_STDIN | F_CREATE_STDOUT | F_CREATE_STDERR)
    16  		fork.Name.Set(fmt.Sprintf("<state_%s> (%s)", name, p.Name.String()))
    17  		_, err := fork.Execute(block)
    18  		if err != nil {
    19  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestError, err.Error())
    20  		}
    21  
    22  		stdout, err := fork.Stdout.ReadAll()
    23  		if err != nil {
    24  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestError, "state stdout: "+err.Error())
    25  		} else {
    26  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestState, "state stdout: "+string(stdout))
    27  		}
    28  
    29  		stderr, err := fork.Stderr.ReadAll()
    30  		if err != nil {
    31  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestError, "state stderr: "+err.Error())
    32  		} else {
    33  			p.Tests.AddResult(&TestProperties{Name: name}, p, TestState, "state stderr: "+string(stderr))
    34  
    35  		}
    36  	}
    37  }