diff options
Diffstat (limited to 'Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs')
-rw-r--r-- | Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs b/Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs new file mode 100644 index 00000000..cdff5ca8 --- /dev/null +++ b/Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs @@ -0,0 +1,67 @@ +using System; +using NUnit.Framework.Constraints; + +namespace Xamarin.Forms.Xaml.UnitTests +{ + public class XamlParseExceptionConstraint : ExceptionTypeConstraint + { + bool haslineinfo; + int linenumber; + int lineposition; + Func<string, bool> messagePredicate; + + XamlParseExceptionConstraint (bool haslineinfo) : base (typeof (XamlParseException)) + { + this.haslineinfo = haslineinfo; + DisplayName = "xamlparse"; + } + + public XamlParseExceptionConstraint () : this (false) + { + } + + public XamlParseExceptionConstraint (int linenumber, int lineposition, Func<string, bool> messagePredicate = null) : this (true) + { + this.linenumber = linenumber; + this.lineposition = lineposition; + this.messagePredicate = messagePredicate; + } + + public override bool Matches (object actual) + { + this.actual = actual; + if (!base.Matches (actual)) + return false; + var xmlInfo = ((XamlParseException)actual).XmlInfo; + if (!haslineinfo) + return true; + if (xmlInfo == null || !xmlInfo.HasLineInfo ()) + return false; + if (messagePredicate != null) + if (!messagePredicate (((XamlParseException)actual).UnformattedMessage)) + return false; + return xmlInfo.LineNumber == linenumber && xmlInfo.LinePosition == lineposition; + } + + public override void WriteDescriptionTo (MessageWriter writer) + { + base.WriteDescriptionTo (writer); + if (haslineinfo) + writer.Write (string.Format (" line {0}, position {1}", linenumber, lineposition)); + } + + public override void WriteActualValueTo (MessageWriter writer) + { + var ex = actual as XamlParseException; + writer.WriteActualValue ((actual == null) ? null : actual.GetType ()); + if (ex != null) { + if (ex.XmlInfo != null && ex.XmlInfo.HasLineInfo ()) + writer.Write (" line {0}, position {1}", ex.XmlInfo.LineNumber, ex.XmlInfo.LinePosition); + else + writer.Write (" no line info"); + writer.WriteLine (" ({0})", ex.Message); + writer.Write (ex.StackTrace); + } + } + } +}
\ No newline at end of file |