Пример #1
0
        public void CanRenderProblemsToHTMLFile(string relativeSlnPath)
        {
            var slnPath  = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);

            var problemDetector = DIRegistrar.GetInstance <ProblemDetectorService>();
            var problems        = problemDetector.DetectAllSolutionProblems(solution);

            var outFile = new FileInfo("testout.html");

            if (outFile.Exists)
            {
                outFile.Delete();
            }

            var renderer = new HTMLProblemRenderer(outFile);
            var output   = new CommandOutput();

            output.DetectedProblems.AddRange(problems);

            renderer.RenderOutput(output);

            var fileText = File.ReadAllText(outFile.FullName);

            Assert.That(fileText.Contains(@"<span class='Highlighted'>Newtonsoft.Json</span>"));
        }
Пример #2
0
        public void CanReadProjectAssemblyFilename(string relativeCsProjPath, string assemblyName)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();

            Assert.AreEqual(assemblyName, service.ExtractAssemblyName(new DotNetXMLDoc(csProjPath)));
        }
Пример #3
0
        public void CanReadDotNetVersionOfProject(string relativeCsProjPath, string expectedVersion)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();
            var proj       = service.ReadProject(csProjPath);

            Assert.AreEqual(expectedVersion, proj.DotNetVersion.ToString());
        }
        public void CanBuildProjectGraphFromSolution(string relativeSlnPath, int expectedProjects)
        {
            var slnFile  = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnFile);
            var graph    = DIRegistrar.GetInstance <IProjectGraphBuilder>().BuildGraph(solution);

            Assert.AreEqual(expectedProjects, graph.SolutionProjects.Count);
        }
Пример #5
0
        public void CanReadProjectReferences(string relativeCsProjPath, string expectedReference)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();
            var proj       = service.ReadProject(csProjPath);
            var reference  = proj.ProjectReferences.FirstOrDefault(rf => rf.RelativePath == expectedReference);

            Assert.IsNotNull(reference);
        }
Пример #6
0
        public void CanReadNumberOfProjectsInSolution(string relativeSlnPath, int expectedProjects)
        {
            var slnPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var service = new SolutionReader(new EmptyProjectReader());

            var sln = service.ReadSolution(slnPath);

            Assert.AreEqual(expectedProjects, sln.Projects.Length);
        }
Пример #7
0
        public void CanDetectVersionOfFileReferenceFromPath(string relativeCsProjPath, string reference, string expectedFileVersion)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();
            var proj       = service.ReadProject(csProjPath);

            var fileRef = proj.FileReferences.FirstOrDefault(r => r.Include.ID == reference);

            Assert.AreEqual(expectedFileVersion, fileRef.Version.ToString());
        }
Пример #8
0
        public void CanReadFileReferences(string relativeCsProjPath, string expectedReference)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();
            var proj       = service.ReadProject(csProjPath);

            var dependency = proj.FileReferences.FirstOrDefault(fr => fr.RelativePath.EndsWith(expectedReference));

            Assert.IsNotNull(dependency);
        }
        public void CanFindAllProblemsWithSolution(string relativeSlnPath, int expectedNumberOfProblems)
        {
            var slnPath  = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);

            var problemDetector = DIRegistrar.GetInstance <ProblemDetectorService>();
            var problems        = problemDetector.DetectAllSolutionProblems(solution);

            Assert.AreEqual(expectedNumberOfProblems, problems.Length);
        }
Пример #10
0
        public void AllFileReferencesHavePaths(string relativeCsProjPath)
        {
            var csProjPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeCsProjPath);
            var service    = DIRegistrar.GetInstance <IProjectReader>();
            var proj       = service.ReadProject(csProjPath);


            foreach (var file in proj.FileReferences)
            {
                Assert.IsNotNull(file.GetFile());
            }
        }
        public void CanIdentifyMissingProjectFiles(string relativeSlnPath, string missingProjectName)
        {
            var slnPath = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var service = new SolutionReader(new EmptyProjectReader());
            var sln     = service.ReadSolution(slnPath);

            var missingProjectDetector = new MissingProjectDetector();

            var problem = missingProjectDetector.DetectProblems(sln).FirstOrDefault() as MissingProject;

            Assert.AreEqual(missingProjectName, problem.Project.Name);
        }
        public void CanDetectSameDLLReferencedInDifferentPaths(string relativeSlnPath)
        {
            var slnPath      = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution     = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);
            var graphBuilder = DIRegistrar.GetInstance <IProjectGraphBuilder>();
            var graph        = graphBuilder.BuildGraph(solution);

            var detector = new FileReferencedInMultipleWaysDetector();
            var problem  = detector.DetectProblems(graph).First();

            Assert.That(problem.Description.ToString().StartsWith("The file Newtonsoft.Json is referenced in multiple paths"));
        }
        public void CanDetectFileReferenceWhereProjectReferenceIsMoreAppropriate(string relativeSlnPath, string project)
        {
            var slnPath      = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution     = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);
            var graphBuilder = DIRegistrar.GetInstance <IProjectGraphBuilder>();
            var graph        = graphBuilder.BuildGraph(solution);
            var projectNode  = graph.AllNodes.Values.Single(p => p.Project.Name == project);

            var detector = new FileReferenceInsteadOfProjectReferenceDetector();
            var problem  = detector.DetectProblems(projectNode).First();

            Assert.AreEqual("Project FirstProject has a file reference instead of a project reference to AnotherProject", problem.Description.ToString());
        }
        public void CanDetectProjectDependingOnHigherDotNetVersion(string relativeSlnPath, string project)
        {
            var slnPath      = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution     = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);
            var graphBuilder = DIRegistrar.GetInstance <IProjectGraphBuilder>();
            var graph        = graphBuilder.BuildGraph(solution);
            var projectNode  = graph.AllNodes.Values.Single(p => p.Project.Name == project);

            var dependsOnHigherFrameworkDetector = new DependsOnIncompatibleFrameworkDetector();
            var problem = dependsOnHigherFrameworkDetector.DetectProblems(projectNode).First();

            Assert.AreEqual(typeof(DependsOnIncompatibleFramework), problem.GetType());
        }
        public void CheckFileEquality(string filePath1, string filePath2, bool shouldBeEqual)
        {
            var file1 = TestPaths.GetVerifiedFileRelativeToProjectDir(filePath1);
            var file2 = TestPaths.GetVerifiedFileRelativeToProjectDir(filePath2);

            if (shouldBeEqual)
            {
                Assert.AreEqual(file1, file2);
                Assert.That(file1 == file2);
            }
            else
            {
                Assert.AreNotEqual(file1, file2);
                Assert.That(file1 != file2);
            }
        }
Пример #16
0
        public void CanRenderProblemsToConsole(string relativeSlnPath)
        {
            var slnPath  = TestPaths.GetVerifiedFileRelativeToProjectDir(relativeSlnPath);
            var solution = DIRegistrar.GetInstance <ISolutionReader>().ReadSolution(slnPath);

            var problemDetector = DIRegistrar.GetInstance <ProblemDetectorService>();
            var problems        = problemDetector.DetectAllSolutionProblems(solution);

            var renderer = new ConsoleProblemRenderer();

            var stringBuilder = new StringBuilder();

            var output = new CommandOutput();

            output.DetectedProblems.AddRange(problems);

            using (var writer = new StringWriter(stringBuilder))
            {
                Console.SetOut(writer);
                renderer.RenderOutput(output);

                Assert.That(stringBuilder.ToString().Contains("Multiple versions of Newtonsoft.Json exist"));
            }
        }