markTestSkipped('Symfony ExpressionLanguage not installed'); } } public function testCompileSexCondition(): void { $svc = new RuleExpressionService(); $compiled = $svc->compile("if(sex('F') ? result_set(0.7) : result_set(1))"); $this->assertIsArray($compiled); $this->assertEquals('patient["Sex"] == "F"', $compiled['conditionExpr']); $this->assertEquals(0.7, $compiled['then'][0]['value']); $this->assertEquals(1, $compiled['else'][0]['value']); $this->assertStringContainsString('patient["Sex"] == "F"', $compiled['valueExpr']); } public function testCompilePriorityCondition(): void { $svc = new RuleExpressionService(); $compiled = $svc->compile("if(priority('S') ? result_set('urgent') : result_set('normal'))"); $this->assertIsArray($compiled); $this->assertEquals('order["Priority"] == "S"', $compiled['conditionExpr']); $this->assertEquals('urgent', $compiled['then'][0]['value']); $this->assertEquals('normal', $compiled['else'][0]['value']); } public function testCompileInvalidSyntax(): void { $svc = new RuleExpressionService(); $this->expectException(\InvalidArgumentException::class); $svc->compile("invalid syntax here"); } public function testCompileEmptyReturnsEmpty(): void { $svc = new RuleExpressionService(); $compiled = $svc->compile(""); $this->assertIsArray($compiled); $this->assertEmpty($compiled); } }