PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/ABB.SrcML.Test/ShortXmlFileNameMappingTests.cs

https://github.com/nkcsgexi/SrcML.NET
C# | 279 lines | 250 code | 27 blank | 2 comment | 4 complexity | a4d0386cef0b154574631eba7eff85d6 MD5 | raw file
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using NUnit.Framework;
  8. namespace ABB.SrcML.Test {
  9. [TestFixture]
  10. [Category("Build")]
  11. public class ShortXmlFileNameMappingTests {
  12. [TestFixtureSetUp]
  13. public void FixtureSetUp() {
  14. if(!Directory.Exists("mappingTest")) {
  15. Directory.CreateDirectory("mappingTest");
  16. }
  17. }
  18. [SetUp]
  19. public void TestSetUp() {
  20. if(Directory.Exists("mappingTest")) {
  21. foreach(var file in Directory.GetFiles("mappingTest")) {
  22. File.Delete(file);
  23. }
  24. }
  25. }
  26. [TestFixtureTearDown]
  27. public void FixtureTearDown() {
  28. if(Directory.Exists("mappingTest")) {
  29. Directory.Delete("mappingTest", true);
  30. }
  31. }
  32. [Test]
  33. public void TestGetXmlPath_CorrectDir() {
  34. var map = new ShortXmlFileNameMapping("mappingTest");
  35. var xmlPath = map.GetXmlPath("Example.cpp");
  36. Assert.That(xmlPath.StartsWith(map.XmlDirectory));
  37. }
  38. [Test]
  39. public void TestGetXmlPath_NonExistentDir() {
  40. Assert.That(!File.Exists("MissingDir"));
  41. var map = new ShortXmlFileNameMapping("MissingDir");
  42. var xmlPath = map.GetXmlPath("Example.cpp");
  43. Assert.That(xmlPath.StartsWith(map.XmlDirectory));
  44. }
  45. [Test]
  46. public void TestGetXmlPath_SameName() {
  47. var map = new ShortXmlFileNameMapping("mappingTest");
  48. var xmlPath1 = map.GetXmlPath("Example.cpp");
  49. var xmlPath2 = map.GetXmlPath(@"Subdir\Example.cpp");
  50. Assert.AreNotEqual(xmlPath1, xmlPath2);
  51. }
  52. [Test]
  53. public void TestGetXmlPath_Repeated() {
  54. var map = new ShortXmlFileNameMapping("mappingTest");
  55. var xmlPath1 = map.GetXmlPath("Example.cpp");
  56. var xmlPath2 = map.GetXmlPath("Example.cpp");
  57. Assert.AreEqual(xmlPath1, xmlPath2);
  58. }
  59. [Test]
  60. public void TestGetXmlPath_DuplicatesInMapFile() {
  61. string fileContents = @"C:\Foo\Bar\test.cs|C:\srcmlArchive\test.cs.1.xml
  62. C:\Foo\Bar\Example.cs|C:\srcmlArchive\Example.cs.1.xml
  63. C:\Foo\Bar\xyzzy\Example.cs|C:\srcmlArchive\Example.cs.2.xml";
  64. File.WriteAllText(@"mappingTest\mapping.txt", fileContents);
  65. var map = new ShortXmlFileNameMapping("mappingTest");
  66. var thirdName = map.GetXmlPath(@"C:\OtherDir\Example.cs");
  67. Assert.AreEqual(Path.Combine(Environment.CurrentDirectory, @"mappingTest\Example.cs.3.xml"), thirdName);
  68. }
  69. [Test]
  70. public void TestGetXmlPath_DifferentCase() {
  71. var map = new ShortXmlFileNameMapping("mappingTest");
  72. var xmlPath1 = map.GetXmlPath("foo\\Example.cpp");
  73. var xmlPath2 = map.GetXmlPath("bar\\example.CPP");
  74. //If the file system is case insensitive, the paths should be Example.cpp.1.xml and example.CPP.2.xml
  75. //If the file system is case sensitive, the paths should be Example.cpp.1.xml and example.CPP.1.xml
  76. Assert.IsTrue(string.Compare(xmlPath1, xmlPath2, StringComparison.CurrentCultureIgnoreCase) != 0);
  77. }
  78. [Test]
  79. public void TestConstructor_CurrentDirectory() {
  80. var map = new ShortXmlFileNameMapping(".");
  81. var xmlPath = map.GetXmlPath("Foo.cs");
  82. Assert.That(xmlPath.StartsWith(Environment.CurrentDirectory));
  83. }
  84. [Test]
  85. public void TestRountrip() {
  86. var map = new ShortXmlFileNameMapping("mappingTest");
  87. var xmlPath = map.GetXmlPath("Foo.cs");
  88. Assert.AreEqual(Path.GetFullPath("Foo.cs"), map.GetSourcePath(xmlPath));
  89. }
  90. [Test]
  91. public void TestGetSourcePath_FullPath() {
  92. string fileContents = @"C:\Foo\Bar\test.cs|C:\srcmlArchive\test.cs.1.xml
  93. C:\Foo\Bar\Example.cs|C:\srcmlArchive\Example.cs.1.xml
  94. C:\Foo\Bar\xyzzy\Example.cs|C:\srcmlArchive\Example.cs.2.xml";
  95. File.WriteAllText(@"mappingTest\mapping.txt", fileContents);
  96. var map = new ShortXmlFileNameMapping("mappingTest");
  97. var sourcePath = map.GetSourcePath(@"C:\srcmlArchive\Example.cs.1.xml");
  98. Assert.AreEqual(@"C:\Foo\Bar\Example.cs", sourcePath);
  99. }
  100. [Test]
  101. public void TestGetSourcePath_JustFileName() {
  102. string fileContents = @"C:\Foo\Bar\test.cs|{0}\mappingTest\test.cs.1.xml
  103. C:\Foo\Bar\Example.cs|{0}\mappingTest\Example.cs.1.xml
  104. C:\Foo\Bar\xyzzy\Example.cs|{0}\mappingTest\Example.cs.2.xml";
  105. File.WriteAllText(@"mappingTest\mapping.txt", string.Format(fileContents, Environment.CurrentDirectory));
  106. var map = new ShortXmlFileNameMapping("mappingTest");
  107. var sourcePath = map.GetSourcePath(@"Example.cs.2.xml");
  108. Assert.AreEqual(@"C:\Foo\Bar\xyzzy\Example.cs", sourcePath);
  109. }
  110. [Test]
  111. public void TestMappingFile() {
  112. string fileContents = @"C:\Foo\Bar\test.cs|C:\srcmlArchive\test.cs.1.xml
  113. C:\Foo\Bar\Example.cs|C:\srcmlArchive\Example.cs.1.xml
  114. C:\Foo\Bar\xyzzy\Example.cs|C:\srcmlArchive\Example.cs.2.xml";
  115. File.WriteAllText(@"mappingTest\mapping.txt", fileContents);
  116. var map = new ShortXmlFileNameMapping("mappingTest");
  117. Assert.AreEqual(@"C:\srcmlArchive\test.cs.1.xml", map.GetXmlPath(@"C:\Foo\Bar\test.cs"));
  118. Assert.AreEqual(@"C:\srcmlArchive\Example.cs.1.xml", map.GetXmlPath(@"C:\Foo\Bar\Example.cs"));
  119. Assert.AreEqual(@"C:\srcmlArchive\Example.cs.2.xml", map.GetXmlPath(@"C:\Foo\Bar\xyzzy\Example.cs"));
  120. }
  121. [Test]
  122. public void TestSaveMapping() {
  123. var map = new ShortXmlFileNameMapping("mappingTest");
  124. map.GetXmlPath("main.c");
  125. map.GetXmlPath("integer.cpp");
  126. map.SaveMapping();
  127. Assert.That(File.Exists(@"mappingTest\mapping.txt"));
  128. var lines = File.ReadAllLines(@"mappingTest\mapping.txt");
  129. Assert.AreEqual(2, lines.Length);
  130. }
  131. [Test]
  132. public void TestFolderWithXmlNoMappingFile() {
  133. File.Copy(@"..\..\TestInputs\function_def.xml", @"mappingTest\function_def.xml", true);
  134. File.Copy(@"..\..\TestInputs\method_def.xml", @"mappingTest\method_def.xml", true);
  135. File.Copy(@"..\..\TestInputs\nested_scopes.xml", @"mappingTest\nested_scopes.xml", true);
  136. var map = new ShortXmlFileNameMapping("mappingTest");
  137. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\function_def.cpp", map.GetSourcePath(@"function_def.xml"));
  138. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\method_def.cpp", map.GetSourcePath(@"method_def.xml"));
  139. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\nested_scopes.c", map.GetSourcePath(@"nested_scopes.xml"));
  140. }
  141. [Test]
  142. public void TestFolderWithXmlNoMappingFile_NonSrcMLXml() {
  143. File.Copy(@"..\..\TestInputs\function_def.xml", @"mappingTest\function_def.xml", true);
  144. File.Copy(@"..\..\TestInputs\method_def.xml", @"mappingTest\method_def.xml", true);
  145. File.Copy(@"..\..\TestInputs\nested_scopes.xml", @"mappingTest\nested_scopes.xml", true);
  146. File.Copy(@"..\..\TestInputs\NotSrcML.xml", @"mappingTest\NotSrcML.xml", true);
  147. var map = new ShortXmlFileNameMapping("mappingTest");
  148. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\function_def.cpp", map.GetSourcePath(@"function_def.xml"));
  149. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\method_def.cpp", map.GetSourcePath(@"method_def.xml"));
  150. Assert.AreEqual(@"C:\Workspaces\SrcML.NET\TestInputs\nested_scopes.c", map.GetSourcePath(@"nested_scopes.xml"));
  151. }
  152. [Test]
  153. public void TestConcurrentAccess() {
  154. var sourceFiles1 = new[]
  155. {
  156. Environment.CurrentDirectory+@"\xyzzy\Example.cs",
  157. Environment.CurrentDirectory+@"\foo\bar\MissingFile.cs",
  158. Environment.CurrentDirectory+@"\zork\Example.cs",
  159. Environment.CurrentDirectory+@"\path\to\file\data.cpp",
  160. Environment.CurrentDirectory+@"\path\to\file\data1.cpp",
  161. Environment.CurrentDirectory+@"\path\to\file\data2.cpp",
  162. Environment.CurrentDirectory+@"\path\to\file\data3.cpp",
  163. Environment.CurrentDirectory+@"\path\to\file\data4.cpp",
  164. Environment.CurrentDirectory+@"\path\to\file\data5.cpp",
  165. Environment.CurrentDirectory+@"\path\to\file\data6.cpp",
  166. Environment.CurrentDirectory+@"\path\to\file\data7.cpp",
  167. Environment.CurrentDirectory+@"\path\to\file\data8.cpp",
  168. Environment.CurrentDirectory+@"\path\to\file\data9.cpp",
  169. Environment.CurrentDirectory+@"\path\to\file\data10.cpp",
  170. Environment.CurrentDirectory+@"\path\to\file\data11.c"
  171. };
  172. var sourceFiles2 = new[]
  173. {
  174. Environment.CurrentDirectory+@"\foo\bar\Example.cs",
  175. Environment.CurrentDirectory+@"\path\to\file\data.cpp",
  176. Environment.CurrentDirectory+@"\path\to\file\data1.cpp",
  177. Environment.CurrentDirectory+@"\path\to\file\data2.cpp",
  178. Environment.CurrentDirectory+@"\foo\bar\ImportantData.cpp",
  179. Environment.CurrentDirectory+@"\path\to\file\data3.cpp",
  180. Environment.CurrentDirectory+@"\path\to\file\data4.cpp",
  181. Environment.CurrentDirectory+@"\path\to\file\data5.cpp",
  182. Environment.CurrentDirectory+@"\path\to\file\data6.cpp",
  183. Environment.CurrentDirectory+@"\path\to\file\data7.cpp",
  184. Environment.CurrentDirectory+@"\path\to\file\data8.cpp",
  185. Environment.CurrentDirectory+@"\path\to\file\data9.cpp",
  186. Environment.CurrentDirectory+@"\other\dir\Sample.h",
  187. Environment.CurrentDirectory+@"\path\to\file\data10.cpp",
  188. Environment.CurrentDirectory+@"\path\to\file\data11.c"
  189. };
  190. var xmlFiles = new[]
  191. {
  192. Environment.CurrentDirectory+@"\mappingTest\Example.cs.1.xml",
  193. Environment.CurrentDirectory+@"\mappingTest\MissingFile.cs.1.xml",
  194. Environment.CurrentDirectory+@"\mappingTest\Example.cs.2.xml",
  195. Environment.CurrentDirectory+@"\mappingTest\data.cpp.1.xml",
  196. Environment.CurrentDirectory+@"\mappingTest\data1.cpp.1.xml",
  197. Environment.CurrentDirectory+@"\mappingTest\data2.cpp.1.xml",
  198. Environment.CurrentDirectory+@"\mappingTest\data3.cpp.1.xml",
  199. Environment.CurrentDirectory+@"\mappingTest\data4.cpp.1.xml",
  200. Environment.CurrentDirectory+@"\mappingTest\data5.cpp.1.xml",
  201. Environment.CurrentDirectory+@"\mappingTest\data6.cpp.1.xml",
  202. Environment.CurrentDirectory+@"\mappingTest\data7.cpp.1.xml",
  203. Environment.CurrentDirectory+@"\mappingTest\data8.cpp.1.xml",
  204. Environment.CurrentDirectory+@"\mappingTest\data9.cpp.1.xml",
  205. Environment.CurrentDirectory+@"\mappingTest\data10.cpp.1.xml",
  206. Environment.CurrentDirectory+@"\mappingTest\data11.c.1.xml",
  207. Environment.CurrentDirectory+@"\mappingTest\Example.cs.3.xml",
  208. Environment.CurrentDirectory+@"\mappingTest\ImportantData.cpp.1.xml",
  209. Environment.CurrentDirectory+@"\mappingTest\Sample.h.1.xml",
  210. };
  211. var map = new ShortXmlFileNameMapping("mappingTest");
  212. var worker = new Thread(() => ConcurrentWorker(map, sourceFiles2));
  213. worker.Start();
  214. foreach(var file in sourceFiles1) {
  215. map.GetXmlPath(file);
  216. }
  217. worker.Join(5000);
  218. map.SaveMapping();
  219. var obsSourceFiles = new HashSet<string>();
  220. var obsXmlFiles = new HashSet<string>();
  221. foreach(var entry in File.ReadAllLines("mappingTest\\mapping.txt")) {
  222. var fields = entry.Split('|');
  223. obsSourceFiles.Add(fields[0]);
  224. obsXmlFiles.Add(fields[1]);
  225. }
  226. var sourceFiles = sourceFiles1.Union(sourceFiles2);
  227. Assert.AreEqual(sourceFiles.Count(), obsSourceFiles.Count);
  228. Assert.AreEqual(xmlFiles.Count(), obsXmlFiles.Count);
  229. foreach(var file in obsSourceFiles) {
  230. Assert.IsTrue(sourceFiles.Contains(file));
  231. }
  232. foreach(var file in obsXmlFiles) {
  233. Assert.IsTrue(xmlFiles.Contains(file));
  234. }
  235. }
  236. private void ConcurrentWorker(ShortXmlFileNameMapping map, IEnumerable<string> sourceFiles) {
  237. foreach(var file in sourceFiles) {
  238. map.GetXmlPath(file);
  239. }
  240. }
  241. [Test]
  242. public void TestDispose() {
  243. Assert.IsTrue(!File.Exists("mappingTest\\mapping.txt"));
  244. using(var map = new ShortXmlFileNameMapping("mappingTest")) {
  245. map.GetXmlPath(@"foo\bar\Example.cs");
  246. map.GetXmlPath(@"foo\bar\Data.cs");
  247. map.GetXmlPath(@"foo\bar\baz\Example.cs");
  248. }
  249. Assert.IsTrue(File.Exists("mappingTest\\mapping.txt"));
  250. }
  251. }
  252. }