Ejemplo n.º 1
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);
            }
        }