PageRenderTime 53ms CodeModel.GetById 26ms RepoModel.GetById 1ms app.codeStats 0ms

/ABB.SrcML.Test/SrcMLGeneratorTests.cs

https://github.com/nkcsgexi/SrcML.NET
C# | 252 lines | 169 code | 35 blank | 48 comment | 1 complexity | 7bf922f9a0bb8a2bef7220c795fe1b3d 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. using ABB.SrcML.Utilities;
  20. namespace ABB.SrcML.Test {
  21. [TestFixture]
  22. [Category("Build")]
  23. public class SrcMLGeneratorTests {
  24. private SrcMLGenerator generator;
  25. [TestFixtureSetUp]
  26. public static void FixtureInitialize() {
  27. Directory.CreateDirectory("srcmltest");
  28. Directory.CreateDirectory("srcml_xml");
  29. File.WriteAllText("srcmltest\\foo.c", String.Format(@"int foo() {{{0}printf(""hello world!"");{0}}}", Environment.NewLine));
  30. File.WriteAllText("srcmltest\\bar.c", String.Format(@"int bar() {{{0} printf(""goodbye, world!"");{0}}}", Environment.NewLine));
  31. File.WriteAllText("srcmltest\\CSHARP.cs", @"using System.Collections.Generic;
  32. using System.Linq;
  33. using System.Xml;
  34. using System.Xml.Linq;
  35. using System.Xml.XPath;
  36. using ABB.SrcML;
  37. namespace LoggingTransformation
  38. {
  39. public class FunctionEntryLogTransform : ITransform
  40. {
  41. public IEnumerable<XElement> Query(XElement element)
  42. {
  43. var functions = from method in element.Descendants(SRC.method)
  44. select method;
  45. return functions;
  46. }
  47. public XElement Transform(XElement element)
  48. {
  49. var first = element.Element(SRC.Block).Elements().First();
  50. var functionName = element.Element(SRC.Name).Value;
  51. first.AddBeforeSelf(new XElement(SRC.ExpressionStatement, string.Format(""LOG_FUNCTION_ENTRY(\""{0}\"");\n\t"", functionName)));
  52. return element;
  53. }
  54. }
  55. }
  56. ");
  57. File.WriteAllText("srcmltest\\File with spaces.cpp", String.Format(@"int foo() {{{0} printf(""hello world!"");{0}}}", Environment.NewLine));
  58. }
  59. [TestFixtureTearDown]
  60. public static void FixtureCleanup() {
  61. /*
  62. foreach (var file in Directory.GetFiles("srcmltest"))
  63. {
  64. File.Delete(file);
  65. }
  66. foreach (var file in Directory.GetFiles("srcml_xml"))
  67. {
  68. File.Delete(file);
  69. }
  70. Directory.Delete("srcmltest");
  71. Directory.Delete("srcml_xml");
  72. */
  73. }
  74. [SetUp]
  75. public void TestSetup() {
  76. generator = new SrcMLGenerator(TestConstants.SrcmlPath);
  77. }
  78. [Test]
  79. public void DifferentLanguageTest() {
  80. generator.GenerateSrcMLFromFile("srcmltest\\CSHARP.cs", "srcml_xml\\differentlanguage_java.xml", Language.Java);
  81. var doc = new SrcMLFile("srcml_xml\\differentlanguage_java.xml");
  82. Assert.IsNotNull(doc);
  83. }
  84. [Test]
  85. public void SrcMLFromStringTest() {
  86. string sourceCode = @"int foo() {
  87. printf(""hello world!"");
  88. }";
  89. string xml = generator.GenerateSrcMLFromString(sourceCode, Language.C);
  90. XElement element = XElement.Parse(xml);
  91. Assert.IsNotNull(element);
  92. }
  93. [Test]
  94. public void InvalidLanguageTest() {
  95. generator.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_java.xml", Language.Java);
  96. var doc = new SrcMLFile("srcml_xml\\invalidlanguage_java.xml");
  97. Assert.IsNotNull(doc);
  98. doc = null;
  99. generator.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_cpp.xml", Language.CPlusPlus);
  100. doc = new SrcMLFile("srcml_xml\\invalidlanguage_cpp.xml");
  101. Assert.IsNotNull(doc);
  102. doc = null;
  103. generator.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\invalidlanguage_c.xml", Language.C);
  104. doc = new SrcMLFile("srcml_xml\\invalidlanguage_c.xml");
  105. Assert.IsNotNull(doc);
  106. }
  107. [Test]
  108. public void SingleFileTest() {
  109. generator.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\singlefile.xml");
  110. var unit = SrcMLElement.Load("srcml_xml\\singlefile.xml");
  111. Assert.IsNotNull(unit);
  112. Assert.AreEqual("srcmltest\\foo.c", unit.Attribute("filename").Value);
  113. }
  114. [Test]
  115. public void MultipleFilesTest() {
  116. var doc = generator.GenerateSrcMLFileFromFiles(new string[] { "srcmltest\\foo.c", "srcmltest\\bar.c" }, "srcml_xml\\multiplefile.xml");
  117. Assert.IsNotNull(doc);
  118. var files = doc.FileUnits.ToList();
  119. Assert.AreEqual(2, files.Count());
  120. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  121. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  122. }
  123. [Test]
  124. public void MultipleFilesTest_DifferentDirectories() {
  125. var doc = generator.GenerateSrcMLFileFromFiles(new string[] { "srcmltest\\foo.c", "srcmltest\\bar.c", "..\\..\\TestInputs\\baz.cpp" }, "srcml_xml\\multiplefile.xml");
  126. Assert.IsNotNull(doc);
  127. var files = doc.FileUnits.ToList();
  128. Assert.AreEqual(3, files.Count());
  129. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  130. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  131. Assert.AreEqual("TestInputs\\baz.cpp", files[2].Attribute("filename").Value);
  132. }
  133. [Test]
  134. public void MultipleFilesTest_Language() {
  135. generator.GenerateSrcMLFromFiles(new string[] { "srcmltest\\foo.c", "srcmltest\\bar.c" }, "srcml_xml\\multiplefile.xml", Language.CPlusPlus);
  136. var doc = new SrcMLFile("srcml_xml\\multiplefile.xml");
  137. Assert.IsNotNull(doc);
  138. var files = doc.FileUnits.ToList();
  139. Assert.AreEqual(2, files.Count());
  140. Assert.AreEqual("srcmltest\\foo.c", files[0].Attribute("filename").Value);
  141. Assert.AreEqual("C++", files[0].Attribute("language").Value);
  142. Assert.AreEqual("srcmltest\\bar.c", files[1].Attribute("filename").Value);
  143. Assert.AreEqual("C++", files[1].Attribute("language").Value);
  144. }
  145. [Test]
  146. public void ExclusionFilterTest() {
  147. var exclusionList = new List<string>();
  148. exclusionList.Add("srcmltest\\bar.c");
  149. var doc = generator.GenerateSrcMLFileFromDirectory("srcmltest", "srcml_xml\\exclusionfilter.xml", exclusionList, Language.C);
  150. var numFileUnits = doc.FileUnits.Count();
  151. string firstSourceFile = null;
  152. if(numFileUnits > 0) {
  153. firstSourceFile = doc.FileUnits.First().Attribute("filename").Value;
  154. }
  155. Assert.AreEqual(1, numFileUnits, "test.xml should have only one file in it");
  156. Assert.AreEqual(Path.GetFullPath("srcmltest\\foo.c"), firstSourceFile);
  157. }
  158. [Test]
  159. public void EmptyOutputFileTest() {
  160. File.WriteAllText("srcml_xml\\emptyFile.xml", "");
  161. Assert.IsTrue(File.Exists("srcml_xml\\emptyFile.xml"));
  162. generator.GenerateSrcMLFromFile("srcmltest\\foo.c", "srcml_xml\\emptyFile.xml");
  163. var doc = new SrcMLFile("srcml_xml\\emptyFile.xml");
  164. Assert.IsNotNull(doc);
  165. Assert.AreEqual(1, doc.FileUnits.Count());
  166. }
  167. [Test]
  168. public void InputWithSpacesTest() {
  169. generator.GenerateSrcMLFromFile("srcmltest\\File with spaces.cpp", "srcml_xml\\input_with_spaces.xml");
  170. var doc = new SrcMLFile("srcml_xml\\input_with_spaces.xml");
  171. Assert.IsNotNull(doc);
  172. Assert.AreEqual(1, doc.FileUnits.Count());
  173. }
  174. //[Test]
  175. //[ExpectedException(typeof(SrcMLException))]
  176. //public void TestGenerateSrcMLFromFile_UnRegisteredExtension() {
  177. // //The default src2srcml can't parse c#, so this should fail
  178. // generator.NonDefaultExecutables.Clear();
  179. // generator.GenerateSrcMLFromFile(@"srcmltest\CSHARP.csx", @"srcml_xml\CSHARP.xml");
  180. //}
  181. [Test]
  182. public void TestGenerateSrcMLFromFile_NonDefaultExtension() {
  183. generator.GenerateSrcMLFromFile(@"srcmltest\CSHARP.cs", @"srcml_xml\CSHARP.xml");
  184. var doc = new SrcMLFile(@"srcml_xml\CSHARP.xml");
  185. Assert.IsNotNull(doc);
  186. Assert.AreEqual(1, doc.FileUnits.Count());
  187. }
  188. [Test]
  189. public void TestGenerateSrcMLFromFiles_NonDefaultExtension() {
  190. var doc = generator.GenerateSrcMLFileFromFiles(new[] {@"srcmltest\File with spaces.cpp", @"srcmltest\CSHARP.cs", @"srcmltest\foo.c"}, @"srcml_xml\multiple_files_csharp.xml");
  191. Assert.IsNotNull(doc);
  192. Assert.AreEqual(3, doc.FileUnits.Count());
  193. }
  194. //[Test]
  195. //[ExpectedException(typeof(InvalidOperationException))]
  196. //public void TestRegisterExecutable_Duplicate() {
  197. // generator.RegisterExecutable(Path.Combine(TestConstants.SrcmlPath, "csharp"), new[] {Language.CSharp});
  198. //}
  199. //[Test]
  200. //public void TestSupportedLanguages() {
  201. // var langs = generator.SupportedLanguages.ToList();
  202. // Assert.AreEqual(5, langs.Count);
  203. // Assert.IsTrue(langs.Contains(Language.C));
  204. // Assert.IsTrue(langs.Contains(Language.CPlusPlus));
  205. // Assert.IsTrue(langs.Contains(Language.CSharp));
  206. // Assert.IsTrue(langs.Contains(Language.Java));
  207. // Assert.IsTrue(langs.Contains(Language.AspectJ));
  208. // generator.NonDefaultExecutables.Clear();
  209. // langs = generator.SupportedLanguages.ToList();
  210. // Assert.AreEqual(4, langs.Count);
  211. // Assert.IsFalse(langs.Contains(Language.CSharp));
  212. //}
  213. }
  214. }