public void TestEscaping() { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{}Just a string{{}}"); // should be thrown syntax error: markup extension name is empty String result = ( string ) parser.ProcessMarkupExtension( null ); Assert.AreEqual( "Just a string{{}}", result ); }
/// <summary> /// Если str начинается с одинарной открывающей фигурной скобки, то метод обрабатывает его /// как вызов расширения разметки, и возвращает результат, или выбрасывает исключение, /// если при парсинге или выполнении возникли ошибки. Если же str начинается c комбинации /// {}, то остаток строки возвращается просто строкой. /// </summary> private Object processText(String text, String currentProperty, object currentObject, object dataContext) { if (String.IsNullOrEmpty(text)) { return(String.Empty); } if (text[0] != '{') { // interpret whole text as string return(text); } else if (text.Length > 1 && text[1] == '}') { // interpret the rest as string return(text.Length > 2 ? text.Substring(2) : String.Empty); } else { MarkupExtensionsParser markupExtensionsParser = new MarkupExtensionsParser( new MarkupExtensionsResolver(this), text); MarkupExtensionContext context = new MarkupExtensionContext( this, text, currentProperty, currentObject, dataContext); object providedValue = markupExtensionsParser.ProcessMarkupExtension(context); if (providedValue is IFixupToken) { fixupTokens.Add(( FixupToken )providedValue); // Null means no value will be assigned to target property return(null); } return(providedValue); } }
private void processFixupTokens( ) { // Выполнить поиск fixup tokens, желания которых удовлетворены, // и вызвать расширения разметки для них снова List <FixupToken> tokens = new List <FixupToken>(fixupTokens); fixupTokens.Clear( ); foreach (FixupToken token in tokens) { if (token.Ids.All(id => objectsById.ContainsKey(id))) { MarkupExtensionsParser markupExtensionsParser = new MarkupExtensionsParser( new MarkupExtensionsResolver(this), token.Expression); MarkupExtensionContext context = new MarkupExtensionContext( this, token.Expression, token.PropertyName, token.Object, token.DataContext); object providedValue = markupExtensionsParser.ProcessMarkupExtension(context); if (providedValue is IFixupToken) { fixupTokens.Add(( FixupToken )providedValue); } else { // assign providedValue to property of object if (null != providedValue) { PropertyInfo propertyInfo = token.Object.GetType( ).GetProperty( token.PropertyName); object convertedValue = ConvertValueIfNeed(providedValue.GetType(), propertyInfo.PropertyType, providedValue); //propertyInfo.SetValue(token.Object, convertedValue, null); propertyInfo.GetSetMethod().Invoke(token.Object, new [] { convertedValue }); } } } else { fixupTokens.Add(token); } } }
public void TestSyntaxError2( ) { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{TestExtension* }"); // should be thrown syntax error: whitespace expected after name parser.ProcessMarkupExtension(null); }
public void TestSyntaxError1( ) { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{ }"); // should be thrown syntax error: markup extension name is empty parser.ProcessMarkupExtension(null); }
public void TestInner2( ) { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), @"{xm:TestExtension Arg1, Property3=\=\{\}\\sdf, Property2={TestExtension Property1=1}}"); String result = (String)parser.ProcessMarkupExtension(null); Assert.AreEqual(result, @"Arg1_1___={}\sdf"); }
public void TestEscaping2() { MarkupExtensionsParser parser = new MarkupExtensionsParser( new TestResolver( ), @"{xm:TestExtension Arg1, Arg2, Property3=\=\{\}\\sdf}"); String result = (String)parser.ProcessMarkupExtension(null); Assert.AreEqual( result, @"Arg1_Arg2_={}\sdf" ); }
public void TestSyntaxError5() { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{TestExtension CtorArg, Property1=1,}"); // should be thrown syntax error: member name or string expected parser.ProcessMarkupExtension(null); }
public void TestSyntaxError4() { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{TestExtension CtorArg, Property1=1 } "); // should be thrown syntax error: unexpected characters parser.ProcessMarkupExtension(null); }
public void TestSyntaxError3( ) { MarkupExtensionsParser parser = new MarkupExtensionsParser(new TestResolver(), "{TestExtension Property1=1, CtorArg }"); // should be thrown syntax error: constructor argument cannot be after property assignment parser.ProcessMarkupExtension(null); }