Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Further signature overload work #1162

Merged
merged 2 commits into from
Apr 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package org.cqframework.cql.cql2elm;

import org.hl7.elm.r1.*;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;

/**
* Created by Bryn on 4/12/2018.
*/
public class IncludedSignatureOutputTests {

private Map<String, ExpressionDef> defs;

private Library getLibrary(LibraryBuilder.SignatureLevel signatureLevel) throws IOException {
File testFile = new File(URLDecoder.decode(Cql2ElmVisitorTest.class.getResource("SignatureTests/IncludedSignatureOutputTests.cql").getFile(), "UTF-8"));
ModelManager modelManager = new ModelManager();
LibraryManager libraryManager = new LibraryManager(modelManager);
libraryManager.getLibrarySourceLoader().registerProvider(new TestLibrarySourceProvider("SignatureTests"));
CqlTranslator translator = CqlTranslator.fromFile(testFile, modelManager, libraryManager, CqlCompilerException.ErrorSeverity.Info, signatureLevel);
for (CqlCompilerException error : translator.getErrors()) {
System.err.println(String.format("(%d,%d): %s",
error.getLocator().getStartLine(), error.getLocator().getStartChar(), error.getMessage()));
}
assertThat(translator.getErrors().size(), is(0));
defs = new HashMap<>();
Library library = translator.toELM();
if (library.getStatements() != null) {
for (ExpressionDef def : library.getStatements().getDef()) {
defs.put(def.getName(), def);
}
}
return library;
}

@Test
public void TestNone() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.None);

// Verify none of the outputs have signatures
ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestDiffering() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.Differing);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestOverloads() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.Overloads);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestAll() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.All);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(3));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
package org.cqframework.cql.cql2elm;

import org.hl7.elm.r1.*;
import org.testng.annotations.Test;

import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;

public class IncludedSignatureWithAliasOutputTests {

private Map<String, ExpressionDef> defs;

private Library getLibrary(LibraryBuilder.SignatureLevel signatureLevel) throws IOException {
File testFile = new File(URLDecoder.decode(Cql2ElmVisitorTest.class.getResource("SignatureTests/IncludedSignatureWithAliasOutputTests.cql").getFile(), "UTF-8"));
ModelManager modelManager = new ModelManager();
LibraryManager libraryManager = new LibraryManager(modelManager);
libraryManager.getLibrarySourceLoader().registerProvider(new TestLibrarySourceProvider("SignatureTests"));
CqlTranslator translator = CqlTranslator.fromFile(testFile, modelManager, libraryManager, CqlCompilerException.ErrorSeverity.Info, signatureLevel);
for (CqlCompilerException error : translator.getErrors()) {
System.err.println(String.format("(%d,%d): %s",
error.getLocator().getStartLine(), error.getLocator().getStartChar(), error.getMessage()));
}
assertThat(translator.getErrors().size(), is(0));
defs = new HashMap<>();
Library library = translator.toELM();
if (library.getStatements() != null) {
for (ExpressionDef def : library.getStatements().getDef()) {
defs.put(def.getName(), def);
}
}
return library;
}

@Test
public void TestNone() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.None);

// Verify none of the outputs have signatures
ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestDiffering() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.Differing);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestOverloads() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.Overloads);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
public void TestAll() throws IOException {
Library library = getLibrary(LibraryBuilder.SignatureLevel.All);

ExpressionDef def = defs.get("TestOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestOverloadOneInt");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestOverloadTwoInts");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadTwoDecimals");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntOneDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestOverloadOneIntTwoDecimal");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(3));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public class SignatureOutputTests {
private Map<String, ExpressionDef> defs;

private Library getLibrary(LibraryBuilder.SignatureLevel signatureLevel) throws IOException {
File testFile = new File(URLDecoder.decode(Cql2ElmVisitorTest.class.getResource("SignatureOutputTests.cql").getFile(), "UTF-8"));
File testFile = new File(URLDecoder.decode(Cql2ElmVisitorTest.class.getResource("SignatureTests/SignatureOutputTests.cql").getFile(), "UTF-8"));
ModelManager modelManager = new ModelManager();
CqlTranslator translator = CqlTranslator.fromFile(testFile, modelManager, new LibraryManager(modelManager), CqlCompilerException.ErrorSeverity.Info, signatureLevel);
for (CqlCompilerException error : translator.getErrors()) {
Expand Down Expand Up @@ -63,11 +63,17 @@ public void TestNone() throws IOException {
def = defs.get("TestDecimalOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerAndDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
Expand Down Expand Up @@ -97,11 +103,17 @@ public void TestDiffering() throws IOException {
def = defs.get("TestDecimalOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerAndDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
Expand Down Expand Up @@ -134,11 +146,17 @@ public void TestOverloads() throws IOException {
def = defs.get("TestDecimalOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestIntegerAndDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));
}

@Test
Expand Down Expand Up @@ -174,11 +192,17 @@ public void TestAll() throws IOException {
def = defs.get("TestDecimalOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(0));

def = defs.get("TestIntegerMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(1));

def = defs.get("TestDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(2));

def = defs.get("TestIntegerAndDecimalMultipleOverload");
assertThat(((FunctionRef)def.getExpression()).getSignature().size(), is(3));
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
library IncludedSignatureOutputTests

include SignatureOutputTests

define TestOverload: SignatureOutputTests.MultipleOverloadTest()
define TestOverloadOneInt: SignatureOutputTests.MultipleOverloadTest(1)
define TestOverloadOneDecimal: SignatureOutputTests.MultipleOverloadTest(2.0)
define TestOverloadTwoInts: SignatureOutputTests.MultipleOverloadTest(1, 2)
define TestOverloadTwoDecimals: SignatureOutputTests.MultipleOverloadTest(1.0, 2.0)
define TestOverloadOneIntOneDecimal: SignatureOutputTests.MultipleOverloadTest(1, 2.0)
define TestOverloadOneIntTwoDecimal: SignatureOutputTests.MultipleOverloadTest(2.0, 1, 2.0)
Loading