Exemplo n.º 1
0
 /// <summary>
 /// Generates srcML from the given string of source code
 /// </summary>
 /// <param name="sources">list of strings of code (each string is a whole file)</param>
 /// <param name="unitFilename">What name to give the unit</param>
 /// <param name="language">The language</param>
 /// <param name="namespaceArguments">additional arguments</param>
 /// <param name="omitXmlDeclaration">If true, the XML header is omitted</param>
 /// <returns>The srcML</returns>
 public ICollection <string> GenerateSrcMLFromStrings(ICollection <string> sources, ICollection <string> unitFilename, Language language, ICollection <UInt32> namespaceArguments, bool omitXmlDeclaration)
 {
     Contract.Requires(sources.Count == unitFilename.Count);
     try {
         using (Archive srcmlArchive = new Archive()) {
             srcmlArchive.SetArchiveLanguage(LanguageEnumDictionary[language]);
             srcmlArchive.EnableOption(GenerateArguments(namespaceArguments));
             var sourceandfile = sources.Zip(unitFilename, (src, fle) => new { source = src, file = fle });
             foreach (var pair in sourceandfile)
             {
                 using (Unit srcmlUnit = new Unit()) {
                     if (omitXmlDeclaration)
                     {
                         srcmlArchive.DisableOption(LibSrcMLRunner.SrcMLOptions.SRCML_OPTION_XML_DECL);
                     }
                     srcmlUnit.SetUnitBuffer(pair.source);
                     srcmlUnit.SetUnitFilename(pair.file);
                     srcmlUnit.SetUnitLanguage(LanguageEnumDictionary[language]);
                     srcmlArchive.AddUnit(srcmlUnit);
                 }
             }
             return(RunSrcML(srcmlArchive, LibSrcMLRunner.SrcmlCreateArchiveMtM));
         }
     }
     catch (Exception e) {
         throw new SrcMLException(e.Message, e);
     }
 }
Exemplo n.º 2
0
        public void TestCreateSrcMLArchiveMtM() {
            using (Archive srcmlArchive = new Archive()) {
                List<String> bufferList = new List<String>();
                List<String> fileList = new List<String>();
                String str = "int main(){int c; c = 0; ++c;}";
                String str2 = "int foo(){int c; c = 0; ++c;}";
                bufferList.Add(str);
                bufferList.Add(str2);

                fileList.Add("input.cpp");
                fileList.Add("input2.cpp");
                
                var buffandfile = bufferList.Zip(fileList, (b, f) => new { buf = b, file = f });
                foreach (var pair in buffandfile) {
                    using (Unit srcmlUnit = new Unit()) {
                        srcmlUnit.SetUnitBuffer(pair.buf);
                        srcmlUnit.SetUnitFilename(pair.file);

                        srcmlUnit.SetUnitLanguage(LibSrcMLRunner.SrcMLLanguages.SRCML_LANGUAGE_CXX);
                        srcmlArchive.AddUnit(srcmlUnit);
                    }
                }

                srcmlArchive.ArchivePack();
                IntPtr structPtr = srcmlArchive.GetPtrToStruct();
                List<IntPtr> structArrayPtr = new List<IntPtr>();
                structArrayPtr.Add(structPtr);
                IntPtr s = new IntPtr(0);
                try {
                    s = LibSrcMLRunner.SrcmlCreateArchiveMtM(structArrayPtr.ToArray(), structArrayPtr.Count());
                }
                catch (Exception e) {
                    Console.WriteLine("EXCEPTION: {0}", e.Message);
                    Assert.True(false);
                }

                List<String> documents = new List<String>();
                for (int i = 0; i < 1; ++i) {
                    IntPtr docptr = Marshal.ReadIntPtr(s);
                    String docstr = Marshal.PtrToStringAnsi(docptr);
                    Marshal.FreeHGlobal(docptr);
                    documents.Add(docstr);
                    s += Marshal.SizeOf(typeof(IntPtr));
                }

                Assert.False(String.IsNullOrEmpty(documents.ElementAt(0)));
                XDocument doc = XDocument.Parse(documents.ElementAt(0));
                var units = from unit in doc.Descendants(XName.Get("unit", "http://www.srcML.org/srcML/src"))
                            where unit.Attribute("filename") != null
                            select unit;

                string file = "input.cpp";
                var f1 = (from ele in units
                          where ele.Attribute("filename").Value == file
                          select ele);
                Assert.AreEqual("input.cpp", f1.FirstOrDefault().Attribute("filename").Value);

                string file2 = "input2.cpp";
                var f2 = (from ele in units
                          where ele.Attribute("filename").Value == file2
                          select ele);
                Assert.AreEqual("input2.cpp", f2.FirstOrDefault().Attribute("filename").Value);
                Console.WriteLine(s);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Generates srcML from the given string of source code
 /// </summary>
 /// <param name="sources">list of strings of code (each string is a whole file)</param>
 /// <param name="unitFilename">What name to give the unit</param>
 /// <param name="language">The language</param>
 /// <param name="namespaceArguments">additional arguments</param>
 /// <param name="omitXmlDeclaration">If true, the XML header is omitted</param>
 /// <returns>The srcML</returns>
 public ICollection<string> GenerateSrcMLFromStrings(ICollection<string> sources, ICollection<string> unitFilename, Language language, ICollection<UInt32> namespaceArguments, bool omitXmlDeclaration) {
     Contract.Requires(sources.Count == unitFilename.Count);
     try {
         using (Archive srcmlArchive = new Archive()) {
             srcmlArchive.SetArchiveLanguage(LanguageEnumDictionary[language]);
             srcmlArchive.EnableOption(GenerateArguments(namespaceArguments));
             var sourceandfile = sources.Zip(unitFilename, (src, fle) => new { source = src, file = fle });
             foreach (var pair in sourceandfile) {
                 using (Unit srcmlUnit = new Unit()) {
                     if (omitXmlDeclaration) {
                         srcmlArchive.DisableOption(LibSrcMLRunner.SrcMLOptions.SRCML_OPTION_XML_DECL);
                     }
                     srcmlUnit.SetUnitBuffer(pair.source);
                     srcmlUnit.SetUnitFilename(pair.file);
                     srcmlUnit.SetUnitLanguage(LanguageEnumDictionary[language]);
                     srcmlArchive.AddUnit(srcmlUnit);
                 }
             }
             return RunSrcML(srcmlArchive, LibSrcMLRunner.SrcmlCreateArchiveMtM);
         }
     }
     catch (Exception e) {
         throw new SrcMLException(e.Message, e);
     }
 }
Exemplo n.º 4
0
        public void TestCreateSrcMLArchiveMtF() {
            using (Archive srcmlArchive = new Archive()) {
                List<String> bufferList = new List<String>();
                List<String> fileList = new List<String>();

                String str = "int main(){int c; c = 0; ++c;}";
                String str2 = "int foo(){int c; c = 0; ++c;}";

                fileList.Add("input.cpp");
                fileList.Add("input2.cpp");

                bufferList.Add(str);
                bufferList.Add(str2);

                var buffandfile = bufferList.Zip(fileList, (b, f) => new { buf = b, file = f });
                foreach (var pair in buffandfile) {
                    using (Unit srcmlUnit = new Unit()) {
                        srcmlUnit.SetUnitBuffer(pair.buf);
                        srcmlUnit.SetUnitFilename(pair.file);

                        srcmlArchive.SetArchiveLanguage(LibSrcMLRunner.SrcMLLanguages.SRCML_LANGUAGE_CXX);
                        srcmlArchive.AddUnit(srcmlUnit);
                    }
                }
                srcmlArchive.SetOutputFile("output");
                srcmlArchive.ArchivePack();

                IntPtr structPtr = srcmlArchive.GetPtrToStruct();

                List<IntPtr> structArrayPtr = new List<IntPtr>();
                structArrayPtr.Add(structPtr);

                Assert.True(LibSrcMLRunner.SrcmlCreateArchiveMtF(structArrayPtr.ToArray(), structArrayPtr.Count()) == IntPtr.Zero);
                Assert.True(File.Exists("output0.cpp.xml"));

                SrcMLFile srcFile = new SrcMLFile("output0.cpp.xml");
                Assert.IsNotNull(srcFile);

                var files = srcFile.FileUnits.ToList();
                Assert.AreEqual(2, files.Count());


                string file = "input.cpp";
                var f1 = (from ele in files
                          where ele.Attribute("filename").Value == file
                          select ele);
                Assert.AreEqual("input.cpp", f1.FirstOrDefault().Attribute("filename").Value);

                string file2 = "input2.cpp";
                var f2 = (from ele in files
                          where ele.Attribute("filename").Value == file2
                          select ele);
                Assert.AreEqual(file2, f2.FirstOrDefault().Attribute("filename").Value);
            }
        }