public void FirstPlusTest() { var innerComposite = new CompositeToken { Substring = "Inner" }; var stringToken = new StringToken(); stringToken.Append('A'); innerComposite.Add(stringToken); var composite = new CompositeToken { innerComposite, new StringToken { Substring = "String" } }; var helper = new PrecedenceGrammarHelper(null); var firstPlus = helper.FirstPlus(new List <GrammarReplaceRule> { new GrammarReplaceRule(PrecedenceParser.TokenEnum.Program, composite) }, PrecedenceParser.TokenEnum.Program).ToList(); Assert.AreEqual(2, firstPlus.Count); Assert.IsTrue(firstPlus.Any(x => x is StringToken && x.Substring == "A")); Assert.IsTrue(firstPlus.Any(x => x is CompositeToken && x.Substring == "Inner")); }
public void CompositeUndo(Action act) { redoItems.Clear(); var compositeItem = new CompositeToken(); undoItems.Push(compositeItem); act(); if (!undoItems.Contains(compositeItem)) { return; } var items = PopUntil(undoItems, compositeItem).ToList(); undoItems.Pop(); // take the compositeItem Placeholder of the stack new CompositeUndoItem(items).PushOntoStack(undoItems); }