Improving LSP

This commit is contained in:
Martino Ferrari
2026-01-30 15:36:27 +01:00
parent ee9674a7bc
commit b4d3edab9d
6 changed files with 222 additions and 12 deletions

View File

@@ -0,0 +1,101 @@
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/validator"
)
func TestINOUTValueInitialization(t *testing.T) {
content := `
+Data = {
Class = ReferenceContainer
+MyDS = {
Class = GAMDataSource
#meta = { multithreaded = false }
Signals = { Sig1 = { Type = uint32 } }
}
}
+GAM1 = {
Class = IOGAM
InputSignals = {
Sig1 = {
DataSource = MyDS
Type = uint32
Value = 10 // Initialization
}
}
}
+GAM2 = {
Class = IOGAM
InputSignals = {
Sig1 = { DataSource = MyDS Type = uint32 } // Consumes initialized signal
}
}
+App = {
Class = RealTimeApplication
+States = {
Class = ReferenceContainer
+State1 = {
Class = RealTimeState
+Thread1 = {
Class = RealTimeThread
Functions = { GAM1, GAM2 } // Should Pass
}
}
}
}
`
pt := index.NewProjectTree()
p := parser.NewParser(content)
cfg, err := p.Parse()
if err != nil {
t.Fatal(err)
}
pt.AddFile("main.marte", cfg)
v := validator.NewValidator(pt, ".")
v.ValidateProject()
for _, d := range v.Diagnostics {
if strings.Contains(d.Message, "before being produced") {
t.Errorf("Unexpected error: %s", d.Message)
}
}
}
func TestINOUTValueTypeMismatch(t *testing.T) {
content := `
+Data = { Class = ReferenceContainer +DS = { Class = GAMDataSource #meta = { multithreaded = false } Signals = { S = { Type = uint8 } } } }
+GAM1 = {
Class = IOGAM
InputSignals = {
S = { DataSource = DS Type = uint8 Value = 1024 }
}
}
+App = { Class = RealTimeApplication +States = { Class = ReferenceContainer +S = { Class = RealTimeState Threads = { +T = { Class = RealTimeThread Functions = { GAM1 } } } } } }
`
pt := index.NewProjectTree()
p := parser.NewParser(content)
cfg, err := p.Parse()
if err != nil {
t.Fatal(err)
}
pt.AddFile("fail.marte", cfg)
v := validator.NewValidator(pt, ".")
v.ValidateProject()
found := false
for _, d := range v.Diagnostics {
if strings.Contains(d.Message, "Value initialization mismatch") {
found = true
}
}
if !found {
t.Error("Expected Value initialization mismatch error")
}
}