示例#1
0
        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"));
        }