Esempio n. 1
0
        public void CustomGraphParseDGML()
        {
            string filenameTestOutput  = "testdata/output.dgml";
            string filenameComparision = "testdata/includegraph.dgml";

            string[] noParseDirectories = new[] { Utils.GetExactPathName("testdata/subdir/subdir") };

            IncludeGraph graph = new IncludeGraph();

            graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source0.cpp"), Enumerable.Empty <string>(), noParseDirectories);
            graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source1.cpp"), Enumerable.Empty <string>(), noParseDirectories);

            // Formatting...
            var includeDirectories = new[] { Path.Combine(System.Environment.CurrentDirectory, "testdata") };

            foreach (var item in graph.GraphItems)
            {
                item.FormattedName = IncludeFormatter.FormatPath(item.AbsoluteFilename, FormatterOptionsPage.PathMode.Shortest_AvoidUpSteps, includeDirectories);
            }

            // To DGML and save.
            // Since we don't want to have absolute paths in our compare/output dgml we hack the graph before writing it out.
            var dgml = RemoveAbsolutePathsFromDGML(graph.ToDGMLGraph(), new[] { System.Environment.CurrentDirectory });

            dgml.Serialize(filenameTestOutput);

            string expectedFile = File.ReadAllText(filenameComparision);
            string writtenFile  = File.ReadAllText(filenameTestOutput);

            Assert.AreEqual(expectedFile, writtenFile);

            // For a clean environment!
            File.Delete(filenameTestOutput);
        }
Esempio n. 2
0
        private static IDbScript TranslateGraph(
            IncludeGraph includeGraph, IModelInfoProvider infoProvider, IDbObjectFactory dbFactory, UniqueNameGenerator nameGenerator)
        {
            TranslateGraphNode(includeGraph.Root, infoProvider, dbFactory, nameGenerator);

            return(includeGraph.GetScript(dbFactory));
        }
        public void IncludeFolderGrouping()
        {
            IncludeGraph graph      = new IncludeGraph();
            string       sourceFile = Utils.GetExactPathName("testdata/source0.cpp");

            graph.AddIncludesRecursively_ManualParsing(sourceFile, Enumerable.Empty <string>(), new string[] { });

            var root     = new IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Root(graph.GraphItems, graph.CreateOrGetItem(sourceFile, out bool isNew));
            var children = root.Children;

            // Check if tree is as expected.
            {
                Assert.AreEqual(2, children.Count);

                var unresolvedFolder = children.First(x => x.Name == "<unresolved>");
                Assert.IsNotNull(unresolvedFolder);
                Assert.IsInstanceOfType(unresolvedFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder));

                var subdirFolder = children.First(x => x.Name.EndsWith("testdata\\subdir\\"));
                Assert.IsTrue(Path.IsPathRooted(subdirFolder.Name));
                Assert.IsNotNull(unresolvedFolder);
                Assert.IsInstanceOfType(unresolvedFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder));

                // subdir folder
                {
                    Assert.AreEqual(3, subdirFolder.Children.Count);

                    var testinclude = subdirFolder.Children.First(x => x.Name == "testinclude.h");
                    Assert.IsNotNull(testinclude);
                    Assert.IsInstanceOfType(testinclude, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf));

                    var inline = subdirFolder.Children.First(x => x.Name == "inline.inl");
                    Assert.IsNotNull(inline);
                    Assert.IsInstanceOfType(inline, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf));

                    var subdirsubdirFolder = subdirFolder.Children.First(x => x.Name == "subdir\\");
                    Assert.IsNotNull(subdirsubdirFolder);
                    Assert.IsInstanceOfType(subdirsubdirFolder, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Folder));

                    // subdir\subdir folder
                    {
                        Assert.AreEqual(1, subdirsubdirFolder.Children.Count);

                        var subsubh = subdirsubdirFolder.Children.First(x => x.Name == "subsub.h");
                        Assert.IsNotNull(subsubh);
                        Assert.IsInstanceOfType(subsubh, typeof(IncludeToolbox.GraphWindow.FolderIncludeTreeViewItem_Leaf));
                    }
                }
            }
        }
        public void CustomGraphParse()
        {
            string[] noParseDirectories = new[] { Utils.GetExactPathName("testdata/subdir/subdir") };

            IncludeGraph graph = new IncludeGraph();

            graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source0.cpp"), Enumerable.Empty <string>(), noParseDirectories);
            graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/source1.cpp"), Enumerable.Empty <string>(), noParseDirectories);
            graph.AddIncludesRecursively_ManualParsing(Utils.GetExactPathName("testdata/testinclude.h"), Enumerable.Empty <string>(), noParseDirectories); // Redundancy shouldn't matter.

            // Check items.
            Assert.AreEqual(7, graph.GraphItems.Count);
            bool newItem = false;
            var  source0 = graph.CreateOrGetItem("testdata/source0.cpp", out newItem);

            Assert.AreEqual(false, newItem);
            var source1 = graph.CreateOrGetItem("testdata/source1.cpp", out newItem);

            Assert.AreEqual(false, newItem);
            var testinclude = graph.CreateOrGetItem("testdata/testinclude.h", out newItem);

            Assert.AreEqual(false, newItem);
            var subdir_testinclude = graph.CreateOrGetItem("testdata/subdir/teStinclude.h", out newItem);

            Assert.AreEqual(false, newItem);
            var subdir_inline = graph.CreateOrGetItem("testdata/subdir/inline.inl", out newItem);

            Assert.AreEqual(false, newItem);
            var subdirsubdir_subsub = graph.CreateOrGetItem("testdata/subdir/subdir/subsub.h", out newItem);

            Assert.AreEqual(false, newItem);
            var broken = graph.CreateOrGetItem("broken!", out newItem);

            Assert.AreEqual(false, newItem);

            // Check includes in source0.
            Assert.AreEqual(2, source0.Includes.Count);
            Assert.AreEqual(0, source0.Includes[0].IncludeLine.LineNumber);        // Different line numbers.
            Assert.AreEqual(5, source0.Includes[1].IncludeLine.LineNumber);
            Assert.AreEqual(subdir_testinclude, source0.Includes[0].IncludedFile); // But point to the same include.
            Assert.AreEqual(subdir_testinclude, source0.Includes[1].IncludedFile);

            // Check includes in source1.
            Assert.AreEqual(1, source1.Includes.Count);
            Assert.AreEqual(testinclude, source1.Includes[0].IncludedFile);

            // Check includes in testinclude.
            Assert.AreEqual(1, testinclude.Includes.Count);
            Assert.AreEqual(subdir_testinclude, testinclude.Includes[0].IncludedFile);

            // Check includes in subdir_testinclude.
            Assert.AreEqual(2, subdir_testinclude.Includes.Count);
            Assert.AreEqual(subdir_inline, subdir_testinclude.Includes[0].IncludedFile);
            Assert.AreEqual(subdirsubdir_subsub, subdir_testinclude.Includes[1].IncludedFile);

            // Check includes in subdir_inline.
            Assert.AreEqual(1, subdir_inline.Includes.Count);
            Assert.AreEqual(broken, subdir_inline.Includes[0].IncludedFile);
            Assert.AreEqual(true, subdir_inline.Includes[0].IncludeLine.ContainsActiveInclude);

            // Check includes in subdirsubdir_subsub - should be empty since we have this dir on the ignore list.
            Assert.AreEqual(0, subdirsubdir_subsub.Includes.Count);

            // Check item representing a unresolved include.
            Assert.AreEqual(0, broken.Includes.Count);
        }
Esempio n. 5
0
        public static IDbScript Translate(
            Expression exp, IModelInfoProvider infoProvider, IDbObjectFactory dbFactory, out IncludeGraph includeGraph,
            AbstractMethodTranslator[] addons = null)
        {
            includeGraph = IncludeGraphBuilder.Build(exp);

            var script = TranslateGraph(includeGraph, infoProvider, dbFactory, new UniqueNameGenerator(), addons);

            if (Logger.IsDebugEnabled)
            {
                Logger.Debug(Tuple.Create(exp, script.ToString()));
            }

            return(script);
        }
Esempio n. 6
0
 public LinqExecutor(IncludeGraph graph, IDbScript script)
 {
     _graph = graph;
     Script = script;
 }
Esempio n. 7
0
 public LinqExecutor(IncludeGraph graph, IDbScript script, DbContext dtx)
 {
     _graph = graph;
     _dtx   = dtx;
     Script = script;
 }