PageRenderTime 27ms CodeModel.GetById 0ms RepoModel.GetById 0ms app.codeStats 0ms

/ABB.SrcML.Test/Src2SrcMLRunnerTests.cs

https://github.com/nkcsgexi/SrcML.NET
C# | 292 lines | 191 code | 45 blank | 56 comment | 1 complexity | 58b24046e5a84b936efd7a79196336c3 MD5 | raw file
  1. /******************************************************************************
  2. * Copyright (c) 2010 ABB Group
  3. * All rights reserved. This program and the accompanying materials
  4. * are made available under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution, and is available at
  6. * http://www.eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * Vinay Augustine (ABB Group) - initial API, implementation, & documentation
  10. *****************************************************************************/
  11. using System;
  12. using System.IO;
  13. using System.Text;
  14. using System.Collections.Generic;
  15. using System.Linq;
  16. using NUnit.Framework;
  17. using ABB.SrcML;
  18. using System.Xml.Linq;
  19. namespace ABB.SrcML.Test
  20. {
  21. [TestFixture]
  22. [Category("Build")]
  23. public class Src2SrcMLRunnerTests
  24. {
  25. [TestFixtureSetUp]
  26. public static void SrcMLTestInitialize()
  27. {
  28. Directory.CreateDirectory("srcmltest");
  29. Directory.CreateDirectory("srcml_xml");
  30. File.WriteAllText("srcmltest\\foo.c", String.Format(@"int foo() {{{0}printf(""hello world!"");{0}}}", Environment.NewLine));
  31. File.WriteAllText("srcmltest\\bar.c", String.Format(@"int bar() {{{0} printf(""goodbye, world!"");{0}}}", Environment.NewLine));
  32. File.WriteAllText("srcmltest\\CSHARP.cs", @"using System.Collections.Generic;
  33. using System.Linq;
  34. using System.Xml;
  35. using System.Xml.Linq;
  36. using System.Xml.XPath;
  37. using ABB.SrcML;
  38. namespace LoggingTransformation
  39. {
  40. public class FunctionEntryLogTransform : ITransform
  41. {
  42. public IEnumerable<XElement> Query(XElement element)
  43. {
  44. var functions = from method in element.Descendants(SRC.method)
  45. select method;
  46. return functions;
  47. }
  48. public XElement Transform(XElement element)
  49. {
  50. var first = element.Element(SRC.Block).Elements().First();
  51. var functionName = element.Element(SRC.Name).Value;
  52. first.AddBeforeSelf(new XElement(SRC.ExpressionStatement, string.Format(""LOG_FUNCTION_ENTRY(\""{0}\"");\n\t"", functionName)));
  53. return element;
  54. }
  55. }
  56. }
  57. ");
  58. File.WriteAllText("srcmltest\\File with spaces.cpp", String.Format(@"int foo() {{{0} printf(""hello world!"");{0}}}", Environment.NewLine));
  59. }
  60. [TestFixtureTearDown]
  61. public static void SrcMLTestCleanup()
  62. {
  63. /*
  64. foreach (var file in Directory.GetFiles("srcmltest"))
  65. {
  66. File.Delete(file);
  67. }
  68. foreach (var file in Directory.GetFiles("srcml_xml"))
  69. {
  70. File.Delete(file);
  71. }
  72. Directory.Delete("srcmltest");
  73. Directory.Delete("srcml_xml");
  74. */
  75. }
  76. [Test]
  77. public void DifferentLanguageTest()
  78. {
  79. var srcmlObject = new Src2SrcMLRunner();
  80. var doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\CSHARP.cs", "srcml_xml\\differentlanguage_java.xml", Language.Java);
  81. Assert.IsNotNull(doc);
  82. }
  83. [Test]
  84. public void SrcMLFromStringTest()
  85. {
  86. string sourceCode = @"int foo() {
  87. printf(""hello world!"");
  88. }";
  89. var srcmlObject = new Src2SrcMLRunner();
  90. string xml = srcmlObject.GenerateSrcMLFromString(sourceCode, Language.C);
  91. XElement element = XElement.Parse(xml);
  92. Assert.IsNotNull(element);
  93. }
  94. [Test]
  95. public void InvalidLanguageTest()
  96. {
  97. var srcmlObject = new Src2SrcMLRunner();
  98. var doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_java.xml", Language.Java);
  99. Assert.IsNotNull(doc);
  100. doc = null;
  101. doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_cpp.xml", Language.CPlusPlus);
  102. Assert.IsNotNull(doc);
  103. doc = null;
  104. doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_c.xml", Language.C);
  105. Assert.IsNotNull(doc);
  106. }
  107. [Test]
  108. public void SingleFileTest()
  109. {
  110. var srcmlObject = new Src2SrcMLRunner();
  111. var doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\singlefile.xml");
  112. Assert.IsNotNull(doc);
  113. Assert.AreEqual(1, doc.FileUnits.Count());
  114. Assert.AreEqual("srcmltest\\foo.c", doc.FileUnits.First().Attribute("filename").Value);
  115. }
  116. /// <summary>
  117. /// Added by JZ on 12/3/2012.
  118. /// Unit test for Src2SrcMLRunner.GenerateSrcMLAndStringFromFile()
  119. /// </summary>
  120. [Test]
  121. public void SingleFileToFileAndStringTest()
  122. {
  123. var srcmlObject = new Src2SrcMLRunner(TestConstants.SrcmlPath);
  124. string xml = srcmlObject.GenerateSrcMLAndStringFromFile("srcmltest\\foo.c", "srcml_xml\\singlefile.xml");
  125. Console.WriteLine("xml = " + xml);
  126. Assert.IsNotNull(xml);
  127. //Assert.AreEqual(1, doc.FileUnits.Count());
  128. //Assert.AreEqual("srcmltest\\foo.c", doc.FileUnits.First().Attribute("filename").Value);
  129. Assert.That(File.Exists("srcml_xml\\singlefile.xml"));
  130. }
  131. /// <summary>
  132. /// Added by JZ on 12/4/2012.
  133. /// Unit test for Src2SrcMLRunner.GenerateSrcMLAndXElementFromFile()
  134. /// </summary>
  135. [Test]
  136. public void SingleFileToFileAndXElementTest()
  137. {
  138. var srcmlObject = new Src2SrcMLRunner(TestConstants.SrcmlPath);
  139. XElement xElement = srcmlObject.GenerateSrcMLAndXElementFromFile("srcmltest\\foo.c", "srcml_xml\\singlefile.xml");
  140. Assert.IsNotNull(xElement);
  141. //Assert.AreEqual(1, doc.FileUnits.Count());
  142. //Assert.AreEqual("srcmltest\\foo.c", doc.FileUnits.First().Attribute("filename").Value);
  143. Assert.That(File.Exists("srcml_xml\\singlefile.xml"));
  144. }
  145. [Test]
  146. public void MultipleFilesTest()
  147. {
  148. var srcmlObject = new Src2SrcMLRunner();
  149. var doc = srcmlObject.GenerateSrcMLFromFiles(new string[] {"srcmltest\\foo.c", "srcmltest\\bar.c"}, "srcml_xml\\multiplefile.xml");
  150. Assert.IsNotNull(doc);
  151. var files = doc.FileUnits.ToList();
  152. Assert.AreEqual(2, files.Count());
  153. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  154. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  155. }
  156. [Test]
  157. public void MultipleFilesTest_DifferentDirectories()
  158. {
  159. var srcmlObject = new Src2SrcMLRunner();
  160. var doc = srcmlObject.GenerateSrcMLFromFiles(new string[] {"srcmltest\\foo.c", "srcmltest\\bar.c", "..\\..\\TestInputs\\baz.cpp"}, "srcml_xml\\multiplefile.xml");
  161. Assert.IsNotNull(doc);
  162. var files = doc.FileUnits.ToList();
  163. Assert.AreEqual(3, files.Count());
  164. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  165. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  166. Assert.AreEqual("TestInputs\\baz.cpp", files[2].Attribute("filename").Value);
  167. }
  168. [Test]
  169. public void MultipleFilesTest_Language() {
  170. var srcmlObject = new Src2SrcMLRunner();
  171. var doc = srcmlObject.GenerateSrcMLFromFiles(new string[] { "srcmltest\\foo.c", "srcmltest\\bar.c" }, "srcml_xml\\multiplefile.xml", Language.CPlusPlus);
  172. Assert.IsNotNull(doc);
  173. var files = doc.FileUnits.ToList();
  174. Assert.AreEqual(2, files.Count());
  175. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  176. Assert.AreEqual("C++", files[0].Attribute("language").Value);
  177. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  178. Assert.AreEqual("C++", files[1].Attribute("language").Value);
  179. }
  180. //[Test]
  181. // TODO this test depends on my computer. Fix it.
  182. //public void TestDirectoryParsing()
  183. //{
  184. // var srcmlObject = new Src2SrcMLRunner(TestConstants.SrcmlPath);
  185. // var xmlFileName = Path.GetTempFileName();
  186. // var document = srcmlObject.GenerateSrcMLFromDirectory(@"C:\Users\USVIAUG\Documents\Source Code\Notepad++", xmlFileName);
  187. // Assert.AreEqual(283, document.FileUnits.Count());
  188. //}
  189. [Test]
  190. public void ExclusionFilterTest()
  191. {
  192. var exclusionList = new List<string>();
  193. exclusionList.Add("srcmltest\\bar.c");
  194. var srcmlObject = new Src2SrcMLRunner();
  195. var doc = srcmlObject.GenerateSrcMLFromDirectory("srcmltest", "srcml_xml\\exclusionfilter.xml", exclusionList, Language.C);
  196. var numFileUnits = doc.FileUnits.Count();
  197. string firstSourceFile = null;
  198. if(numFileUnits > 0)
  199. {
  200. firstSourceFile = doc.FileUnits.First().Attribute("filename").Value;
  201. }
  202. Assert.AreEqual(1, numFileUnits, "test.xml should have only one file in it");
  203. Assert.AreEqual(Path.GetFullPath("srcmltest\\foo.c"), firstSourceFile);
  204. }
  205. [Test]
  206. public void EmptyOutputFileTest()
  207. {
  208. var srcmlObject = new Src2SrcMLRunner();
  209. File.WriteAllText("srcml_xml\\emptyFile.xml", "");
  210. Assert.IsTrue(File.Exists("srcml_xml\\emptyFile.xml"));
  211. var doc = srcmlObject.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\emptyFile.xml");
  212. Assert.IsNotNull(doc);
  213. Assert.AreEqual(1, doc.FileUnits.Count());
  214. }
  215. [Test]
  216. public void InputWithSpacesTest()
  217. {
  218. var runner = new Src2SrcMLRunner();
  219. var doc = runner.GenerateSrcMLFromFile("srcmltest\\File with spaces.cpp", "srcml_xml\\input_with_spaces.xml");
  220. Assert.IsNotNull(doc);
  221. Assert.AreEqual(1, doc.FileUnits.Count());
  222. }
  223. [Test]
  224. public void MyTestMethod()
  225. {
  226. var runner = new Src2SrcMLRunner();
  227. runner.GenerateSrcMLFromDirectory("srcmltest", "srcmltest1.xml");
  228. runner.GenerateSrcMLFromFile("srcmltest\\File with spaces.cpp", "testfile.xml");
  229. }
  230. //[Test]
  231. //public void TestRegularExpression()
  232. //{
  233. // string output;
  234. // output = SrcML.GetLogFromOutput(@" - ..\..\TEST\dbglib.py Skipped: Unregistered extension.");
  235. // Assert.AreEqual(@"-: ..\..\TEST\dbglib.py: Skipped: Unregistered extension.", output);
  236. // output = SrcML.GetLogFromOutput(@"Path: ..\..\TEST\dbglib.c Error: Unable to open file.");
  237. // Assert.AreEqual(@"Path:: ..\..\TEST\dbglib.c: Error: Unable to open file.", output);
  238. // output = SrcML.GetLogFromOutput(@" 1 Z:\Source\Robotics\rel5_11.0160.release\sys\modulelib\dbglib\dbglib.c");
  239. // Assert.AreEqual(@"1: Z:\Source\Robotics\rel5_11.0160.release\sys\modulelib\dbglib\dbglib.c: : ", output);
  240. // output = SrcML.GetLogFromOutput(@"Path: Z:\Source\Robotics\rel5_11.0160.release\sys\modulelib\dbglib\dbglib.c");
  241. // Assert.AreEqual(@"Path:: Z:\Source\Robotics\rel5_11.0160.release\sys\modulelib\dbglib\dbglib.c: : ", output);
  242. //}
  243. }
  244. }