Exemple #1
0
		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;
		}
Exemple #2
0
        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();
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }