PageRenderTime 41ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/ABB.SrcML.Data.Test/SrcMLLocationTests.cs

https://github.com/nkcsgexi/SrcML.NET
C# | 93 lines | 65 code | 6 blank | 22 comment | 0 complexity | 4d3174bd2b2f40d9b6085b949f9e8c4f MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Xml.Linq;
  6. using NUnit.Framework;
  7. namespace ABB.SrcML.Data.Test {
  8. [TestFixture]
  9. [Category("Build")]
  10. class SrcMLLocationTests {
  11. private SrcMLFileUnitSetup fileUnitSetup;
  12. [TestFixtureSetUp]
  13. public void SetUpFixture() {
  14. fileUnitSetup = new SrcMLFileUnitSetup(Language.CSharp);
  15. }
  16. [Test]
  17. public void TestContains_NoSibling() {
  18. ////Foo.cs
  19. //class Foo {
  20. // int Bar(){return 0;}
  21. //}
  22. var xml = @"<class pos:line=""1"" pos:column=""1"">class <name pos:line=""1"" pos:column=""7"">Foo</name> <block pos:line=""1"" pos:column=""11"">{
  23. <function><type><name pos:line=""2"" pos:column=""5"">int</name></type> <name pos:line=""2"" pos:column=""9"">Bar</name><parameter_list pos:line=""2"" pos:column=""12"">()</parameter_list><block pos:line=""2"" pos:column=""14"">{<return pos:line=""2"" pos:column=""15"">return <expr><lit:literal type=""number"" pos:line=""2"" pos:column=""22"">0</lit:literal></expr>;</return>}</block></function>
  24. }</block></class>";
  25. var classElement = fileUnitSetup.GetFileUnitForXmlSnippet(xml, "Foo.cs").Descendants(SRC.Class).First();
  26. var methodElement = classElement.Descendants(SRC.Function).First();
  27. var classLoc = new SrcMLLocation(classElement, "Foo.cs");
  28. var methodLoc = new SrcMLLocation(methodElement, "Foo.cs");
  29. Assert.IsTrue(classLoc.Contains(methodLoc));
  30. }
  31. [Test]
  32. public void TestContains_Sibling() {
  33. ////Foo.cs
  34. //class Foo {
  35. // string Bar(){
  36. // string a = "Hello, world!";
  37. // return a;
  38. // }
  39. // int Baz(){ return 0; }
  40. //}
  41. var xml = @"<class pos:line=""1"" pos:column=""1"">class <name pos:line=""1"" pos:column=""7"">Foo</name> <block pos:line=""1"" pos:column=""11"">{
  42. <function><type><name pos:line=""2"" pos:column=""5"">string</name></type> <name pos:line=""2"" pos:column=""12"">Bar</name><parameter_list pos:line=""2"" pos:column=""15"">()</parameter_list><block pos:line=""2"" pos:column=""17"">{
  43. <decl_stmt><decl><type><name pos:line=""3"" pos:column=""9"">string</name></type> <name pos:line=""3"" pos:column=""16"">a</name> =<init pos:line=""3"" pos:column=""19""> <expr><lit:literal type=""string"" pos:line=""3"" pos:column=""20"">""Hello, world!""</lit:literal></expr></init></decl>;</decl_stmt>
  44. <return pos:line=""4"" pos:column=""9"">return <expr><name pos:line=""4"" pos:column=""16"">a</name></expr>;</return>
  45. }</block></function>
  46. <function><type><name pos:line=""6"" pos:column=""5"">int</name></type> <name pos:line=""6"" pos:column=""9"">Baz</name><parameter_list pos:line=""6"" pos:column=""12"">()</parameter_list><block pos:line=""6"" pos:column=""14"">{ <return pos:line=""6"" pos:column=""16"">return <expr><lit:literal type=""number"" pos:line=""6"" pos:column=""23"">0</lit:literal></expr>;</return> }</block></function>
  47. }</block></class>";
  48. var methodElement = fileUnitSetup.GetFileUnitForXmlSnippet(xml, "Foo.cs").Descendants(SRC.Function).First();
  49. var declElement = methodElement.Descendants(SRC.DeclarationStatement).First();
  50. var methodLoc = new SrcMLLocation(methodElement, "Foo.cs");
  51. var declLoc = new SrcMLLocation(declElement, "Foo.cs");
  52. Assert.IsTrue(methodLoc.Contains(declLoc));
  53. }
  54. [Test]
  55. public void TestContains_Reflexive() {
  56. ////Foo.cs
  57. //class Foo {
  58. // int Bar(){return 0;}
  59. //}
  60. var xml = @"<class pos:line=""1"" pos:column=""1"">class <name pos:line=""1"" pos:column=""7"">Foo</name> <block pos:line=""1"" pos:column=""11"">{
  61. <function><type><name pos:line=""2"" pos:column=""5"">int</name></type> <name pos:line=""2"" pos:column=""9"">Bar</name><parameter_list pos:line=""2"" pos:column=""12"">()</parameter_list><block pos:line=""2"" pos:column=""14"">{<return pos:line=""2"" pos:column=""15"">return <expr><lit:literal type=""number"" pos:line=""2"" pos:column=""22"">0</lit:literal></expr>;</return>}</block></function>
  62. }</block></class>";
  63. var classElement = fileUnitSetup.GetFileUnitForXmlSnippet(xml, "Foo.cs").Descendants(SRC.Class).First();
  64. var classLoc = new SrcMLLocation(classElement, "Foo.cs");
  65. Assert.IsTrue(classLoc.Contains(classLoc));
  66. }
  67. [Test]
  68. public void TestContains_TwoLevel() {
  69. ////Example.cs
  70. //namespace Example {
  71. // class Foo {
  72. // int Bar(){return 0;}
  73. // }
  74. //}
  75. var xml = @"<namespace pos:line=""1"" pos:column=""1"">namespace <name pos:line=""1"" pos:column=""11"">Example</name> <block pos:line=""1"" pos:column=""19"">{
  76. <class pos:line=""2"" pos:column=""5"">class <name pos:line=""2"" pos:column=""11"">Foo</name> <block pos:line=""2"" pos:column=""15"">{
  77. <function><type><name pos:line=""3"" pos:column=""9"">int</name></type> <name pos:line=""3"" pos:column=""13"">Bar</name><parameter_list pos:line=""3"" pos:column=""16"">()</parameter_list><block pos:line=""3"" pos:column=""18"">{<return pos:line=""3"" pos:column=""19"">return <expr><lit:literal type=""number"" pos:line=""3"" pos:column=""26"">0</lit:literal></expr>;</return>}</block></function>
  78. }</block></class>
  79. }</block></namespace>";
  80. var namespaceElement = fileUnitSetup.GetFileUnitForXmlSnippet(xml, "Example.cs").Element(SRC.Namespace);
  81. var methodElement = namespaceElement.Descendants(SRC.Function).First();
  82. var namespaceLoc = new SrcMLLocation(namespaceElement, "Example.cs");
  83. var methodLoc = new SrcMLLocation(methodElement, "Example.cs");
  84. Assert.IsTrue(namespaceLoc.Contains(methodLoc));
  85. }
  86. }
  87. }