summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs')
-rw-r--r--Xamarin.Forms.Xaml.UnitTests/XamlParseExceptionConstraint.cs67
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