Skip to content

Commit 27a4cfb

Browse files
authored
Merge pull request #937 from FirelyTeam/copilot/fix-924
924 Fix cross-platform build failures and extract shared code generation logic into reusable .targets file
2 parents ef18671 + af46c23 commit 27a4cfb

16 files changed

+278
-371
lines changed

Cql-Sdk-All.sln

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,9 @@ EndProject
121121
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Ncqa.HT.Infrastructure", "submodules\Ncqa.DQIC\Ncqa.HT.Infrastructure\Ncqa.HT.Infrastructure.csproj", "{BAEF695A-5581-B3EE-B352-CBF447240E55}"
122122
EndProject
123123
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{14ED22C5-F918-42DB-A301-04B3AED51EBC}"
124+
ProjectSection(SolutionItems) = preProject
125+
Examples\CqlSdkExamplesCodeGeneration.targets = Examples\CqlSdkExamplesCodeGeneration.targets
126+
EndProjectSection
124127
EndProject
125128
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{8EC462FD-D22E-90A8-E5CE-7E832BA40C5D}"
126129
ProjectSection(SolutionItems) = preProject

Cql-Sdk-Demos-Examples.slnf

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"solution": {
3+
"path": "Cql-Sdk-All.sln",
4+
"projects": [
5+
"Cql\\Benchmarks\\Benchmarks.csproj",
6+
"Cql\\CodeGeneration.NET\\CodeGeneration.NET.csproj",
7+
"Cql\\CoreTests\\CoreTests.csproj",
8+
"Cql\\Cql.Abstractions\\Cql.Abstractions.csproj",
9+
"Cql\\Cql.Compiler\\Cql.Compiler.csproj",
10+
"Cql\\Cql.CqlToElm\\Cql.CqlToElm.csproj",
11+
"Cql\\Cql.Firely\\Cql.Firely.csproj",
12+
"Cql\\Cql.Grammar\\Cql.Grammar.csproj",
13+
"Cql\\Cql.Invocation\\Cql.Invocation.csproj",
14+
"Cql\\Cql.Model\\Cql.Model.csproj",
15+
"Cql\\Cql.Packaging\\Cql.Packaging.csproj",
16+
"Cql\\Cql.Runtime\\Cql.Runtime.csproj",
17+
"Cql\\CqlToElmTests\\CqlToElmTests.csproj",
18+
"Cql\\Cql\\Cql.csproj",
19+
"Cql\\Elm\\Elm.csproj",
20+
"Cql\\Iso8601\\Iso8601.csproj",
21+
"Cql\\PackagerCLI\\PackagerCLI.csproj",
22+
"Demo\\CLI\\CLI.csproj",
23+
"Demo\\Cql\\Cql.csproj",
24+
"Demo\\Measures.Authoring\\Measures.Authoring.csproj",
25+
"Demo\\Measures.CMS\\Measures.CMS.csproj",
26+
"Demo\\Measures.Demo\\Measures.Demo.csproj",
27+
"Demo\\Test.Measures.Demo\\Test.Measures.Demo.csproj",
28+
"Examples\\CqlSdkExamplesPreview\\CqlSdkExamplesPreview.csproj",
29+
"Examples\\CqlSdkExamples\\CqlSdkExamples.csproj"
30+
]
31+
}
32+
}

Cql/CoreTests/CoreTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
<LibrarySet>CoreTests.HL7</LibrarySet>
4646
<CqlDirectory>$(MSBuildProjectDirectory)/input/elm/hl7</CqlDirectory>
4747
<ElmDirectory>$(MSBuildProjectDirectory)/input/elm/hl7</ElmDirectory>
48-
<DllDirectory>$(MSBuildProjectDirectory)/Dlls</DllDirectory>
48+
<!-- <DllDirectory>$(MSBuildProjectDirectory)/Dlls</DllDirectory> -->
4949
<!-- <ResourcesDirectory>$(MSBuildProjectDirectory)/Resources</ResourcesDirectory> -->
5050
<!-- <TestResultsDirectory>$(MSBuildProjectDirectory)/input/tests/results</TestResultsDirectory> -->
5151
<!-- <CqlToElmEnabled>true</CqlToElmEnabled> -->

Cql/CoreTests/ElmPreprocessorTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ namespace CoreTests
1515
public class ElmPreprocessorTest
1616
{
1717
private Library FHIRHelpers() =>
18-
Library.LoadFromJson(new FileInfo(@"..\..\..\..\..\LibrarySets\Demo\Elm\FHIRHelpers.json"));
18+
Library.LoadFromJson(new FileInfo(Path.Combine("..", "..", "..", "..", "..", "LibrarySets", "Demo", "Elm", "FHIRHelpers.json")));
1919

2020
[TestMethod]
2121
public void MATGlobal_Add_ResultTypeSpecifier()
2222
{
23-
var file = new FileInfo(@"..\..\..\..\..\LibrarySets\Demo\Elm\MATGlobalCommonFunctionsFHIR4.json");
23+
var file = new FileInfo(Path.Combine("..", "..", "..", "..", "..", "LibrarySets", "Demo", "Elm", "MATGlobalCommonFunctionsFHIR4.json"));
2424
file.Exists.Should().BeTrue();
2525

2626
var lib = Library.LoadFromJson(file);

Cql/CoreTests/ElmSerializerTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public void Elm_Deserialize_TupleTypeSpecifier()
4343
[TestMethod]
4444
public void Elm_Deserialize_FhirHelpers()
4545
{
46-
var originalElm = File.ReadAllText(@"Input\ELM\Libs\FHIRHelpers-4.0.1.json");
46+
var originalElm = File.ReadAllText(Path.Combine("Input", "ELM", "Libs", "FHIRHelpers-4.0.1.json"));
4747
var lib = Library.ParseFromJson(originalElm);
4848
var elm = lib.SerializeToJson();
4949

@@ -88,7 +88,7 @@ public void DeserializeFieldSpecifiedElement()
8888
[TestMethod]
8989
public void Elm_Deserialize_MixedXmlAnnotations()
9090
{
91-
var originalElm = File.ReadAllText(@"Input\ELM\Test\CqlWithAnnotations.xml");
91+
var originalElm = File.ReadAllText(Path.Combine("Input", "ELM", "Test", "CqlWithAnnotations.xml"));
9292
var x = new XmlSerializer(typeof(Library));
9393
var lib = (Library)x.Deserialize(new StringReader(originalElm))!;
9494
var annotation = lib.usings[1].annotation[0].Should().BeOfType<Annotation>().Subject;

Cql/CoreTests/ExpressionBuilderTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public void AggregateQueries_1_0_0()
3333
{
3434
using var serviceProvider = BuildServiceProvider();
3535
using var servicesScope = serviceProvider.CreateScope();
36-
var elm = new FileInfo(@"Input\ELM\Test\Aggregates-1.0.0.json");
36+
var elm = new FileInfo(Path.Combine("Input", "ELM", "Test", "Aggregates-1.0.0.json"));
3737
var elmPackage = Hl7.Cql.Elm.Library.LoadFromJson(elm);
3838
var definitions = servicesScope.ServiceProvider.GetRequiredService<LibraryExpressionBuilder>().ProcessLibrary(elmPackage);
3939
Assert.IsNotNull(definitions);
@@ -45,7 +45,7 @@ public void FHIRConversionTest_1_0_0()
4545
{
4646
using var serviceProvider = BuildServiceProvider();
4747
using var servicesScope = serviceProvider.CreateScope();
48-
var elm = new FileInfo(@"Input\ELM\HL7\FHIRConversionTest.json");
48+
var elm = new FileInfo(Path.Combine("Input", "ELM", "HL7", "FHIRConversionTest.json"));
4949
var elmPackage = Hl7.Cql.Elm.Library.LoadFromJson(elm);
5050
var definitions = servicesScope.ServiceProvider.GetRequiredService<LibraryExpressionBuilder>().ProcessLibrary(elmPackage);
5151
Assert.IsNotNull(definitions);
@@ -57,7 +57,7 @@ public void QueriesTest_1_0_0()
5757
{
5858
using var serviceProvider = BuildServiceProvider();
5959
using var servicesScope = serviceProvider.CreateScope();
60-
var elm = new FileInfo(@"Input\ELM\Test\QueriesTest-1.0.0.json");
60+
var elm = new FileInfo(Path.Combine("Input", "ELM", "Test", "QueriesTest-1.0.0.json"));
6161
var elmPackage = Hl7.Cql.Elm.Library.LoadFromJson(elm);
6262
var definitions = servicesScope.ServiceProvider.GetRequiredService<LibraryExpressionBuilder>().ProcessLibrary(elmPackage);
6363
Assert.IsNotNull(definitions);
@@ -72,8 +72,8 @@ public void Medication_Request_Example_Test()
7272
using var servicesScope = serviceProvider.CreateScope();
7373
FileInfo[] files =
7474
[
75-
new(@"Input\ELM\Test\Medication_Request_Example.json"),
76-
new(@"Input\ELM\Libs\FHIRHelpers-4.0.1.json")
75+
new(Path.Combine("Input", "ELM", "Test", "Medication_Request_Example.json")),
76+
new(Path.Combine("Input", "ELM", "Libs", "FHIRHelpers-4.0.1.json"))
7777
];
7878
var librarySet = new LibrarySet();
7979
librarySet.LoadLibraries(files);

Cql/CoreTests/PrimitiveTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3407,7 +3407,7 @@ public void Collapse_Containing_Null()
34073407
public void Aggregate_Query_Test()
34083408
{
34093409
var librarySet = new LibrarySet();
3410-
librarySet.LoadLibraryAndDependencies(new DirectoryInfo("Input\\ELM\\Test"), "Aggregates", "1.0.0");
3410+
librarySet.LoadLibraryAndDependencies(new DirectoryInfo(Path.Combine("Input", "ELM", "Test")), "Aggregates", "1.0.0");
34113411

34123412
var loggerFactory = new ServiceCollection()
34133413
.AddDebugLogging()

Cql/CoreTests/QueriesTest.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ public static void Initialize(TestContext context)
2727
{
2828
_librarySetInvoker = new ElmToolkit()
2929
.AddElmFiles((FileInfo[])[
30-
new(@"Input\ELM\Test\QueriesTest-1.0.0.json"),
31-
new(@"Input\ELM\Test\Aggregates-1.0.0.json")])
30+
new(Path.Combine("Input", "ELM", "Test", "QueriesTest-1.0.0.json")),
31+
new(Path.Combine("Input", "ELM", "Test", "Aggregates-1.0.0.json"))])
3232
.CreateLibrarySetInvoker();
3333

3434
QueriesDefinitions = _librarySetInvoker.LibraryInvokers[(CqlVersionedLibraryIdentifier)"QueriesTest-1.0.0"]!;

Cql/CoreTests/ToolkitTests.cs

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@
88

99
#nullable enable
1010
using Hl7.Cql.Abstractions;
11-
using Hl7.Cql.CodeGeneration.NET;
1211
using Hl7.Cql.CodeGeneration.NET.Toolkit;
1312
using Hl7.Cql.CodeGeneration.NET.Toolkit.Extensions;
1413
using Hl7.Cql.CqlToElm;
1514
using Hl7.Cql.CqlToElm.Toolkit;
1615
using Hl7.Cql.CqlToElm.Toolkit.Extensions;
1716
using Hl7.Cql.Elm;
1817
using Hl7.Cql.Fhir;
19-
using Hl7.Cql.Invocation.Toolkit;
2018
using Hl7.Cql.Invocation.Toolkit.Extensions;
2119
using Hl7.Cql.Runtime;
2220

@@ -26,28 +24,46 @@ namespace CoreTests;
2624
public class ToolkitTests
2725
{
2826
[TestMethod]
29-
public void TestRuntimeScopeAgainstLibraryDefinitionResults()
27+
public void TestNestedTupleResult_ToString_MatchesExpectedFormat()
3028
{
3129
// Arrange
32-
var filePath = new DirectoryInfo(Directory.GetCurrentDirectory())
33-
.SelfAndParents()
34-
.Select(dir => Path.GetFullPath(Path.Combine(dir.FullName, "Dlls", "CqlNestedTupleTest-1.0.0.dll")))
35-
.First(File.Exists);
30+
var cqlNestedTuples =
31+
(CqlLibraryString)"""
32+
library CqlNestedTupleTest version '1.0.0'
33+
34+
define "Result":
35+
Tuple{
36+
status: 'success',
37+
result: Tuple{
38+
result1: 'some first result',
39+
result2: 'some second result'
40+
}
41+
}
42+
""";
43+
3644
var ctx = FhirCqlContext.ForBundle();
37-
using var librarySetInvoker = new InvocationToolkit()
38-
.AddAssemblyBinaries(AssemblyBinary.Default.LoadFromFile(new FileInfo(filePath)))
39-
.CreateLibrarySetInvoker();
45+
using var librarySetInvoker =
46+
new CqlToolkit()
47+
.AddCqlLibraries(cqlNestedTuples)
48+
.CreateLibrarySetInvoker();
4049

4150
// Act
42-
var result = librarySetInvoker
51+
var results = librarySetInvoker
4352
.SelectExpressionsForLibrary(CqlVersionedLibraryIdentifier.Parse("CqlNestedTupleTest-1.0.0"))
4453
.SelectResults(ctx)
4554
.ToDictionary(t => t.definitionInvoker.DefinitionName);
4655

4756
// Assert
48-
Assert.IsNotNull(result);
49-
result.TryGetValue("Result", out var obj);
57+
Assert.IsNotNull(results);
58+
results.TryGetValue("Result", out var obj);
5059
Assert.IsNotNull(obj);
60+
Assert.IsNotNull(obj.invocationResult);
61+
Assert.AreEqual(
62+
// NOTE: This is the raw ToString() output of the value tuple returned from the CQL library.
63+
// It is not a JSON string, but a C# value tuple string representation.
64+
"""
65+
(["result", "status"], (["result1", "result2"], some first result, some second result), success)
66+
""", obj.invocationResult.ToString());
5167
}
5268

5369
[TestMethod]
@@ -220,8 +236,8 @@ context Patient
220236

221237
// Act: Get expressions and functions using the new method
222238
var expressionsAndFunctions = libraryInvoker.SelectExpressions(DefinitionPredicates.ExpressionsAndFunctions)
223-
.Where(d => d.DefinitionName != "Patient") // Filter out the automatic Patient context definition
224-
.ToList();
239+
.Where(d => d.DefinitionName != "Patient") // Filter out the automatic Patient context definition
240+
.ToList();
225241

226242
// Assert: Should include both expressions and functions
227243
expressionsAndFunctions.Should().HaveCount(5, "Should include 2 expressions and 3 functions");
@@ -337,8 +353,8 @@ public void DefinitionInvokerParameters_Tests()
337353

338354
// Act: Generate C# code and compile to assembly using ElmToolkit
339355
var elmToolkit = new ElmToolkit()
340-
.AddElmLibraries([elmLibrary])
341-
.CompileToAssemblies();
356+
.AddElmLibraries([elmLibrary])
357+
.CompileToAssemblies();
342358

343359
var assemblyResult = elmToolkit.GetElmToAssemblyResults().First();
344360
var assemblyBinary = assemblyResult.assemblyBinary;
@@ -376,5 +392,4 @@ public void DefinitionInvokerParameters_Tests()
376392
keywordTestInvoker.Parameters[1].Name.Should().Be("ref", "Second parameter should preserve original CQL name even if it's a C# keyword");
377393
keywordTestInvoker.Parameters[2].Name.Should().Be("class", "Third parameter should preserve original CQL name even if it's a C# keyword");
378394
}
379-
380-
}
395+
}

Cql/CoreTests/ValueSetTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public void HashDictonaryInternsCodes()
9393
[TestMethod]
9494
public void Intensional_Value_Set()
9595
{
96-
var resolver = new DirectorySource(@"Input\ValueSets");
96+
var resolver = new DirectorySource(Path.Combine("Input", "ValueSets"));
9797
var vsd = new ValueSetSource(resolver);
9898

9999
Assert.IsTrue(vsd.TryGetCodesInValueSet("https://www.ncqa.org/fhir/valueset/2.16.840.1.113883.3.464.1004.1009", out var codes1009));
@@ -109,7 +109,7 @@ public void Intensional_Value_Set()
109109
[TestMethod]
110110
public void Intensional_Value_Set_2_Levels()
111111
{
112-
var resolver = new DirectorySource(@"Input\ValueSets");
112+
var resolver = new DirectorySource(Path.Combine("Input", "ValueSets"));
113113
var vsd = new ValueSetSource(resolver);
114114

115115
Assert.IsTrue(vsd.TryGetCodesInValueSet("https://www.ncqa.org/fhir/valueset/2.16.840.1.113883.3.464.1004.1009", out var codes1009));
@@ -130,7 +130,7 @@ public void Intensional_Value_Set_2_Levels()
130130
[TestMethod]
131131
public void Intensional_Value_Set_Cycle()
132132
{
133-
var resolver = new DirectorySource(@"Input\ValueSets");
133+
var resolver = new DirectorySource(Path.Combine("Input", "ValueSets"));
134134
var vsd = new ValueSetSource(resolver);
135135

136136
Assert.ThrowsException<TerminologyServiceException>(() => vsd.TryGetCodesInValueSet("https://www.ncqa.org/fhir/valueset/intensional-value-set-3", out _));

0 commit comments

Comments
 (0)