2014-01-04 22:11:32 +01:00
|
|
|
namespace Hammer.Test
|
|
|
|
|
{
|
|
|
|
|
using NUnit.Framework;
|
|
|
|
|
[TestFixture]
|
|
|
|
|
public partial class HammerTest
|
|
|
|
|
{
|
|
|
|
|
[Test]
|
|
|
|
|
public void TestAction()
|
|
|
|
|
{
|
2014-01-04 23:08:44 +01:00
|
|
|
Parser parser = Hammer.Action(Hammer.Sequence(Hammer.Choice(Hammer.Ch('a'),
|
|
|
|
|
Hammer.Ch('A')),
|
|
|
|
|
Hammer.Choice(Hammer.Ch('b'),
|
|
|
|
|
Hammer.Ch('B'))),
|
|
|
|
|
(HAction)(x => string.Join(",",(object[])x)));
|
|
|
|
|
CheckParseOK(parser, "ab", "a,b");
|
|
|
|
|
CheckParseOK(parser, "AB", "A,B");
|
|
|
|
|
CheckParseFail(parser, "XX");
|
|
|
|
|
}
|
|
|
|
|
[Test]
|
|
|
|
|
public void TestAttrBool()
|
|
|
|
|
{
|
|
|
|
|
Parser parser = Hammer.AttrBool(Hammer.Many1(Hammer.Choice(Hammer.Ch('a'),
|
|
|
|
|
Hammer.Ch('b'))),
|
|
|
|
|
(HPredicate)(x => {
|
|
|
|
|
object[] elems = (object[])x;
|
|
|
|
|
return elems.Length > 1 && (char)elems[0] == (char)elems[1];
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
CheckParseOK(parser, "aa", new object[]{ 'a','a' });
|
|
|
|
|
CheckParseOK(parser, "bb", new object[]{ 'b','b' });
|
|
|
|
|
CheckParseFail(parser, "ab");
|
2014-01-04 22:11:32 +01:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|