Improved test
This commit is contained in:
84
test/validator_expression_test.go
Normal file
84
test/validator_expression_test.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package integration
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/marte-community/marte-dev-tools/internal/index"
|
||||
"github.com/marte-community/marte-dev-tools/internal/parser"
|
||||
"github.com/marte-community/marte-dev-tools/internal/schema"
|
||||
"github.com/marte-community/marte-dev-tools/internal/validator"
|
||||
)
|
||||
|
||||
func TestValidatorExpressionCoverage(t *testing.T) {
|
||||
content := `
|
||||
#var A: int = 10
|
||||
#var B: int = 5
|
||||
#var S1: string = "Hello"
|
||||
#var S2: string = "World"
|
||||
|
||||
// Valid cases (execution hits evaluateBinary)
|
||||
#var Sum: int = @A + @B // 15
|
||||
#var Sub: int = @A - @B // 5
|
||||
#var Mul: int = @A * @B // 50
|
||||
#var Div: int = @A / @B // 2
|
||||
#var Mod: int = @A % 3 // 1
|
||||
#var Concat: string = @S1 .. " " .. @S2 // "Hello World"
|
||||
#var Unary: int = -@A // -10
|
||||
#var BitAnd: int = 10 & 5
|
||||
#var BitOr: int = 10 | 5
|
||||
#var BitXor: int = 10 ^ 5
|
||||
|
||||
#var FA: float = 1.5
|
||||
#var FB: float = 2.0
|
||||
#var FSum: float = @FA + @FB // 3.5
|
||||
#var FSub: float = @FB - @FA // 0.5
|
||||
#var FMul: float = @FA * @FB // 3.0
|
||||
#var FDiv: float = @FB / @FA // 1.333...
|
||||
|
||||
#var BT: bool = true
|
||||
#var BF: bool = !@BT
|
||||
|
||||
// Invalid cases (should error)
|
||||
#var BadSum: int & > 20 = @A + @B // 15, should fail
|
||||
#var BadUnary: bool = !10 // Should fail type check (nil result from evaluateUnary)
|
||||
#var StrVar: string = "DS"
|
||||
|
||||
+InvalidDS = {
|
||||
Class = IOGAM
|
||||
InputSignals = {
|
||||
S = { DataSource = 10 } // Int coverage
|
||||
S2 = { DataSource = 1.5 } // Float coverage
|
||||
S3 = { DataSource = true } // Bool coverage
|
||||
S4 = { DataSource = @StrVar } // VarRef coverage -> String
|
||||
S5 = { DataSource = { 1 } } // Array coverage (default case)
|
||||
}
|
||||
OutputSignals = {}
|
||||
}
|
||||
`
|
||||
pt := index.NewProjectTree()
|
||||
p := parser.NewParser(content)
|
||||
cfg, err := p.Parse()
|
||||
if err != nil {
|
||||
t.Fatalf("Parse failed: %v", err)
|
||||
}
|
||||
pt.AddFile("expr.marte", cfg)
|
||||
pt.ResolveReferences()
|
||||
|
||||
v := validator.NewValidator(pt, ".")
|
||||
// Use NewSchema to ensure basic types
|
||||
v.Schema = schema.NewSchema()
|
||||
|
||||
v.CheckVariables()
|
||||
|
||||
// Check for expected errors
|
||||
foundBadSum := false
|
||||
for _, diag := range v.Diagnostics {
|
||||
if strings.Contains(diag.Message, "BadSum") && strings.Contains(diag.Message, "value mismatch") {
|
||||
foundBadSum = true
|
||||
}
|
||||
}
|
||||
if !foundBadSum {
|
||||
t.Error("Expected error for BadSum")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user