public void FhirPath_Gramm_Expression_Indexer() { var parser = Grammar.InvocationExpression.End(); AssertParser.SucceedsMatch(parser, "Patient.name", PATIENTNAME); AssertParser.SucceedsMatch(parser, "Patient.name [4 ]", new IndexerExpression(PATIENTNAME, new ConstantExpression(4))); AssertParser.SucceedsMatch(parser, "$this[4].name", new ChildExpression( new IndexerExpression(AxisExpression.This, new ConstantExpression(4)), "name")); AssertParser.FailsMatch(parser, "Patient.name["); AssertParser.FailsMatch(parser, "Patient.name]"); AssertParser.FailsMatch(parser, "Patient.name[]"); AssertParser.FailsMatch(parser, "Patient.name[4,]"); AssertParser.FailsMatch(parser, "Patient.name[4,5]"); }
public void FhirPath_Lex_DateTime() { var parser = Lexer.DateTime.End(); SucceedsPartialDateTime(parser, "@2015-01"); SucceedsPartialDateTime(parser, "@2015-01-02T12:34:00Z"); SucceedsPartialDateTime(parser, "@2015-01-03T12:34:34+02:30"); SucceedsPartialDateTime(parser, "@2015-01-03T12:34:34"); // SucceedsPartialDateTime(parser, "@2015-01-01T23"); TODO: Make this work AssertParser.FailsMatch(parser, "@2015-32-02T12:34:00Z"); AssertParser.FailsMatch(parser, "@2015-01-02T28:34:00Z"); AssertParser.FailsMatch(parser, "T12:34:34+02:30"); AssertParser.FailsMatch(parser, "12:34:34+02:30"); AssertParser.FailsMatch(parser, "@T12:34:34+02:30"); AssertParser.FailsMatch(parser, "@12:34:34+02:30"); AssertParser.FailsMatch(parser, "@20150103T12:34:34+02:30"); AssertParser.FailsMatch(parser, "@-2015-01"); }
public void FhirPath_Lex_Const() { var parser = Lexer.ExternalConstant.End(); SucceedsPrefixString(parser, "%c"); SucceedsPrefixString(parser, "%const"); SucceedsPrefixString(parser, "%a1"); SucceedsPrefixString(parser, "%a__1"); AssertParser.SucceedsMatch(parser, "%\"forbidden-characters-1234\"", "forbidden-characters-1234"); AssertParser.FailsMatch(parser, "%0"); AssertParser.FailsMatch(parser, "%0123"); AssertParser.FailsMatch(parser, "%"); AssertParser.FailsMatch(parser, "%%"); AssertParser.FailsMatch(parser, "%%a"); AssertParser.FailsMatch(parser, "%-"); AssertParser.FailsMatch(parser, "%*"); }
public void FhirPath_Lex_Time() { var parser = Lexer.Time.End(); SucceedsTime(parser, "@T12:34:00Z"); SucceedsTime(parser, "@T12:34:34+02:30"); SucceedsTime(parser, "@T12:34:34"); // SucceedsTime(parser, "@T12:35"); TODO: make this work // SucceedsTime(parser, "@T12"); AssertParser.FailsMatch(parser, "2001-01-01T12:34:34+02:30"); AssertParser.FailsMatch(parser, "@2001-01-01T12:34:34+02:30"); AssertParser.FailsMatch(parser, "T12:34:34+02:30"); AssertParser.FailsMatch(parser, "12:34:34+02:30"); AssertParser.FailsMatch(parser, "@12:34:34+02:30"); AssertParser.FailsMatch(parser, "@T12:34:34+48:30"); }
public void FhirPath_Lex_Decimal() { var parser = Lexer.DecimalNumber.End(); AssertParser.SucceedsMatch(parser, "3.4", 3.4m); // FHIR allows leading zeroes since STU3 AssertParser.SucceedsMatch(parser, "01.00", 1.00m); AssertParser.SucceedsMatch(parser, "3.1415926535897932384626433", 3.1415926535897932384626433m); // Shall not accept integer values AssertParser.FailsMatch(parser, "3"); // Test invalid values AssertParser.FailsMatch(parser, ""); AssertParser.FailsMatch(parser, "a0"); AssertParser.FailsMatch(parser, "0d"); AssertParser.FailsMatch(parser, "0x0"); AssertParser.FailsMatch(parser, "0.314+E01"); }
public void FhirPath_Lex_String() { var parser = Lexer.String.End(); SucceedsDelimitedString(parser, @"'single quotes'"); SucceedsDelimitedString(parser, @"'""single quotes with doubles""'"); AssertParser.SucceedsMatch(parser, @"'single \' quotes'", @"single ' quotes"); SucceedsDelimitedString(parser, @"''"); AssertParser.SucceedsMatch(parser, @"'xxx \u0040 yyy \\\/\f\n\r\t zzz !@#$%^&*()_-=+[]{}|;:,.<>?`~'", "xxx @ yyy \\/\f\n\r\t zzz " + @"!@#$%^&*()_-=+[]{}|;:,.<>?`~"); AssertParser.SucceedsMatch(parser, @"'\\b(?<month>\\d{1,2})/(?<day>\\d{1,2})/(?<year>\\d{2,4})\\b'", @"\b(?<month>\d{1,2})/(?<day>\d{1,2})/(?<year>\d{2,4})\b"); AssertParser.FailsMatch(parser, @"'\q incorrect escape'"); AssertParser.FailsMatch(parser, @"""double quotes"""); AssertParser.FailsMatch(parser, @"no quotes"); AssertParser.FailsMatch(parser, @"""mixed quotes'"); }
public void FhirPath_Gramm_Literal() { var parser = Grammar.Literal.End(); AssertParser.SucceedsMatch(parser, "'hi there'", new ConstantExpression("hi there")); var m = new ConstantExpression(3); AssertParser.SucceedsMatch(parser, "3", m); AssertParser.SucceedsMatch(parser, "3.14", new ConstantExpression(3.14m)); AssertParser.SucceedsMatch(parser, "@2013-12", new ConstantExpression(P.Date.Parse("2013-12"))); AssertParser.SucceedsMatch(parser, "@2013-12T", new ConstantExpression(P.DateTime.Parse("2013-12"))); AssertParser.SucceedsMatch(parser, "@T12:23:34", new ConstantExpression(P.Time.Parse("12:23:34"))); AssertParser.SucceedsMatch(parser, "true", new ConstantExpression(true)); AssertParser.SucceedsMatch(parser, "@2014-12-13T12:00:00+02:00", new ConstantExpression(P.DateTime.Parse("2014-12-13T12:00:00+02:00"))); AssertParser.FailsMatch(parser, "%constant"); AssertParser.FailsMatch(parser, "`quotedstring`"); AssertParser.FailsMatch(parser, "A23identifier"); }
public void FhirPath_Lex_Escape() { var parser = Lexer.Escape.End(); AssertParser.SucceedsMatch(parser, @"\uface", "龜"); AssertParser.SucceedsMatch(parser, @"\'", @"'"); AssertParser.SucceedsMatch(parser, @"\""", "\""); AssertParser.SucceedsMatch(parser, @"\\", @"\"); AssertParser.SucceedsMatch(parser, @"\/", "/"); //AssertParser.SucceedsMatch(parser, @"\b"); - removed in STU3 AssertParser.SucceedsMatch(parser, @"\f", "\f"); AssertParser.SucceedsMatch(parser, @"\n", "\n"); AssertParser.SucceedsMatch(parser, @"\r", "\r"); AssertParser.SucceedsMatch(parser, @"\t", "\t"); AssertParser.FailsMatch(parser, @"\"); AssertParser.FailsMatch(parser, @"\ugdef"); AssertParser.FailsMatch(parser, @"\u01234"); AssertParser.FailsMatch(parser, @"\x"); }
public void FhirPath_Lex_Const() { var parser = Lexer.ExternalConstant.End(); succeedsPrefixString(parser, "%c"); succeedsPrefixString(parser, "%const"); succeedsPrefixString(parser, "%a1"); succeedsPrefixString(parser, "%a__1"); AssertParser.SucceedsMatch(parser, "%`forbidden-characters-1234`", "forbidden-characters-1234"); AssertParser.SucceedsMatch(parser, "%\"forbidden-characters-1234\"", "forbidden-characters-1234"); // still support the old syntax AssertParser.SucceedsMatch(parser, "%'forbidden-characters-1234'", "forbidden-characters-1234"); // new normative %<STRING> AssertParser.FailsMatch(parser, "%0"); AssertParser.FailsMatch(parser, "%0123"); AssertParser.FailsMatch(parser, "%"); AssertParser.FailsMatch(parser, "%%"); AssertParser.FailsMatch(parser, "%%a"); AssertParser.FailsMatch(parser, "%-"); AssertParser.FailsMatch(parser, "%*"); }
public void FhirPath_Lex_QuotedIdentifier() { var parser = Lexer.DelimitedIdentifier.End(); succeedsDelimitedString(parser, "`2a`"); succeedsDelimitedString(parser, "`_`"); succeedsDelimitedString(parser, "`_Abcdef_ghijklmnopqrstuvwxyz_`"); succeedsDelimitedString(parser, "`Hi \uface`"); succeedsDelimitedString(parser, "`@#$%^&*().'`"); succeedsDelimitedString(parser, "`3.1415`"); AssertParser.SucceedsMatch(parser, "`A\uface%$#34`", "A\uface%$#34"); AssertParser.SucceedsMatch(parser, "`A\"quote`", "A\"quote"); AssertParser.SucceedsMatch(parser, "\"A`quote\"", "A`quote"); AssertParser.SucceedsMatch(parser, "`A\\`quote`", "A`quote"); AssertParser.SucceedsMatch(parser, "\"A\\\"quote\"", "A\"quote"); AssertParser.FailsMatch(parser, "NoQuotes"); AssertParser.FailsMatch(parser, @"'wrong es\qape'"); }
public void FhirPath_Lex_Escape() { var parser = Lexer.Escape.End(); AssertParser.SucceedsMatch(parser, @"\uface", "ялО"); AssertParser.SucceedsMatch(parser, @"\'", @"'"); AssertParser.SucceedsMatch(parser, @"\`", "`"); AssertParser.SucceedsMatch(parser, "\\\"", "\""); // \" === " AssertParser.SucceedsMatch(parser, @"\\", @"\"); AssertParser.SucceedsMatch(parser, @"\/", "/"); AssertParser.SucceedsMatch(parser, @"\f", "\f"); AssertParser.SucceedsMatch(parser, @"\n", "\n"); AssertParser.SucceedsMatch(parser, @"\r", "\r"); AssertParser.SucceedsMatch(parser, @"\t", "\t"); AssertParser.FailsMatch(parser, @"\"); AssertParser.FailsMatch(parser, @"\ugdef"); AssertParser.FailsMatch(parser, @"\u01234"); AssertParser.FailsMatch(parser, @"\x"); AssertParser.FailsMatch(parser, @"\b"); }
public void FhirPath_Lex_Time() { var parser = Lexer.Time.End(); accept("@T12:34:34.345674"); accept("@T12:34:34"); accept("@T12:35"); accept("@T12"); reject("@T12:34:34+02:30"); reject("@T12:34:00Z"); reject("2001-01-01T12:34:34+02:30"); reject("@2001-01-01T12:34:34+02:30"); reject("T12:34:34+02:30"); reject("12:34:34+02:30"); reject("@12:34:34+02:30"); reject("@T12:34:34+48:30"); void accept(string s) => AssertParser.SucceedsMatch(parser, s, P.Time.Parse(s.Substring(2))); void reject(string s) => AssertParser.FailsMatch(parser, s); }
public void FhirPath_Gramm_Invocation() { var parser = Grammar.InvocationExpression.End(); AssertParser.SucceedsMatch(parser, "childname", new ChildExpression(AxisExpression.That, "childname")); // AssertParser.SucceedsMatch(parser, "$this", AxisExpression.This); AssertParser.SucceedsMatch(parser, "doSomething()", new FunctionCallExpression(AxisExpression.That, "doSomething", TypeSpecifier.Any)); AssertParser.SucceedsMatch(parser, "doSomething ( ) ", new FunctionCallExpression(AxisExpression.That, "doSomething", TypeSpecifier.Any)); AssertParser.SucceedsMatch(parser, "doSomething ( 3.14 ) ", new FunctionCallExpression(AxisExpression.That, "doSomething", TypeSpecifier.Any, new ConstantExpression(3.14m))); AssertParser.SucceedsMatch(parser, "doSomething('hi', 3.14, 3, $this, somethingElse(true))", new FunctionCallExpression(AxisExpression.That, "doSomething", TypeSpecifier.Any, new ConstantExpression("hi"), new ConstantExpression(3.14m), new ConstantExpression(3L), AxisExpression.This, new FunctionCallExpression(AxisExpression.That, "somethingElse", TypeSpecifier.Any, new ConstantExpression(true)))); AssertParser.SucceedsMatch(parser, "as(Patient)", new FunctionCallExpression(AxisExpression.That, "as", TypeSpecifier.Any, new ConstantExpression("Patient"))); AssertParser.FailsMatch(parser, "$that"); // AssertParser.FailsMatch(parser, "as(Patient.identifier)"); AssertParser.FailsMatch(parser, "as('Patient')"); AssertParser.FailsMatch(parser, "doSomething("); }