APISampleUnitTestsCS.FAQ.CompareSyntax C# (CSharp) Méthode

CompareSyntax() private méthode

private CompareSyntax ( ) : void
Résultat void
        public void CompareSyntax()
        {
            var source = @"
            using System;
            class Program
            {
            static void Main()
            {
            var i = 0.0;
            i += 1 + 2L;
            }
            }";
            var tree1 = SyntaxTree.ParseText(source);
            var tree2 = SyntaxTree.ParseText(source);
            SyntaxNode node1 = tree1.GetRoot();
            SyntaxNode node2 = tree2.GetRoot();

            // Compare trees and nodes that are identical.
            Assert.IsTrue(tree1.IsEquivalentTo(tree2));
            Assert.IsTrue(node1.EquivalentTo(node2));
            Assert.IsTrue(Syntax.AreEquivalent(node1, node2, topLevel: false));
            Assert.IsTrue(Syntax.AreEquivalent(tree1, tree2, topLevel: false));

            // tree3 is identical to tree1 except for a single comment.
            var tree3 = SyntaxTree.ParseText(@"
            using System;
            class Program
            {
            // Additional comment.
            static void Main()
            {
            var i = 0.0;
            i += 1 + 2L;
            }
            }");
            SyntaxNode node3 = tree3.GetRoot();

            // Compare trees and nodes that are identical except for trivia.
            Assert.IsTrue(tree1.IsEquivalentTo(tree3)); // Trivia differences are ignored.
            Assert.IsFalse(node1.EquivalentTo(node3)); // Trivia differences are considered.
            Assert.IsTrue(Syntax.AreEquivalent(node1, node3, topLevel: false)); // Trivia differences are ignored.
            Assert.IsTrue(Syntax.AreEquivalent(tree1, tree3, topLevel: false)); // Trivia differences are ignored.

            // tree4 is identical to tree1 except for method body contents.
            var tree4 = SyntaxTree.ParseText(@"using System;
            class Program
            {
            static void Main()
            {
            }
            }");
            SyntaxNode node4 = tree4.GetRoot();

            // Compare trees and nodes that are identical at the top-level.
            Assert.IsTrue(tree1.IsEquivalentTo(tree4, topLevel: true)); // Only top-level nodes are considered.
            Assert.IsFalse(node1.EquivalentTo(node4)); // Non-top-level nodes are considered.
            Assert.IsTrue(Syntax.AreEquivalent(node1, node4, topLevel: true)); // Only top-level nodes are considered.
            Assert.IsTrue(Syntax.AreEquivalent(tree1, tree4, topLevel: true)); // Only top-level nodes are considered.

            // Tokens and Trivia can also be compared.
            SyntaxToken token1 = node1.DescendantTokens().First();
            SyntaxToken token2 = node2.DescendantTokens().First();
            Assert.IsTrue(token1.EquivalentTo(token2));
            SyntaxTrivia trivia1 = node1.DescendantTrivia().First(t => t.Kind == SyntaxKind.WhitespaceTrivia);
            SyntaxTrivia trivia2 = node2.DescendantTrivia().Last(t => t.Kind == SyntaxKind.EndOfLineTrivia);
            Assert.IsFalse(trivia1.EquivalentTo(trivia2));
        }