public void DoServerAnalysisUpdateBufferFileNotFound()
            {
                var source = new Source { Lines = new[] { "line1", "line2", "line3", "line4" } };

                this.vshelper.Expect(
                    mp => mp.CurrentSelectedDocumentLanguage())
                    .Return("c++");
                this.vshelper.Expect(
                    mp => mp.ActiveFileFullPath())
                    .Return("c:\\src\\file.cpp");
                this.vshelper.Expect(
                    mp => mp.ActiveSolutionPath())
                    .Return("c:\\src");
                this.service.Expect(
                    mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(source);
                var element = new Resource { Date = new DateTime(2000, 1, 1), Key = "resourceKey"};
                this.service.Expect(
                    mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(new List<Resource> { element })
                    .Repeat.Twice();

                this.plugin.Expect(mp => mp.IsSupported(Arg<ConnectionConfiguration>.Is.Anything, Arg<Resource>.Is.Anything)).Return(true).Repeat.Once();
                this.plugin.Expect(
                    mp =>
                    mp.GetResourceKey(
                        Arg<VsProjectItem>.Is.Anything,
                        Arg<string>.Is.Anything)).Return("key").Repeat.Once();

                var data = new ExtensionDataModel(this.service, this.vshelper, null);
                data.AssociatedProject = new Resource { Key = "KEY"};
                data.RefreshDataForResource("c:\\src\\file.cpp");
                Assert.AreEqual("Extension Not Ready", data.ErrorMessage);
                Assert.AreEqual(0, data.GetIssuesInEditor("file").Count);
            }
 /// <summary>
 /// The get lines from source.
 /// </summary>
 /// <param name="sourceSource">
 /// The source source.
 /// </param>
 /// <param name="sep">
 /// The sep.
 /// </param>
 /// <returns>
 /// The System.String.
 /// </returns>
 public static string GetLinesFromSource(Source sourceSource, string sep)
 {
     return sourceSource.Lines.Aggregate(string.Empty, (current, line) => current + (line.Val + sep));
 }
 /// <summary>
 /// The get lines from source.
 /// </summary>
 /// <param name="sourceSource">
 /// The source source.
 /// </param>
 /// <returns>
 /// The System.Collections.Generic.List`1[T -&gt; System.String].
 /// </returns>
 public static List<string> GetLinesFromSource(Source sourceSource)
 {
     return sourceSource.Lines.Select(line => line.Val).ToList();
 }
        public void UpdateSourceDataForResourceWithNewDateDataTest()
        {
            var element = new Resource();
            var newResource = new Resource { Date = DateTime.Now };
            var source1 = new Source();
            var source2 = new Source();

            this.service.Expect(
                mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
                .Return(new List<Resource> { element })
                .Repeat.Once();
            this.service.Expect(
                mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
                .Return(new List<Resource> { newResource });

            this.service.Expect(
                mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
                .Return(source1)
                .Repeat.Once();
            this.service.Expect(
                mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
                .Return(source2);

            var data = new ExtensionDataModel(this.service, this.vshelper, null);
            Assert.AreEqual(source1, data.UpdateSourceDataForResource("resource", false));
            Assert.AreEqual(source2, data.UpdateSourceDataForResource("resource", false));
        }
 public void EnableCoverageInEditor()
 {
     var data = new ExtensionDataModel(this.service, this.vshelper, null);
     var sourceCoverage = new SourceCoverage();
     var source = new Source { Lines = new List<Line> { new Line { Id = 1, Val = "#include bal" }, new Line { Id = 2, Val = "#include bals" } } };
     var element = new Resource { Date = new DateTime(2000, 1, 1) };
     this.service.Expect(
         mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
         .Return(new List<Resource> { element })
         .Repeat.Twice();
     this.service.Expect(
         mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
         .Return(source);
     this.service.Expect(
         mp => mp.GetCoverageInResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Equal("resource")))
         .Return(sourceCoverage);
     element.Key = "resource";
     data.ResourceInEditor = element;
     data.EnableCoverageInEditor = true;
     Assert.IsTrue(data.EnableCoverageInEditor);
     Assert.AreEqual(sourceCoverage, data.CoverageInEditor);
     Assert.AreEqual(element, data.ResourceInEditor);
     Assert.AreEqual(0, data.CoverageInEditor.BranchHits.Count);
     Assert.AreEqual(0, data.CoverageInEditor.LinesHits.Count);
 }
        public void UpdateIssueDataForResourceWithNewDateDataTestWithCache()
        {
            var fileSource = new Source { Lines = new[] { "line1", "line2", "line3", "line4" } };

            var newResource = new Resource { Date = DateTime.Now, Key = "resource" };
            var source1 = new SourceCoverage();
            source1.SetLineCoverageData("1=0;2=3;3=3");
            source1.SetBranchCoverageData("1=0;2=3;3=3", "1=0;2=3;3=3");

            this.service.Expect(
                mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                .Return(new List<Resource> { newResource });

            this.service.Expect(
                mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                .Return(fileSource)
                .Repeat.Once();

            this.service.Expect(
                mp => mp.GetIssuesInResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                .Return(new List<Issue> { new Issue { Severity = "CRITICAL", Line = 1 } })
                .Repeat.Once();

            this.service.Expect(
                mp => mp.GetCoverageInResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                .Return(source1)
                .Repeat.Once();

            this.plugin.Expect(
                mp => mp.GetResourceKey(Arg<VsProjectItem>.Is.Anything, Arg<string>.Is.Anything))
                .Return("resource");

            var data = new ExtensionDataModel(this.service, this.vshelper, null);
            data.AssociatedProject = new Resource { Key = "sonar.com:common" };

            data.RefreshDataForResource("resource");
            Assert.AreEqual(1, data.GetIssuesInEditor("ghfggfgf\r\nghfggfgf\r\nghfggfgf\r\nghfggfgf\r\n").Count);
        }
        /// <summary>
        /// The get lines from source.
        /// </summary>
        /// <param name="sourceSource">
        /// The source source.
        /// </param>
        /// <param name="lineSep">
        /// The line sep.
        /// </param>
        /// <param name="startLine">
        /// The start line.
        /// </param>
        /// <param name="lenght">
        /// The lenght.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string GetLinesFromSource(Source sourceSource, string lineSep, int startLine, int lenght)
        {
            var data = string.Empty;
            for (var i = startLine; i < startLine + lenght; i++)
            {
                data += sourceSource.Lines[i] + lineSep;
            }

            return data;
        }
        /// <summary>
        /// The get difference report.
        /// </summary>
        /// <param name="filePath">
        /// The file Path.
        /// </param>
        /// <param name="sourceInServer">
        /// The in server source.
        /// </param>
        /// <param name="displayWindow">
        /// The display Window.
        /// </param>
        /// <returns>
        /// The <see cref="ArrayList"/>.
        /// </returns>
        public static ArrayList GetDifferenceReport(string filePath, Source sourceInServer, bool displayWindow)
        {
            string lines = GetLinesFromSource(sourceInServer, "\r\n");

            var sLf = new DiffListTextFile(filePath);
            var dLf = new DiffListTextFile(lines, "\r\n");

            var de = new DiffEngine();
            de.ProcessDiff(dLf, sLf, DiffEngineLevel.SlowPerfect);

            if (!displayWindow)
            {
                return de.DiffReport();
            }

            using (var win = new Results(sLf, dLf, de.DiffReport(), 0))
            {
                win.ShowDialog();
            }

            return de.DiffReport();
        }
            public void DoServerAnalysisUpdateBufferFileFound()
            {
                var source = new Source { Lines = new List<Line> { new Line { Id = 1, Val = "#include xpto;" }, new Line { Id = 2, Val = "#include ypto;" } } };

                this.vshelper.Expect(
                    mp => mp.CurrentSelectedDocumentLanguage())
                    .Return("c++");
                this.vshelper.Expect(
                    mp => mp.ActiveFileFullPath())
                    .Return("c:\\src\\file.cpp");
                this.vshelper.Expect(
                    mp => mp.ActiveSolutionPath())
                    .Return("c:\\src");
                this.service.Expect(
                    mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(source);
                var element = new Resource { Date = new DateTime(2000, 1, 1), Key = "resourceKey", Lname = "file.cpp" };
                this.service.Expect(
                    mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(new List<Resource> { element })
                    .Repeat.Times(3);
                this.service.Expect(
                    mp => mp.GetIssuesInResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything, Arg<bool>.Is.Anything))
                    .Return(new List<Issue> { new Issue { Component = "file.cpp", Line = 1, Status = "OPEN" }, new Issue { Component = "file.cpp", Line = 1, Status = "OPEN" } })
                    .Repeat.Once();
                this.pluginController.Expect(
                    mp => mp.GetPluginToRunResource(Arg<string>.Is.Anything))
                    .Return(this.plugin)
                    .Repeat.Once();

                this.plugin.Expect(mp => mp.IsSupported(Arg<string>.Is.Anything)).Return(true).Repeat.Once();
                this.plugin.Expect(mp => mp.GetServerAnalyserExtension()).Return(this.extension).Repeat.Once();
                this.extension.Expect(
                    mp =>
                    mp.GetResourceKey(
                        Arg<string>.Is.Anything,
                        Arg<VsProjectItem>.Is.Anything,
                        Arg<string>.Is.Anything,
                        Arg<string>.Is.Anything)).Return("key").Repeat.Once();

                var data = new ExtensionDataModel(this.service, this.vshelper, null);
                data.PluginController = this.pluginController;
                data.PluginRunningAnalysis = this.plugin;
                data.ServerAnalysis = ExtensionDataModel.AnalysesType.Server;
                data.AssociatedProject = new Resource { Key = "KEY", Lname = "file.cpp"};
                data.UpdateDataInEditor("c:\\src\\file.cpp", "#include xpto;\r\n#include ypto;");
                Assert.AreEqual(string.Empty, data.ErrorMessage);
                Assert.AreEqual(2, data.IssuesInEditor.Count);
                data.UpdateIssuesLocationWithModifiedBuffer("#include xpto;\r\n#include ypto;");
                Assert.AreEqual(string.Empty, data.ErrorMessage);
                Assert.AreEqual(2, data.IssuesInEditor.Count);
            }
            public void DoServerAnalysisUpdateBufferFileNotFound()
            {
                var source = new Source { Lines = new List<Line> { new Line { Id = 1, Val = "#include bal" }, new Line { Id = 2, Val = "#include bals" } } };

                this.vshelper.Expect(
                    mp => mp.CurrentSelectedDocumentLanguage())
                    .Return("c++");
                this.vshelper.Expect(
                    mp => mp.ActiveFileFullPath())
                    .Return("c:\\src\\file.cpp");
                this.vshelper.Expect(
                    mp => mp.ActiveSolutionPath())
                    .Return("c:\\src");
                this.service.Expect(
                    mp => mp.GetSourceForFileResource(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(source);
                var element = new Resource { Date = new DateTime(2000, 1, 1), Key = "resourceKey"};
                this.service.Expect(
                    mp => mp.GetResourcesData(Arg<ConnectionConfiguration>.Is.Anything, Arg<string>.Is.Anything))
                    .Return(new List<Resource> { element })
                    .Repeat.Twice();

                this.plugin.Expect(mp => mp.IsSupported(Arg<string>.Is.Anything)).Return(true).Repeat.Once();
                this.plugin.Expect(mp => mp.GetServerAnalyserExtension()).Return(this.extension).Repeat.Once();
                this.extension.Expect(
                    mp =>
                    mp.GetResourceKey(
                        Arg<string>.Is.Anything,
                        Arg<VsProjectItem>.Is.Anything,
                        Arg<string>.Is.Anything,
                        Arg<string>.Is.Anything)).Return("key").Repeat.Once();

                var data = new ExtensionDataModel(this.service, this.vshelper, null);
                data.ServerAnalysis = ExtensionDataModel.AnalysesType.Server;
                data.AssociatedProject = new Resource { Key = "KEY"};
                data.UpdateDataInEditor("c:\\src\\file.cpp", "#include xpto;\r\n#include ypto;");
                Assert.AreEqual("No plugin installed that supports this file", data.ErrorMessage);
                Assert.AreEqual(0, data.IssuesInEditor.Count);
            }