public override SyntaxList <TNode> VisitList <TNode>(SyntaxList <TNode> list) { if (_originalNode is TNode) { var index = list.IndexOf((TNode)_originalNode); if (index >= 0 && index < list.Count) { switch (this.editKind) { case ListEditKind.Replace: return(list.ReplaceRange( (TNode)_originalNode, _newNodes.Cast <TNode>() )); case ListEditKind.InsertAfter: return(list.InsertRange(index + 1, _newNodes.Cast <TNode>())); case ListEditKind.InsertBefore: return(list.InsertRange(index, _newNodes.Cast <TNode>())); } } } return(base.VisitList <TNode>(list)); }
private void DoTestAddInsertRemoveReplaceOnEmptyList(SyntaxList<SyntaxNode> list) { Assert.Equal(0, list.Count); SyntaxNode nodeD = SyntaxFactory.ParseExpression("D "); SyntaxNode nodeE = SyntaxFactory.ParseExpression("E "); var newList = list.Add(nodeD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.AddRange(new[] { nodeD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Insert(0, nodeD); Assert.Equal(1, newList.Count); Assert.Equal("D ", newList.ToFullString()); newList = list.InsertRange(0, new[] { nodeD, nodeE }); Assert.Equal(2, newList.Count); Assert.Equal("D E ", newList.ToFullString()); newList = list.Remove(nodeD); Assert.Equal(0, newList.Count); Assert.Equal(-1, list.IndexOf(nodeD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.RemoveAt(0)); Assert.Throws<ArgumentOutOfRangeException>(() => list.Insert(1, nodeD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.Insert(-1, nodeD)); Assert.Throws<ArgumentOutOfRangeException>(() => list.InsertRange(1, new[] { nodeD })); Assert.Throws<ArgumentOutOfRangeException>(() => list.InsertRange(-1, new[] { nodeD })); Assert.Throws<ArgumentException>(() => list.Replace(nodeD, nodeE)); Assert.Throws<ArgumentException>(() => list.ReplaceRange(nodeD, new[] { nodeE })); Assert.Throws<ArgumentNullException>(() => list.Add(null)); Assert.Throws<ArgumentNullException>(() => list.AddRange((IEnumerable<SyntaxNode>)null)); Assert.Throws<ArgumentNullException>(() => list.Insert(0, null)); Assert.Throws<ArgumentNullException>(() => list.InsertRange(0, (IEnumerable<SyntaxNode>)null)); }