public void TrickyFileTest() { var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\Parameters.h"); Assert.IsNotNull(elements); }
public void ParseAboutDlgTest() { var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\AboutDlg.cpp"); Assert.IsNotNull(elements); }
public void ParseAnotherEnumTest() { var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\xmlMatchedTagsHighlighter.cpp"); Assert.IsNotNull(elements); }
public void ParseCPPSourceWithErrorsTest() { bool seenGetTimeMethod = false; int numMethods = 0; ///////string sourceFile = @"..\..\Parser\Parser.UnitTests\TestFiles\Event.CPP.txt"; string sourceFile = @"TestFiles\EventWithErrorInIt.cpp"; var parser = new SrcMLCppParser(generator); var elements = parser.Parse(sourceFile); Assert.IsNotNull(elements); Assert.AreEqual(elements.Count, 5); ///////CheckParseOfEventFile(parser, sourceFile, elements); }
private static void CheckParseOfEventFile(SrcMLCppParser parser, string sourceFile, List <ProgramElement> elements) { bool seenGetTimeMethod = false; int numMethods = 0; foreach (ProgramElement pe in elements) { if (pe is CppUnresolvedMethodElement) { numMethods++; //Resolve bool isResolved = false; MethodElement method = null; CppUnresolvedMethodElement unresolvedMethod = (CppUnresolvedMethodElement)pe; foreach (String headerFile in unresolvedMethod.IncludeFileNames) { //it's reasonable to assume that the header file path is relative from the cpp file, //as other included files are unlikely to be part of the same project and therefore //should not need to be parsed string headerPath = System.IO.Path.GetDirectoryName(sourceFile) + "\\" + headerFile; if (!System.IO.File.Exists(headerPath)) { continue; } isResolved = unresolvedMethod.TryResolve(unresolvedMethod, parser.Parse(headerPath), out method); if (isResolved == true) { break; } } Assert.IsTrue(isResolved); Assert.IsNotNull(method); //pick one of the resolved methods to see if it seems complete if (method.Name == "getTime") { seenGetTimeMethod = true; Assert.AreEqual(method.DefinitionLineNumber, 13); Assert.AreEqual(method.ReturnType, "double"); Assert.AreEqual(method.AccessLevel, AccessLevel.Public); Assert.AreEqual(method.Arguments, String.Empty); Assert.AreEqual(method.Body, "{ \n return _time; \n}"); Assert.AreNotEqual(method.ClassId, System.Guid.Empty); } } } Assert.AreEqual(numMethods, 6); Assert.IsTrue(seenGetTimeMethod); }
public void ParseCppConstructorTest() { bool hasConstructor = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\Event.H.txt"); Assert.IsNotNull(elements); foreach(ProgramElement pe in elements) { if(pe is MethodPrototypeElement) { var protoElement = (MethodPrototypeElement)pe; if(protoElement.IsConstructor) { hasConstructor = true; Assert.AreEqual(protoElement.Name, "Event"); Assert.AreEqual(protoElement.DefinitionLineNumber, 15); } } } Assert.IsTrue(hasConstructor); }
public void ParseCppConstructorTest() { bool hasConstructor = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\Event.H.txt"); Assert.IsNotNull(elements); foreach (ProgramElement pe in elements) { if (pe is MethodPrototypeElement) { var protoElement = (MethodPrototypeElement)pe; if (protoElement.IsConstructor) { hasConstructor = true; Assert.AreEqual(protoElement.Name, "Event"); Assert.AreEqual(protoElement.DefinitionLineNumber, 15); } } } Assert.IsTrue(hasConstructor); }
public void WeirdStructTest() { //Note: may not want to create this in mydocuments.... //create a test file String WeirdStruct = "struct LangMenuItem { LangType _langType; int _cmdID; generic_string _langName; " + "LangMenuItem(LangType lt, int cmdID = 0, generic_string langName = TEXT(\"\")): " + "_langType(lt), _cmdID(cmdID), _langName(langName){};};"; String WeirdStructFile = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\HelloWorld1.cs"; System.IO.File.WriteAllText(WeirdStructFile, WeirdStruct); bool hasStruct = false; Guid structId = Guid.Empty; var parser = new SrcMLCppParser(generator); var elements = parser.Parse(WeirdStructFile); Assert.IsTrue(elements.Count == 2); foreach (ProgramElement pe in elements) { if (pe is StructElement) { StructElement structElement = (StructElement)pe; Assert.IsNotNull(structElement); Assert.AreEqual(structElement.Name, "LangMenuItem"); structId = structElement.Id; hasStruct = true; } else if (pe is MethodElement) { MethodElement methodElement = (MethodElement)pe; Assert.AreEqual(methodElement.ClassId, structId); } } Assert.IsTrue(hasStruct); //delete file System.IO.File.Delete(WeirdStructFile); }
public void ParseUndefinedNameEnumTest() { bool hasEnum = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\PlayMp3Dlg.h.txt"); Assert.IsNotNull(elements); foreach (ProgramElement pe in elements) { if (pe is EnumElement) { EnumElement enumElem = (EnumElement)pe; Assert.AreEqual(enumElem.Name, ""); Assert.AreEqual(enumElem.DefinitionLineNumber, 30); Assert.AreEqual(enumElem.Body, "IDD IDD_PLAYMP3_DIALOG"); Assert.AreEqual(enumElem.AccessLevel, AccessLevel.Public); Assert.True(enumElem.FullFilePath.EndsWith("TestFiles\\PlayMp3Dlg.h.txt")); hasEnum = true; } } Assert.IsTrue(hasEnum); }
public void ParseCPPHeaderTest() { bool hasClass = false; bool hasEnum = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\Event.H.txt"); Assert.IsNotNull(elements); Assert.AreEqual(elements.Count, 8); foreach (ProgramElement pe in elements) { if (pe is ClassElement) { ClassElement classElem = (ClassElement)pe; Assert.AreEqual(classElem.Name, "Event"); Assert.AreEqual(classElem.DefinitionLineNumber, 12); Assert.AreEqual(classElem.AccessLevel, AccessLevel.Public); Assert.AreEqual(classElem.Namespace, String.Empty); Assert.True(classElem.FullFilePath.EndsWith("TestFiles\\Event.H.txt")); hasClass = true; } else if (pe is EnumElement) { EnumElement enumElem = (EnumElement)pe; Assert.AreEqual(enumElem.Name, "EventType"); Assert.AreEqual(enumElem.DefinitionLineNumber, 6); Assert.AreEqual(enumElem.Namespace, String.Empty); Assert.AreEqual(enumElem.Body, "SENSED_DATA_READY SENDING_DONE RECEIVING_DONE"); Assert.AreEqual(enumElem.AccessLevel, AccessLevel.Public); Assert.True(enumElem.FullFilePath.EndsWith("TestFiles\\Event.H.txt")); hasEnum = true; } } Assert.IsTrue(hasClass); Assert.IsTrue(hasEnum); }
private void _processFileInBackground_DoWork(object sender, DoWorkEventArgs e) { var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\xmlMatchedTagsHighlighter.cpp"); }
private static void CheckParseOfEventFile(SrcMLCppParser parser, string sourceFile, List<ProgramElement> elements) { bool seenGetTimeMethod = false; int numMethods = 0; foreach (ProgramElement pe in elements) { if (pe is CppUnresolvedMethodElement) { numMethods++; //Resolve bool isResolved = false; MethodElement method = null; CppUnresolvedMethodElement unresolvedMethod = (CppUnresolvedMethodElement) pe; foreach (String headerFile in unresolvedMethod.IncludeFileNames) { //it's reasonable to assume that the header file path is relative from the cpp file, //as other included files are unlikely to be part of the same project and therefore //should not need to be parsed string headerPath = System.IO.Path.GetDirectoryName(sourceFile) + "\\" + headerFile; if (!System.IO.File.Exists(headerPath)) continue; isResolved = unresolvedMethod.TryResolve(unresolvedMethod, parser.Parse(headerPath), out method); if (isResolved == true) break; } Assert.IsTrue(isResolved); Assert.IsNotNull(method); //pick one of the resolved methods to see if it seems complete if (method.Name == "getTime") { seenGetTimeMethod = true; Assert.AreEqual(method.DefinitionLineNumber, 13); Assert.AreEqual(method.ReturnType, "double"); Assert.AreEqual(method.AccessLevel, AccessLevel.Public); Assert.AreEqual(method.Arguments, String.Empty); Assert.AreEqual(method.Body, "{ \n return _time; \n}"); Assert.AreNotEqual(method.ClassId, System.Guid.Empty); } } } Assert.AreEqual(numMethods, 6); Assert.IsTrue(seenGetTimeMethod); }
public void ParseUndefinedNameEnumTest() { bool hasEnum = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\PlayMp3Dlg.h.txt"); Assert.IsNotNull(elements); foreach(ProgramElement pe in elements) { if(pe is EnumElement) { EnumElement enumElem = (EnumElement)pe; Assert.AreEqual(enumElem.Name, ""); Assert.AreEqual(enumElem.DefinitionLineNumber, 30); Assert.AreEqual(enumElem.Body, "IDD IDD_PLAYMP3_DIALOG"); Assert.AreEqual(enumElem.AccessLevel, AccessLevel.Public); Assert.True(enumElem.FullFilePath.EndsWith("TestFiles\\PlayMp3Dlg.h.txt")); hasEnum = true; } } Assert.IsTrue(hasEnum); }
public void ParseCPPHeaderTest() { bool hasClass = false; bool hasEnum = false; var parser = new SrcMLCppParser(generator); var elements = parser.Parse("TestFiles\\Event.H.txt"); Assert.IsNotNull(elements); Assert.AreEqual(elements.Count, 8); foreach(ProgramElement pe in elements) { if(pe is ClassElement) { ClassElement classElem = (ClassElement)pe; Assert.AreEqual(classElem.Name, "Event"); Assert.AreEqual(classElem.DefinitionLineNumber, 12); Assert.AreEqual(classElem.AccessLevel, AccessLevel.Public); Assert.AreEqual(classElem.Namespace, String.Empty); Assert.True(classElem.FullFilePath.EndsWith("TestFiles\\Event.H.txt")); hasClass = true; } else if(pe is EnumElement) { EnumElement enumElem = (EnumElement)pe; Assert.AreEqual(enumElem.Name, "EventType"); Assert.AreEqual(enumElem.DefinitionLineNumber, 6); Assert.AreEqual(enumElem.Namespace, String.Empty); Assert.AreEqual(enumElem.Body, "SENSED_DATA_READY SENDING_DONE RECEIVING_DONE"); Assert.AreEqual(enumElem.AccessLevel, AccessLevel.Public); Assert.True(enumElem.FullFilePath.EndsWith("TestFiles\\Event.H.txt")); hasEnum = true; } } Assert.IsTrue(hasClass); Assert.IsTrue(hasEnum); }