public void TestCustomParsers() { var lht = new LiteralHandlerTable(); Assert.IsTrue(lht.AddParser(false, (Symbol)"fail", (text, marker) => { Assert.AreEqual(marker.Name, "fail"); return(new LogMessage(Severity.Error, null, "Always fails")); })); Func <UString, Symbol, Either <object, LogMessage> > trimmer = (text, marker) => { Assert.AreEqual(marker.Name, "trimmed"); return(text.ToString().Trim()); }; Assert.IsTrue(lht.AddParser(false, (Symbol)"trimmed", trimmer)); Assert.IsFalse(lht.AddParser(false, (Symbol)"trimmed", trimmer)); Assert.IsTrue(lht.AddParser(true, (Symbol)"trimmed", trimmer)); Assert.AreEqual("Hi", lht.TryParse(" Hi ", (Symbol)"trimmed").Left.Value); Assert.AreEqual("Always fails", lht.TryParse(" Hi ", (Symbol)"fail").Right.Value.Format); Assert.IsTrue(lht.TryParse("...", (Symbol)"undefined").Right.HasValue); Assert.IsTrue(lht.TryParse("...", (Symbol)"undefined").Right.Value.Format.Contains("No parser is registered")); }