private static CompilationDatabase CreateCompilationDatabaseForCurrentSolution(bool nonSystemIncludesUseAngleBrackets) { DTE dte = (DTE)VsIdeTestHostContext.ServiceProvider.GetService(typeof(DTE)); Assert.IsNotNull(dte); CompilationDatabase cdb = new CompilationDatabase(); foreach (Project project in dte.Solution.Projects) { List<string> configurationNames = Utility.SolutionUtility.GetConfigurationNames(dte); Assert.IsTrue(configurationNames.Count > 0, "No target configurations found in loaded solution."); List<string> platformNames = Utility.SolutionUtility.GetPlatformNames(dte); Assert.IsTrue(platformNames.Count > 0, "No target platforms found in loaded solution."); SolutionParser.SolutionParser solutionParser = new SolutionParser.SolutionParser(new TestPathResolver()); solutionParser.CreateCompileCommands( project, configurationNames[0], platformNames[0], "c11", null, nonSystemIncludesUseAngleBrackets, (CompileCommand command) => { cdb.AddCompileCommand(command); } ); } return cdb; }
private void TestCompilationDatabaseForSolution(string solutionPath, bool nonSystemIncludesUseAngleBrackets = true) { Assert.IsTrue(File.Exists(solutionPath), "solution path does not exist"); Console.WriteLine("opening solution: " + solutionPath); Helpers.TestUtility.OpenSolution(solutionPath); Console.WriteLine("creating compilation database"); CompilationDatabase output = null; try { output = CreateCompilationDatabaseForCurrentSolution(nonSystemIncludesUseAngleBrackets); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); Console.WriteLine("Stack Trace: " + e.StackTrace); Assert.Fail("Caught an exception while creating compilation database."); } Assert.IsNotNull(output); string cdbPath = Path.ChangeExtension(solutionPath, "json"); if (!nonSystemIncludesUseAngleBrackets) { cdbPath = Path.GetDirectoryName(cdbPath) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(cdbPath) + "_non-system_includes.json"; } if (_updateExpectedOutput) { output.SortAlphabetically(); Console.WriteLine("writing compilation database to file: " + cdbPath); File.WriteAllText(cdbPath, output.SerializeToJson()); Assert.IsTrue(File.Exists(cdbPath)); } else { Console.WriteLine("reading compilation database from file: " + cdbPath); CompilationDatabase expectedOutput = CompilationDatabase.LoadFromFile(cdbPath); Assert.IsNotNull(expectedOutput); Console.WriteLine("comparing generated compilation database to expected output"); Assert.IsTrue(output == expectedOutput, "The created compilation database differs from the expected output"); } Console.WriteLine("closing solution"); Helpers.TestUtility.CloseCurrentSolution(); }
public void TestComparingCompilationDatabaseWithSelfByValueWorks() { CompileCommand command = new CompileCommand(); command.File = "test.cpp"; command.Directory = "./"; command.Command = "D test test.cpp"; CompilationDatabase cdb1 = new CompilationDatabase(); cdb1.AddCompileCommand(command); CompilationDatabase cdb2 = new CompilationDatabase(); cdb2.AddCompileCommand(command); Assert.IsTrue(cdb1 == cdb2); }
public void TestCompilationDatabaseRetainsEscapedQuotesWhenDeserializedAfterSerialization() { CompileCommand command = new CompileCommand(); command.File = "test.cpp"; command.Directory = "./"; command.Command = "D DEFINE=\"value\" test.cpp"; CompilationDatabase originalCompilationDatabase = new CompilationDatabase(); originalCompilationDatabase.AddCompileCommand(command); string serialized = originalCompilationDatabase.SerializeToJson(); CompilationDatabase deserializedCompilationDatabase = new CompilationDatabase(); deserializedCompilationDatabase.DeserializeFromJson(serialized); Assert.IsTrue(deserializedCompilationDatabase == originalCompilationDatabase); }