Improved test

This commit is contained in:
Martino Ferrari
2026-02-02 15:20:41 +01:00
parent d2b2750833
commit b879766021
9 changed files with 386 additions and 19 deletions

View 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")
}
}