PageRenderTime 51ms CodeModel.GetById 16ms RepoModel.GetById 1ms app.codeStats 0ms

/src/EditorFeatures/CSharpTest/EditAndContinue/SyntaxComparerTests.cs

https://gitlab.com/sharadag/Roslyn
C# | 176 lines | 143 code | 32 blank | 1 comment | 0 complexity | 09dae24b2b85c1d29cf9d2794cbdb3fb MD5 | raw file
  1. // Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
  2. using System;
  3. using System.Collections.Immutable;
  4. using Microsoft.CodeAnalysis.Differencing;
  5. using Roslyn.Test.Utilities;
  6. using Xunit;
  7. namespace Microsoft.CodeAnalysis.CSharp.EditAndContinue.UnitTests
  8. {
  9. public class SyntaxComparerTests
  10. {
  11. private static SyntaxNode MakeLiteral(int n)
  12. {
  13. return SyntaxFactory.LiteralExpression(SyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(n));
  14. }
  15. [Fact]
  16. public void GetSequenceEdits1()
  17. {
  18. var edits = SyntaxComparer.GetSequenceEdits(
  19. new[] { MakeLiteral(0), MakeLiteral(1), MakeLiteral(2) },
  20. new[] { MakeLiteral(1), MakeLiteral(3) });
  21. AssertEx.Equal(new[]
  22. {
  23. new SequenceEdit(2, -1),
  24. new SequenceEdit(-1, 1),
  25. new SequenceEdit(1, 0),
  26. new SequenceEdit(0, -1),
  27. }, edits, itemInspector: e => e.GetDebuggerDisplay());
  28. }
  29. [Fact]
  30. public void GetSequenceEdits2()
  31. {
  32. var edits = SyntaxComparer.GetSequenceEdits(
  33. ImmutableArray.Create(MakeLiteral(0), MakeLiteral(1), MakeLiteral(2)),
  34. ImmutableArray.Create(MakeLiteral(1), MakeLiteral(3)));
  35. AssertEx.Equal(new[]
  36. {
  37. new SequenceEdit(2, -1),
  38. new SequenceEdit(-1, 1),
  39. new SequenceEdit(1, 0),
  40. new SequenceEdit(0, -1),
  41. }, edits, itemInspector: e => e.GetDebuggerDisplay());
  42. }
  43. [Fact]
  44. public void GetSequenceEdits3()
  45. {
  46. var edits = SyntaxComparer.GetSequenceEdits(
  47. new[] { SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword) },
  48. new[] { SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword) });
  49. AssertEx.Equal(new[]
  50. {
  51. new SequenceEdit(2, 2),
  52. new SequenceEdit(1, -1),
  53. new SequenceEdit(0, 1),
  54. new SequenceEdit(-1, 0),
  55. }, edits, itemInspector: e => e.GetDebuggerDisplay());
  56. }
  57. [Fact]
  58. public void GetSequenceEdits4()
  59. {
  60. var edits = SyntaxComparer.GetSequenceEdits(
  61. ImmutableArray.Create(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword)),
  62. ImmutableArray.Create(SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword)));
  63. AssertEx.Equal(new[]
  64. {
  65. new SequenceEdit(2, 2),
  66. new SequenceEdit(1, -1),
  67. new SequenceEdit(0, 1),
  68. new SequenceEdit(-1, 0),
  69. }, edits, itemInspector: e => e.GetDebuggerDisplay());
  70. }
  71. [Fact]
  72. public void ComputeDistance1()
  73. {
  74. double distance = SyntaxComparer.ComputeDistance(
  75. new[] { MakeLiteral(0), MakeLiteral(1), MakeLiteral(2) },
  76. new[] { MakeLiteral(1), MakeLiteral(3) });
  77. Assert.Equal(0.67, Math.Round(distance, 2));
  78. }
  79. [Fact]
  80. public void ComputeDistance2()
  81. {
  82. double distance = SyntaxComparer.ComputeDistance(
  83. ImmutableArray.Create(MakeLiteral(0), MakeLiteral(1), MakeLiteral(2)),
  84. ImmutableArray.Create(MakeLiteral(1), MakeLiteral(3)));
  85. Assert.Equal(0.67, Math.Round(distance, 2));
  86. }
  87. [Fact]
  88. public void ComputeDistance3()
  89. {
  90. double distance = SyntaxComparer.ComputeDistance(
  91. new[] { SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword) },
  92. new[] { SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword) });
  93. Assert.Equal(0.33, Math.Round(distance, 2));
  94. }
  95. [Fact]
  96. public void ComputeDistance4()
  97. {
  98. double distance = SyntaxComparer.ComputeDistance(
  99. ImmutableArray.Create(SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword)),
  100. ImmutableArray.Create(SyntaxFactory.Token(SyntaxKind.StaticKeyword), SyntaxFactory.Token(SyntaxKind.PublicKeyword), SyntaxFactory.Token(SyntaxKind.AsyncKeyword)));
  101. Assert.Equal(0.33, Math.Round(distance, 2));
  102. }
  103. [Fact]
  104. public void ComputeDistance_Token()
  105. {
  106. double distance = SyntaxComparer.ComputeDistance(SyntaxFactory.Literal("abc", "abc"), SyntaxFactory.Literal("acb", "acb"));
  107. Assert.Equal(0.33, Math.Round(distance, 2));
  108. }
  109. [Fact]
  110. public void ComputeDistance_Node()
  111. {
  112. double distance = SyntaxComparer.ComputeDistance(MakeLiteral(101), MakeLiteral(150));
  113. Assert.Equal(1, Math.Round(distance, 2));
  114. }
  115. [Fact]
  116. public void ComputeDistance_Null()
  117. {
  118. double distance = SyntaxComparer.ComputeDistance(
  119. default(ImmutableArray<SyntaxToken>),
  120. ImmutableArray.Create(SyntaxFactory.Token(SyntaxKind.StaticKeyword)));
  121. Assert.Equal(1, Math.Round(distance, 2));
  122. distance = SyntaxComparer.ComputeDistance(
  123. default(ImmutableArray<SyntaxNode>),
  124. ImmutableArray.Create(MakeLiteral(0)));
  125. Assert.Equal(1, Math.Round(distance, 2));
  126. distance = SyntaxComparer.ComputeDistance(
  127. null,
  128. Array.Empty<SyntaxNode>());
  129. Assert.Equal(0, Math.Round(distance, 2));
  130. distance = SyntaxComparer.ComputeDistance(
  131. Array.Empty<SyntaxNode>(),
  132. null);
  133. Assert.Equal(0, Math.Round(distance, 2));
  134. distance = SyntaxComparer.ComputeDistance(
  135. null,
  136. Array.Empty<SyntaxToken>());
  137. Assert.Equal(0, Math.Round(distance, 2));
  138. distance = SyntaxComparer.ComputeDistance(
  139. Array.Empty<SyntaxToken>(),
  140. null);
  141. Assert.Equal(0, Math.Round(distance, 2));
  142. }
  143. }
  144. }