예제 #1
0
        public void GenerateNFA()
        {
            var element1 = ReUtils.NewDummy('1');
            var element2 = ReUtils.NewDummy('2');

            var sequence = new ReConcatenation(ImmutableArray.Create(
                                                   element1,
                                                   element2));

            const string expected =
                "0 -- [1] --> 1\r\n" +
                "1 -- [2] --> 2\r\n" +
                "";

            Assert.That(FARenderer.Render(ReUtils.Build(sequence)), Is.EqualTo(expected));
        }
예제 #2
0
        public void Concatenation_Collapse()
        {
            var child1    = ReUtils.NewDummy('1');
            var child2    = ReUtils.NewDummy('2');
            var child3    = ReUtils.NewDummy('3');
            var child4    = ReUtils.NewDummy('4');
            var subConcat = new ReConcatenation(ImmutableArray.Create(child2, child3));

            var element = ReFactory.NewConcatenation(new ReElement[] { child1, subConcat, ReEmptyString.Instance, child4 });

            Assert.That(element, Is.Not.Null);
            Assert.That(element, Is.TypeOf(typeof(ReConcatenation)));

            var concat = (ReConcatenation)element;

            Assert.That(concat.Elements, Is.EquivalentTo(new ReElement[] { child1, child2, child3, child4 }));
        }
예제 #3
0
        public void Constructor()
        {
            var element1 = ReUtils.NewDummy('1');
            var element2 = ReUtils.NewDummy('2');

            var elements = ImmutableArray.Create(
                element1,
                element2);

            var choice = new ReConcatenation(elements);

            var enumerator = choice.Elements.GetEnumerator();

            Assert.That(enumerator.MoveNext(), Is.EqualTo(true), "should have element[0]");
            Assert.That(enumerator.Current, Is.SameAs(element1), "element[0] should be mock1");
            Assert.That(enumerator.MoveNext(), Is.EqualTo(true), "should have element[1]");
            Assert.That(enumerator.Current, Is.SameAs(element2), "element[1] should be mock2");
            Assert.That(enumerator.MoveNext(), Is.EqualTo(false), "should not have element[2]");
        }
예제 #4
0
        public void MatchesEmptyString()
        {
            var element1 = new Mock <ReElement>(MockBehavior.Strict);
            var element2 = new Mock <ReElement>(MockBehavior.Strict);

            var sequence = new ReConcatenation(ImmutableArray.Create(
                                                   element1.Object,
                                                   element2.Object));

            element1.Setup(x => x.MatchesEmptyString).Returns(true);
            element2.Setup(x => x.MatchesEmptyString).Returns(true);
            Assert.That(sequence.MatchesEmptyString, Is.EqualTo(true));

            element1.Setup(x => x.MatchesEmptyString).Returns(true);
            element2.Setup(x => x.MatchesEmptyString).Returns(false);
            Assert.That(sequence.MatchesEmptyString, Is.EqualTo(false));

            element1.Setup(x => x.MatchesEmptyString).Returns(false);
            Assert.That(sequence.MatchesEmptyString, Is.EqualTo(false));
        }
예제 #5
0
 static void RenderReConcatenation(StringBuilder builder, int indent, ReConcatenation element)
 {
     builder.Append("new ReConcatenation(");
     Render(builder, indent, element.Elements);
     builder.Append(")");
 }