示例#1
0
        public void Should_find_usages_in_same_file() {
            const string editorText =
@"
public class BaseClass {}
public class DerivedClassA : BaseClass {}
public class DerivedClassB : BaseClass {}
public class DerivedClassC : BaseClass {}
";

            var fileName = "test.cs";
            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText, fileName: fileName);
            solution.Projects.Add(project);

            var handler = new GotoImplementationHandler
                (solution, new BufferParser(solution));
            var request = new GotoImplementationRequest
                { Buffer   = editorText
                , Line     = 2
                , Column   = 14 // At word 'BaseClass'
                , FileName = fileName};
            var gotoImplementationResponse = handler.FindDerivedMembersAsQuickFixes(request);

            var quickFixes = gotoImplementationResponse.QuickFixes.ToArray();
            Assert.AreEqual(3, quickFixes.Length);
            quickFixes[0].Text.Trim().ShouldEqual("public class DerivedClassA : BaseClass {}");
            quickFixes[1].Text.Trim().ShouldEqual("public class DerivedClassB : BaseClass {}");
            quickFixes[2].Text.Trim().ShouldEqual("public class DerivedClassC : BaseClass {}");
        }
示例#2
0
        private void AddReferencesToProjects(IEnumerable <ProjectReference> projectReferences)
        {
            var solution     = FakeSolution.LoadOrCreate(Platform, AppModel, Language, FakeGenShellHelper.SolutionPath);
            var projectGuids = solution.GetProjectGuids();

            var groupedReferences = projectReferences.GroupBy(n => n.Project, n => n);

            foreach (var project in groupedReferences)
            {
                var parentProject = FakeMsBuildProject.Load(project.Key);

                foreach (var referenceToAdd in project)
                {
                    var referenceProject = FakeMsBuildProject.Load(referenceToAdd.ReferencedProject);

                    var name = referenceProject.Name;
                    var guid = projectGuids[name];
                    if (guid == "{}")
                    {
                        guid = "{" + Guid.NewGuid().ToString() + "}";
                    }

                    parentProject.AddProjectReference(referenceToAdd.ReferencedProject, guid, name);
                }

                parentProject.Save();
            }
        }
        public void ShouldNotAddNonCSharpFile()
        {
            var project = new FakeProject(fileName: @"c:\test\code\fake.csproj");

            var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>");

            project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>");

            project.AddFile("some content", @"c:\test\code\foo.txt");

            var solution = new FakeSolution(@"c:\test\fake.sln");

            solution.Projects.Add(project);

            var request = new AddToProjectRequest
            {
                FileName = @"c:\test\code\foo.txt"
            };

            var handler = new AddToProjectHandler(solution, new FakeWindowsFileSystem());

            handler.AddToProject(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
示例#4
0
        static QuickFixResponse FindDerivedMembersAsQuickFixes(FakeSolution solution, GotoImplementationRequest request)
        {
            var handler = new GotoImplementationHandler(solution, new BufferParser(solution), new ProjectFinder(solution));
            var gotoImplementationResponse = handler.FindDerivedMembersAsQuickFixes(request);

            return(gotoImplementationResponse);
        }
        public void ShouldRemoveItemGroupWhenRemovingLastFile()
        {
			XNamespace ns = "http://schemas.microsoft.com/developer/msbuild/2003";
            var project = new FakeProject(fileName: @"c:\test\code\fake.csproj");
            project.AddFile("some content", @"c:\test\code\test.cs");

            var xml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>";

            project.XmlRepresentation = XDocument.Parse(xml);

            var solution = new FakeSolution(@"c:\test\fake.sln");
            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);
            handler.RemoveFromProject(request);

			project.AsXml().Descendants(ns + "ItemGroup").Count().ShouldEqual(0);
        }
        public void ShouldRemoveFileFromProjectXml()
        {
            var project = new FakeProject(fileName: @"c:\test\code\fake.csproj");
            project.AddFile("some content", @"c:\test\code\test.cs");

            var xml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Hello.cs""/>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>";

            project.XmlRepresentation = XDocument.Parse(xml);
            var expectedXml = XDocument.Parse(@"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Hello.cs""/>
                    </ItemGroup>
                </Project>");

            var solution = new FakeSolution(@"c:\test\fake.sln");
            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);
            handler.RemoveFromProject(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
示例#7
0
        public void Should_find_usages_of_class()
        {
            const string editorText = 
@"public class myclass
{
    public void method() { }

    public void method_calling_method()
    {
        method();        
    }
}
";
            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add(project);

            var handler = new FindUsagesHandler (new OmniSharp.Parser.BufferParser (solution), solution, new ProjectFinder(solution));
            var usages = handler.FindUsages (new FindUsagesRequest { 
                FileName = "myfile",
                Line = 3,
                Column = 21,
                Buffer = editorText
            }).QuickFixes.ToArray();

            usages.Length.ShouldEqual(2);
            usages[0].Text.Trim().ShouldEqual("public void method() { }");
            usages[1].Text.Trim().ShouldEqual("method();");
        }
        public void ShouldRemoveItemGroupWhenRemovingLastFile()
        {
            XNamespace ns      = "http://schemas.microsoft.com/developer/msbuild/2003";
            var        project = new FakeProject(fileName: @"c:\test\code\fake.csproj");

            project.AddFile("some content", @"c:\test\code\test.cs");

            var xml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>";

            project.XmlRepresentation = XDocument.Parse(xml);

            var solution = new FakeSolution(@"c:\test\fake.sln");

            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);

            handler.RemoveFromProject(request);

            project.AsXml().Descendants(ns + "ItemGroup").Count().ShouldEqual(0);
        }
示例#9
0
        public void Should_find_usages_in_same_file()
        {
            const string editorText =
                @"
public class BaseClass {}
public class DerivedClassA : BaseClass {}
public class DerivedClassB : BaseClass {}
public class DerivedClassC : BaseClass {}
";

            var fileName = "test.cs";
            var solution = new FakeSolution();
            var project  = new FakeProject();

            project.AddFile(editorText, fileName);
            solution.Projects.Add(project);

            var handler = new GotoImplementationHandler
                              (solution, new BufferParser(solution), new ProjectFinder(solution));
            var request = new GotoImplementationRequest
            {
                Buffer     = editorText
                , Line     = 2
                , Column   = 14 // At word 'BaseClass'
                , FileName = fileName
            };
            var gotoImplementationResponse = handler.FindDerivedMembersAsQuickFixes(request);

            var quickFixes = gotoImplementationResponse.QuickFixes.ToArray();

            Assert.AreEqual(3, quickFixes.Length);
            quickFixes[0].Text.Trim().ShouldEqual("public class DerivedClassA : BaseClass {}");
            quickFixes[1].Text.Trim().ShouldEqual("public class DerivedClassB : BaseClass {}");
            quickFixes[2].Text.Trim().ShouldEqual("public class DerivedClassC : BaseClass {}");
        }
示例#10
0
        public void Should_find_usages_of_class()
        {
            const string editorText =
                @"public class myclass
{
    public void method() { }

    public void method_calling_method()
    {
        method();        
    }
}
";
            var solution = new FakeSolution();
            var project  = new FakeProject();

            project.AddFile(editorText);
            solution.Projects.Add(project);

            var handler = new FindUsagesHandler(new OmniSharp.Parser.BufferParser(solution), solution, new ProjectFinder(solution));
            var usages  = handler.FindUsages(new FindUsagesRequest {
                FileName = "myfile",
                Line     = 3,
                Column   = 21,
                Buffer   = editorText
            }).QuickFixes.ToArray();

            usages.Length.ShouldEqual(2);
            usages[0].Text.Trim().ShouldEqual("public void method() { }");
            usages[1].Text.Trim().ShouldEqual("method();");
        }
        public void ShouldRemoveFileFromProject()
        {
            var project = new FakeProject(fileName: @"c:\test\code\fake.csproj");

            project.AddFile("some content", @"c:\test\code\test.cs");

            var xml = @"
                <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                    <ItemGroup>
                        <Compile Include=""Test.cs""/>
                    </ItemGroup>
                </Project>";

            project.XmlRepresentation = XDocument.Parse(xml);

            var solution = new FakeSolution(@"c:\test\fake.sln");

            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);

            handler.RemoveFromProject(request);

            project.Files.ShouldBeEmpty();
        }
示例#12
0
        public void Should_find_usages_of_class()
        {
            const string editorText = 
@"public class myclass
{
    public void method() { }

    public void method_calling_method()
    {
        method();        
    }
}
";
            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add(project);

            var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution));
            var browser = new Browser(bootstrapper);

            var result = browser.Post("/findusages", with =>
            {
                with.HttpRequest();
                with.FormValue("FileName", "myfile");
                with.FormValue("Line", "3");
                with.FormValue("Column", "21");
                with.FormValue("Buffer", editorText);
            });

            var usages = result.Body.DeserializeJson<FindUsagesResponse>().Usages.ToArray();
            usages.Count().ShouldEqual(2);
            usages[0].Text.Trim().ShouldEqual("public void method() { }");
            usages[1].Text.Trim().ShouldEqual("method();");
        }
示例#13
0
        public void ShouldRemoveFileFromProjectXml()
        {
            var xml     = @"
               <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                   <ItemGroup>
                       <Compile Include=""Hello.cs""/>
                       <Compile Include=""Test.cs""/>
                   </ItemGroup>
               </Project>";
            var project = GetProject(xml, @"c:\test\code\fake1.csproj");

            var expectedXml = XDocument.Parse(@"
               <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                   <ItemGroup>
                       <Compile Include=""Hello.cs""/>
                   </ItemGroup>
               </Project>");

            var solution = new FakeSolution(@"c:\test\fake.sln");

            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);

            handler.RemoveFromProject(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
示例#14
0
 public BrowseObjectExtenderTest()
 {
     this.dte          = new FakeDte();
     this.solution     = new FakeSolution(this.dte);
     this.project      = new FakeProject(this.solution);
     this.projectItem  = new FakeProjectItem(this.project);
     this.extenderSite = new StubExtenderSite();
 }
        void CreateTestProject()
        {
            var solution = new FakeSolution(@"c:\projects\Test\MyProject\MySolution.sln");

            solution.BaseDirectory = @"c:\projects\Test\MyProject";
            project = new FakeProject();
            project.ParentSolution = solution;
        }
 public CustomToolParameterTest()
 {
     this.dte         = new FakeDte();
     this.solution    = new FakeSolution(this.dte);
     this.project     = new FakeProject(this.solution);
     this.projectItem = new FakeProjectItem(this.project);
     this.parent      = new CustomToolParameters(this.dte, this.project, this.projectItem.Id);
 }
示例#17
0
        void CreateTestProject()
        {
            testProject = ProjectHelper.CreateTestProject();
            var solution = new FakeSolution {
                BaseDirectory = @"c:\projects\MyProject\".ToNativePath()
            };

            testProject.ParentSolution = solution;
        }
 public CustomToolParametersTest()
 {
     this.dte = new FakeDte();
     this.dte.AddService(typeof(TemplateLocator), new FakeTemplateLocator(), false);
     this.dte.AddService(typeof(STextTemplating), new FakeTextTemplatingService(), false);
     this.solution    = new FakeSolution(this.dte);
     this.project     = new FakeProject(this.solution);
     this.projectItem = new FakeProjectItem(this.project);
 }
示例#19
0
 void CreateProject(string name, string fileName = @"d:\projects\MyProject\MyProject.csproj")
 {
     packageManagementEvents = new PackageManagementEvents();
     logger   = new PackageManagementLogger(packageManagementEvents);
     solution = new FakeSolution();
     project  = new FakeDotNetProject(fileName.ToNativePath());
     project.ParentSolution = solution;
     project.Name           = name;
 }
示例#20
0
 void CreateProject()
 {
     solutionManager = new FakeSolutionManager();
     fakeSolution    = new FakeSolution();
     CreateNuGetProject();
     fakeDotNetProject = new FakeDotNetProject(dotNetProject.FileName);
     fakeDotNetProject.ParentSolution = fakeSolution;
     fakeDotNetProject.DotNetProject  = dotNetProject;
     fakeSolution.Projects.Add(fakeDotNetProject);
 }
示例#21
0
        FakeDotNetProject LoadSolutionWithOneProject()
        {
            solution = new FakeSolution();
            projectService.OpenSolution = solution;
            var project = new FakeDotNetProject();

            projectService.OpenProjects.Add(project);
            solution.Projects.Add(project);
            projectService.RaiseSolutionLoadedEvent();

            return(project);
        }
        public void FileName_SolutionHasFileName_ReturnsSolutionFileName()
        {
            CreateSolution();
            string expectedFileName = @"d:\projects\myproject\Project.sln".ToNativePath();
            var    solution         = new FakeSolution(expectedFileName);

            fakeProjectService.OpenSolution = solution;

            string fileName = this.solution.FileName;

            Assert.AreEqual(expectedFileName, fileName);
        }
        public void GetRepository_OpenSolution_ReturnsRepositoryForSolution()
        {
            CreateSolution();
            var fakeSolution = new FakeSolution(@"d:\projects\MyProject\MySolution.sln");

            fakeProjectService.OpenSolution = fakeSolution;

            ISolutionPackageRepository repository = solution.GetRepository();

            Assert.IsNotNull(repository);
            Assert.AreEqual(fakeSolutionPackageRepositoryFactory.SolutionPassedToCreateSolutionPackageRepository, fakeSolution);
            Assert.AreEqual(fakeSolutionPackageRepositoryFactory.FakeSolutionPackageRepository, repository);
        }
示例#24
0
        public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound()
        {
            var project = new FakeProject(fileName: @"/test/code/fake.csproj");
            var solution = new FakeSolution(@"/test/fake.sln");
            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);
            handler.RemoveFromProject(request);
        }
示例#25
0
        public OutputFileManagerTest()
        {
            this.dte                  = new FakeDte();
            this.solution             = new FakeSolution(this.dte);
            this.project              = new FakeProject(this.solution);
            this.projectItem          = new FakeProjectItem(this.project);
            this.textTemplating       = new FakeTextTemplating();
            this.queryEditQuerySave   = new StubIVsQueryEditQuerySave();
            this.runningDocumentTable = new StubIVsRunningDocumentTable();

            this.dte.AddService(typeof(STextTemplating), this.textTemplating, false);
            this.dte.AddService(typeof(SVsQueryEditQuerySave), this.queryEditQuerySave, false);
            this.dte.AddService(typeof(SVsRunningDocumentTable), this.runningDocumentTable, false);
        }
示例#26
0
        public Guid GetProjectGuidByName(string projectName)
        {
            var projectFileName = FindProject(GenContext.Current.DestinationPath);
            var msbuildProj     = FakeMsBuildProject.Load(projectFileName);
            var guid            = msbuildProj.Guid;

            if (string.IsNullOrEmpty(guid))
            {
                var solution = FakeSolution.LoadOrCreate(Platform, AppModel, Language, FakeGenShellHelper.SolutionPath);
                guid = solution.GetProjectGuids().First(p => p.Key == projectName).Value;
            }

            Guid.TryParse(guid, out Guid parsedGuid);
            return(parsedGuid);
        }
        public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound()
        {
            var project  = GetProject("<xml/>");
            var solution = new FakeSolution(@"/test/fake.sln");

            solution.Projects.Add(project);

            var request = new AddToProjectRequest {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new AddToProjectHandler(solution, new FakeUnixFileSystem());

            handler.AddToProject(request);
        }
示例#28
0
        FakeDotNetProject LoadSolutionWithOneProject()
        {
            solutionCount++;
            string fileName = String.Format(@"d:\projects\MySolution\MySolution{0}.sln", solutionCount);

            solution = new FakeSolution(fileName);
            projectService.OpenSolution = solution;
            var project = new FakeDotNetProject();

            projectService.OpenProjects.Add(project);
            solution.Projects.Add(project);
            projectService.RaiseSolutionLoadedEvent(solution);

            return(project);
        }
示例#29
0
        public void AddContextItemsToSolution(ProjectInfo projectInfo)
        {
            var filesByProject = ProjectHelper.ResolveProjectFiles(projectInfo.ProjectItems);

            var filesForExistingProjects  = filesByProject.Where(k => !projectInfo.Projects.Any(p => p == k.Key));
            var nugetsForExistingProjects = projectInfo.NugetReferences.Where(n => !projectInfo.Projects.Any(p => p == n.Project)).GroupBy(n => n.Project, n => n);
            var sdksForExistingProjects   = projectInfo.SdkReferences.Where(n => !projectInfo.Projects.Any(p => p == n.Project)).GroupBy(n => n.Project, n => n);

            foreach (var files in filesForExistingProjects)
            {
                if (!IsCpsProject(files.Key))
                {
                    AddItems(files.Key, files.Value);
                }
            }

            foreach (var project in nugetsForExistingProjects)
            {
                AddNugetsForProject(project.Key, project);
            }

            foreach (var sdk in sdksForExistingProjects)
            {
                AddSdksForProject(sdk.Key, sdk);
            }

            foreach (var project in projectInfo.Projects)
            {
                var msbuildProj  = FakeMsBuildProject.Load(project);
                var solutionFile = FakeSolution.LoadOrCreate(Platform, AppModel, Language, FakeGenShellHelper.SolutionPath);

                var projectRelativeToSolutionPath = project.Replace(Path.GetDirectoryName(FakeGenShellHelper.SolutionPath) + Path.DirectorySeparatorChar, string.Empty);

                var projGuid = !string.IsNullOrEmpty(msbuildProj.Guid) ? msbuildProj.Guid : Guid.NewGuid().ToString();

                solutionFile.AddProjectToSolution(Platform, AppModel, Language, msbuildProj.Name, projGuid, projectRelativeToSolutionPath, IsCpsProject(project), HasPlatforms(project));

                if (!IsCpsProject(project) && filesByProject.ContainsKey(project))
                {
                    AddItems(project, filesByProject[project]);
                }

                AddNugetsForProject(project, projectInfo.NugetReferences.Where(n => n.Project == project));
                AddSdksForProject(project, projectInfo.SdkReferences.Where(n => n.Project == project));
            }

            AddReferencesToProjects(projectInfo.ProjectReferences);
        }
        public void ShouldThrowProjectNotFoundExceptionForOrphanProject()
        {
            var solution = new FakeSolution(@"/test/fake.sln");
            var project  = new OrphanProject(new FileSystem(), new Logger(Verbosity.Quiet));

            project.Files.Add(new CSharpFile(project, "/test/folder/Test.cs", "Some content..."));
            solution.Projects.Add(project);

            var request = new AddToProjectRequest {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new AddToProjectHandler(solution, new FakeUnixFileSystem());

            handler.AddToProject(request);
        }
        public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound()
        {
            var project  = new FakeProject(fileName: @"/test/code/fake.csproj");
            var solution = new FakeSolution(@"/test/fake.sln");

            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);

            handler.RemoveFromProject(request);
        }
        public void ProjectModified_TwoSolutionsLoadedFirstSolutionUnloadedProjectTargetFrameworkChangedInFirstAndSecondSolution_EventFiresForProjectInOpenSolutionOnly()
        {
            CreateProjectTargetFrameworkMonitor();
            FakeDotNetProject firstProject  = LoadSolutionWithOneProject();
            FakeSolution      firstSolution = new FakeSolution(solution.FileName);

            projectService.OpenProjects.Clear();
            FakeDotNetProject secondProject = LoadSolutionWithOneProject();

            CaptureProjectTargetFrameworkChangedEvents();
            UnloadSolution(firstSolution);

            firstProject.RaiseModifiedEvent(firstProject, targetFrameworkPropertyName);
            secondProject.RaiseModifiedEvent(secondProject, targetFrameworkPropertyName);

            Assert.AreEqual(1, eventArgs.Count);
            Assert.AreEqual(secondProject, eventArgs [0].Project);
        }
示例#33
0
        void CreateUpdatedPackagesInWorkspace()
        {
            updatedPackagesInWorkspace = new TestableUpdatedNuGetPackagesInWorkspace();
            taskRunner = updatedPackagesInWorkspace.TaskRunner;
            packageManagementEvents = updatedPackagesInWorkspace.PackageManagementEvents;
            solution = new FakeSolution();

            var metadataResourceProvider = new FakePackageMetadataResourceProvider();

            packageMetadataResource = metadataResourceProvider.PackageMetadataResource;
            var source    = new PackageSource("http://test.com");
            var providers = new INuGetResourceProvider[] {
                metadataResourceProvider
            };
            var sourceRepository = new SourceRepository(source, providers);

            taskRunner.SolutionManager.SourceRepositoryProvider.Repositories.Add(sourceRepository);
        }
        public void ShouldNotAddFileToProjectWhenAlreadyExists()
        {
            var project     = GetProject(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""Test.cs""/></ItemGroup></Project>");
            var expectedXml = project.AsXml();

            var solution = new FakeSolution(@"c:\test\fake.sln");

            solution.Projects.Add(project);

            var request = new AddToProjectRequest {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new AddToProjectHandler(solution, new FakeWindowsFileSystem());

            handler.AddToProject(request);
            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
示例#35
0
        private static Error[] GetErrors(string editorText)
        {
            var fileName = "test.cs";
            var solution = new FakeSolution();
            var project  = new FakeProject();

            project.AddFile(editorText, fileName);
            solution.Projects.Add(project);

            var handler = new SemanticErrorsHandler(solution);
            var request = new Request
            {
                Buffer   = editorText,
                FileName = fileName,
            };
            var semanticErrorsResponse = handler.FindSemanticErrors(request);

            return(semanticErrorsResponse.Errors.ToArray());
        }
示例#36
0
        public void Should_complete_string()
        {
            string       editorText     = @"
public class myclass
{
    public void method()
    {
        string s;
        s.$;
    }
}
";
            int          cursorOffset   = editorText.IndexOf("$", StringComparison.Ordinal);
            TextLocation cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset);
            string       partialWord    = GetPartialWord(editorText);

            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project  = new FakeProject();

            project.AddFile(editorText);
            solution.Projects.Add(project);

            var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency <ISolution>(solution));
            var browser      = new Browser(bootstrapper);

            var result = browser.Post("/autocomplete", with =>
            {
                with.HttpRequest();
                with.FormValue("FileName", "myfile");
                with.FormValue("WordToComplete", partialWord);
                with.FormValue("Buffer", editorText);
                with.FormValue("Line", cursorPosition.Line.ToString());
                with.FormValue("Column", cursorPosition.Column.ToString());
            });

            var res = result.Body.DeserializeJson <AutoCompleteResponse[]>().Select(c => c.DisplayText);

            res.ShouldContain("Trim()");
        }
示例#37
0
        public void ShouldAlwaysUseWindowsFileSeparatorWhenAddingToProject()
        {
            var project = new FakeProject(fileName: @"/test/code/fake.csproj");
            project.XmlRepresentation = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>");
            var expectedXml = XDocument.Parse(@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""folder\Test.cs""/></ItemGroup></Project>");

            project.AddFile("some content", @"/test/code/folder/Test.cs");

            var solution = new FakeSolution(@"/test/fake.sln");
            solution.Projects.Add(project);

            var request = new AddToProjectRequest
            {
                FileName = @"/test/code/folder/Test.cs"
            };

            var handler = new AddToProjectHandler(solution);
            handler.AddToProject(request);

            project.AsXml().ToString().ShouldEqual(expectedXml.ToString());
        }
示例#38
0
        public static GetContextResponse GetContextInformation(this string editorText)
        {
            var cursorPosition = TestHelpers.GetLineAndColumnFromDollar(editorText);
            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add(project);

            var handler = new GetTestContextHandler(solution, new BufferParser(solution));
            var request = new TestCommandRequest
            {
                Buffer = editorText,
                FileName = "myfile",
                Line = cursorPosition.Line,
                Column = cursorPosition.Column,
            };

            return handler.GetContextResponse(request);
        }
示例#39
0
        public void ShouldAddNewFileToProject()
        {
            var project = GetProject (@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/></ItemGroup></Project>");

            project.Files.Add (new CSharpFile (project, @"c:\test\code\files\Test.cs", "some c# code"));
           
            var solution = new FakeSolution (@"c:\test\fake.sln");
            solution.Projects.Add (project);

            var request = new AddToProjectRequest {
                FileName = @"c:\test\code\files\Test.cs"
            };

            var handler = new AddToProjectHandler (solution);
            handler.AddToProject (request);

            var expectedXml = XDocument.Parse (
                                  @"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""files\Test.cs""/></ItemGroup></Project>");

            project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ());
        }
示例#40
0
        public static string LookupType(this string editorText)
        {
            int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal);
            var cursorPosition = TestHelpers.GetLineAndColumnFromIndex(editorText, cursorOffset);
            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add(project);

            var handler = new TypeLookupHandler(new BufferParser(solution));
            var request = new TypeLookupRequest()
                {
                    Buffer = editorText,
                    FileName = "myfile",
                    Line = cursorPosition.Line,
                    Column = cursorPosition.Column,
                };

            return handler.GetTypeLookupResponse(request).Type;
        }
示例#41
0
        public void Should_complete_string()
        {
            string editorText = @"
            public class myclass
            {
            public void method()
            {
            string s;
            s.$;
            }
            }
            ";
            int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal);
            Tuple<int, int> cursorPosition = GetLineAndColumnFromIndex(editorText, cursorOffset);
            string partialWord = GetPartialWord(editorText);
            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add("dummyproject", project);

            var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution));
            var browser = new Browser(bootstrapper);

            var result = browser.Post("/autocomplete", with =>
            {
                with.HttpRequest();
                with.FormValue("FileName", "myfile");
                with.FormValue("WordToComplete", partialWord);
                with.FormValue("Buffer", editorText);
                with.FormValue("Line", cursorPosition.Item1.ToString());
                with.FormValue("Column", cursorPosition.Item2.ToString());
            });

            var res = result.Body.DeserializeJson<AutoCompleteResponse[]>().Select(c => c.DisplayText);
            res.ShouldContain("Trim()");
        }
示例#42
0
        public void ShouldNotAddFileToProjectWhenAlreadyExists()
        {
            var project = GetProject (@"<Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003""><ItemGroup><Compile Include=""Hello.cs""/><Compile Include=""Test.cs""/><Compile Include=""c:\test2\Absolute.cs""/><Compile Include=""..\..\test2\Foreign.cs""/></ItemGroup></Project>");
            var expectedXml = project.AsXml ();

            var solution = new FakeSolution (@"c:\test\fake.sln");
            solution.Projects.Add (project);

            // test relative internal

            var request = new AddToProjectRequest {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new AddToProjectHandler (solution);
            handler.AddToProject (request);
            project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ());

            // test absolute
            request = new AddToProjectRequest {
                FileName = @"c:\test2\Absolute.cs"
            };

            handler = new AddToProjectHandler (solution);
            handler.AddToProject (request);
            project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ());

            // test relative foreign tree

            request = new AddToProjectRequest {
                FileName = @"c:\test2\Foreign.cs"
            };

            handler = new AddToProjectHandler (solution);
            handler.AddToProject (request);
            project.AsXml ().ToString ().ShouldEqual (expectedXml.ToString ());
        }
示例#43
0
        public void Should_lookup_Test()
        {
            string editorText = @"
            public class Test
            {
            public void Main()
            {
            Test test;
            te$st = new Test();
            }
            }
            ";
            int cursorOffset = editorText.IndexOf("$", StringComparison.Ordinal);
            Tuple<int, int> cursorPosition = GetLineAndColumnFromIndex(editorText, cursorOffset);
            editorText = editorText.Replace("$", "");

            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText);
            solution.Projects.Add("dummyproject", project);

            var bootstrapper = new ConfigurableBootstrapper(c => c.Dependency<ISolution>(solution));
            var browser = new Browser(bootstrapper);

            var result = browser.Post("/typelookup", with =>
            {
                with.HttpRequest();
                with.FormValue("FileName", "myfile");
                with.FormValue("Buffer", editorText);
                with.FormValue("Line", cursorPosition.Item1.ToString());
                with.FormValue("Column", cursorPosition.Item2.ToString());
            });

            var res = result.Body.DeserializeJson<TypeLookupResponse>();
            res.Type.ShouldEqual("Test test");
        }
示例#44
0
        public void ShouldThrowProjectNotFoundExceptionForOrphanProject()
        {
            var solution = new FakeSolution(@"/test/fake.sln");
            var project = new OrphanProject();
            project.Files.Add(new CSharpFile(project, "/test/folder/Test.cs", "Some content..."));
            solution.Projects.Add(project);

            var request = new AddToProjectRequest
            {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new AddToProjectHandler(solution);
            handler.AddToProject(request);
        }
        public void ShouldRemoveFileFromProject()
        {
            var xml = @"
               <Project xmlns=""http://schemas.microsoft.com/developer/msbuild/2003"">
                   <ItemGroup>
                       <Compile Include=""Test.cs""/>
                   </ItemGroup>
               </Project>";

            var project = GetProject(xml);

            var solution = new FakeSolution(@"c:\test\fake.sln");
            solution.Projects.Add(project);

            var request = new RemoveFromProjectRequest
            {
                FileName = @"c:\test\code\test.cs"
            };

            var handler = new RemoveFromProjectHandler(solution);
            handler.RemoveFromProject(request);

            project.Files.ShouldBeEmpty();
        }
示例#46
0
        public void ShouldThrowProjectNotFoundExceptionWhenProjectNotFound()
        {
            var project = GetProject ("<xml/>");
            var solution = new FakeSolution (@"/test/fake.sln");
            solution.Projects.Add (project);

            var request = new AddToProjectRequest {
                FileName = @"/test/folder/Test.cs"
            };

            var handler = new AddToProjectHandler (solution);
            handler.AddToProject (request);
        }
示例#47
0
        private static Error[] GetErrors(string editorText)
        {
            var fileName = "test.cs";
            var solution = new FakeSolution();
            var project = new FakeProject();
            project.AddFile(editorText, fileName);
            solution.Projects.Add(project);

            var handler = new SemanticErrorsHandler(solution);
            var request = new Request
            {
                Buffer = editorText,
                FileName = fileName,
            };
            var semanticErrorsResponse = handler.FindSemanticErrors(request);
            return semanticErrorsResponse.Errors.ToArray();
        }
示例#48
0
 static QuickFixResponse FindDerivedMembersAsQuickFixes(FakeSolution solution, GotoImplementationRequest request)
 {
     var handler = new GotoImplementationHandler(solution, new BufferParser(solution), new ProjectFinder(solution));
     var gotoImplementationResponse = handler.FindDerivedMembersAsQuickFixes(request);
     return gotoImplementationResponse;
 }
示例#49
0
 public FakeSolutionBuilder()
 {
     _solution = new FakeSolution();
     _project = new FakeProject("Project" + projectCount++);
     _projects.Add(_project);
 }
示例#50
0
 public CompletionsSpecBase()
 {
     _solution = new FakeSolution();
 }