示例#1
0
文件: InfoTest.cs 项目: zvrana/bari
        public void SetUp()
        {
            kernel = new StandardKernel();
            Kernel.RegisterCoreBindings(kernel);
            kernel.Bind<IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("root")).WhenTargetHas
                <SuiteRootAttribute>();

            output = new TestUserOutput();
            kernel.Bind<IUserOutput>().ToConstant(output).InSingletonScope();

            suite = kernel.Get<Suite>();
            suite.Name = "test suite";
            var mod1 = suite.GetModule("first module");
            var mod2 = suite.GetModule("other module");
            var mod3 = suite.GetModule("last module");

            var proj11 = mod1.GetProject("project 1.1");
            var proj12 = mod1.GetProject("project 1.2");
            var proj31 = mod3.GetProject("project 3.1");

            mod1.GetTestProject("test1");
            mod2.GetTestProject("test2");

            var cs = proj31.GetSourceSet("cs");
            var vb = proj31.GetSourceSet("vb");
            var fs = proj31.GetSourceSet("fs");

            cs.Add(new SuiteRelativePath("a.cs"));
            cs.Add(new SuiteRelativePath("b.cs"));
            cs.Add(new SuiteRelativePath("c.cs"));
            
            vb.Add(new SuiteRelativePath("x.vb"));
        }
示例#2
0
        public void SetUp()
        {
            kernel = new StandardKernel();
            Kernel.RegisterCoreBindings(kernel);
            kernel.Bind <IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("root")).WhenTargetHas
            <SuiteRootAttribute>();

            output = new TestUserOutput();
            kernel.Bind <IUserOutput>().ToConstant(output).InSingletonScope();

            suite      = kernel.Get <Suite>();
            suite.Name = "test suite";
            var mod1 = suite.GetModule("first module");
            var mod2 = suite.GetModule("other module");
            var mod3 = suite.GetModule("last module");

            var proj11 = mod1.GetProject("project 1.1");
            var proj12 = mod1.GetProject("project 1.2");
            var proj31 = mod3.GetProject("project 3.1");

            mod1.GetTestProject("test1");
            mod2.GetTestProject("test2");

            var cs = proj31.GetSourceSet("cs");
            var vb = proj31.GetSourceSet("vb");
            var fs = proj31.GetSourceSet("fs");

            cs.Add(new SuiteRelativePath("a.cs"));
            cs.Add(new SuiteRelativePath("b.cs"));
            cs.Add(new SuiteRelativePath("c.cs"));

            vb.Add(new SuiteRelativePath("x.vb"));
        }
示例#3
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void GetModuleReturnsTheSameInstanceIfCalledTwice()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));
            var mod1  = suite.GetModule("mod");
            var mod2  = suite.GetModule("mod");

            mod1.Should().BeSameAs(mod2);
        }
示例#4
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void GetModuleReturnsTheSameInstanceIfCalledTwice()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));
            var mod1 = suite.GetModule("mod");
            var mod2 = suite.GetModule("mod");

            mod1.Should().BeSameAs(mod2);
        } 
        public void SetUp()
        {
            suite = new Suite(new TestFileSystemDirectory("root"));
            suiteNoExe = new Suite(new TestFileSystemDirectory("root"));
            suite.GetModule("TestModule").GetProject("TestLib").Type = ProjectType.Library;
            suiteNoExe.GetModule("TestModule").GetProject("TestLib").Type = ProjectType.Library;
            suite.GetModule("TestModule").GetProject("TestExe").Type = ProjectType.Executable;

            product = suite.GetProduct("TestProduct");
            product.AddModule(suite.GetModule("TestModule"));

            targetParser = new Mock<ICommandTargetParser>();
            buildTargetSource = new Mock<IHasBuildTarget>();
            data = new AddonSupportSolutionItemData(targetParser.Object, buildTargetSource.Object, new Goal("test"));
        }
示例#6
0
        public void SetUp()
        {
            suite      = new Suite(new TestFileSystemDirectory("root"));
            suiteNoExe = new Suite(new TestFileSystemDirectory("root"));
            suite.GetModule("TestModule").GetProject("TestLib").Type      = ProjectType.Library;
            suiteNoExe.GetModule("TestModule").GetProject("TestLib").Type = ProjectType.Library;
            suite.GetModule("TestModule").GetProject("TestExe").Type      = ProjectType.Executable;

            product = suite.GetProduct("TestProduct");
            product.AddModule(suite.GetModule("TestModule"));

            targetParser      = new Mock <ICommandTargetParser>();
            buildTargetSource = new Mock <IHasBuildTarget>();
            data = new AddonSupportSolutionItemData(targetParser.Object, buildTargetSource.Object, new Goal("test"));
        }
示例#7
0
        public void TestProjectsDiscovered()
        {
            var fs = CreateFsWithSourcesAndTests();

            var suite = new Suite(fs);

            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);

            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(3);
            suite.Modules.Should().OnlyContain(m => m.Name == "Module1" ||
                                               m.Name == "Module2" ||
                                               m.Name == "Module3");

            var mod3 = suite.GetModule("Module3");

            mod3.Projects.Should().HaveCount(2);
            mod3.Projects.Should().Contain(p => p.Name == "Project31");
            mod3.Projects.Should().Contain(p => p.Name == "Project32");
            mod3.TestProjects.Should().HaveCount(2);
            mod3.TestProjects.Should().Contain(p => p.Name == "Project31.Test");
            mod3.TestProjects.Should().Contain(p => p.Name == "Project32.Test");
        }
示例#8
0
        /// <summary>
        /// Extends suite model with discovered information based on bari conventions
        /// </summary>
        /// <param name="suite">The suite model to be extended with discoveries</param>
        public void ExtendWithDiscoveries(Suite suite)
        {
            var srcDir = suiteRoot.GetChildDirectory("src");

            srcDir.With(s => s.ChildDirectories.Do(
                            moduleName =>
            {
                Module module = suite.GetModule(moduleName);

                var moduleDir = srcDir.GetChildDirectory(moduleName);
                foreach (var projectName in moduleDir.ChildDirectories)
                {
                    if (projectName.Equals("tests", StringComparison.InvariantCultureIgnoreCase))
                    {
                        // This is the special subdirectory for test projects
                        var testsDir = moduleDir.GetChildDirectory(projectName);
                        foreach (var testProjectName in testsDir.ChildDirectories)
                        {
                            var testProject = module.GetTestProject(testProjectName);
                            DiscoverProjectSources(testProject, testsDir.GetChildDirectory(testProjectName));
                        }
                    }
                    else
                    {
                        // This is a project directory

                        Project project = module.GetProject(projectName);
                        DiscoverProjectSources(project, moduleDir.GetChildDirectory(projectName));
                    }
                }
            }));
        }
示例#9
0
        /// <summary>
        /// Prepares a builder to be ran in a given build context.
        ///
        /// <para>This is the place where a builder can add additional dependencies.</para>
        /// </summary>
        /// <param name="context">The current build context</param>
        public void AddToContext(IBuildContext context)
        {
            var moduleName  = reference.Uri.Host;
            var projectName = reference.Uri.AbsolutePath.TrimStart('/');

            if (suite.HasModule(moduleName))
            {
                var module = suite.GetModule(moduleName);
                referencedProject = module.GetProjectOrTestProject(projectName);

                if (!context.Contains(this))
                {
                    if (referencedProject != null)
                    {
                        subtasks = new HashSet <IBuilder>();
                        context.AddBuilder(this, SubtaskGenerator(context));
                    }
                    else
                    {
                        throw new InvalidReferenceException(string.Format("Module {0} has no project called {1}",
                                                                          moduleName, projectName));
                    }
                }
                else
                {
                    subtasks = new HashSet <IBuilder>(context.GetDependencies(this));
                }
            }
            else
            {
                throw new InvalidReferenceException(string.Format("Suite has no module called {0}", moduleName));
            }
        }
示例#10
0
        public void ExistingModulesMergedWithDiscoveredOnes()
        {
            var fs = new TestFileSystemDirectory("root",
                                                 new TestFileSystemDirectory("src",
                                                                             new TestFileSystemDirectory("Module1",
                                                                                                         new TestFileSystemDirectory
                                                                                                             ("Project11"))));

            var suite = new Suite(fs);

            var module1  = suite.GetModule("Module1");
            var projectA = module1.GetProject("ProjectA");

            module1.Projects.Should().HaveCount(1);
            module1.Projects.Should().HaveElementAt(0, projectA);

            var discovery = new ModuleProjectDiscovery(fs);

            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(1);
            suite.Modules.Should().HaveElementAt(0, module1);
            module1.Projects.Should().HaveCount(2);
            module1.Projects.Should().Contain(projectA);
            module1.Projects.Should().Contain(p => p.Name == "Project11");
        }
示例#11
0
        public void SourceSetsDiscovered()
        {
            var fs = CreateFsWithSources();

            var suite = new Suite(fs);

            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);

            discovery.ExtendWithDiscoveries(suite);

            var project = suite.GetModule("Module1").GetProject("Project11");

            project.SourceSets.Should().HaveCount(2);
            project.SourceSets.Should().Contain(set => set.Type == "cs");
            project.SourceSets.Should().Contain(set => set.Type == "fs");

            var csSet = project.GetSourceSet("cs");
            var fsSet = project.GetSourceSet("fs");

            csSet.Files.Should().HaveCount(3);
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "source1.cs")));
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "source2.cs")));
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "subdir", "source3.cs")));

            fsSet.Files.Should().HaveCount(1);
            fsSet.Files.Should().HaveElementAt(0, new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "fs", "a.fs")));
        }
示例#12
0
        public void ExistingModulesMergedWithDiscoveredOnes()
        {
            var fs = new TestFileSystemDirectory("root",
                                                 new TestFileSystemDirectory("src",
                                                                             new TestFileSystemDirectory("Module1",
                                                                                                         new TestFileSystemDirectory
                                                                                                             ("Project11"))));

            var suite = new Suite(fs);

            var module1 = suite.GetModule("Module1");
            var projectA = module1.GetProject("ProjectA");

            module1.Projects.Should().HaveCount(1);
            module1.Projects.Should().HaveElementAt(0, projectA);

            var discovery = new ModuleProjectDiscovery(fs);
            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(1);
            suite.Modules.Should().HaveElementAt(0, module1);
            module1.Projects.Should().HaveCount(2);
            module1.Projects.Should().Contain(projectA);
            module1.Projects.Should().Contain(p => p.Name == "Project11");
        }
示例#13
0
        /// <summary>
        /// Extends suite model with discovered information based on bari conventions
        /// </summary>        
        /// <param name="suite">The suite model to be extended with discoveries</param>
        public void ExtendWithDiscoveries(Suite suite)
        {
            var srcDir = suiteRoot.GetChildDirectory("src");
            srcDir.With(s => s.ChildDirectories.Do(
                moduleName =>
                {
                    Module module = suite.GetModule(moduleName);

                    var moduleDir = srcDir.GetChildDirectory(moduleName);
                    foreach (var projectName in moduleDir.ChildDirectories)
                    {
                        if (projectName.Equals("tests", StringComparison.InvariantCultureIgnoreCase))
                        {
                            // This is the special subdirectory for test projects
                            var testsDir = moduleDir.GetChildDirectory(projectName);
                            foreach (var testProjectName in testsDir.ChildDirectories)
                            {
                                var testProject = module.GetTestProject(testProjectName);
                                DiscoverProjectSources(testProject, testsDir.GetChildDirectory(testProjectName));
                            }
                        }
                        else
                        {
                            // This is a project directory

                            Project project = module.GetProject(projectName);
                            DiscoverProjectSources(project, moduleDir.GetChildDirectory(projectName));
                        }
                    }
                }));
        }
        /// <summary>
        /// Writes the section using an XML writer
        /// </summary>
        /// <param name="writer">XML writer to use</param>
        /// <param name="project">The project to generate .csproj for</param>
        /// <param name="context">Current .csproj generation context</param>
        public override void Write(XmlWriter writer, Project project, IMSBuildProjectGeneratorContext context)
        {
            writer.WriteStartElement("ItemGroup");

            foreach (var refPath in context.References)
            {
                if (((string)refPath).StartsWith("SLN!"))
                {
                    var moduleAndprojectName = ((string)refPath).Substring(4);
                    var parts       = moduleAndprojectName.Split('#');
                    var moduleName  = parts[0];
                    var projectName = parts[1];

                    var referredProject = Suite.GetModule(moduleName).GetProjectOrTestProject(projectName);

                    if (referredProject.Type == ProjectType.StaticLibrary)
                    {
                        writer.WriteStartElement("ProjectReference");
                        writer.WriteAttributeString("Include",
                                                    ToProjectRelativePath(project, Path.Combine(Suite.SuiteRoot.GetRelativePath(referredProject.RootDirectory), "cpp", projectName + ".vcxproj"), "cpp"));
                        writer.WriteElementString("Project", projectGuidManagement.GetGuid(project).ToString("B"));
                        writer.WriteEndElement();
                    }
                }
            }

            writer.WriteEndElement();
        }
示例#15
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void HasModuleWorksCorrectly()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));

            suite.HasModule("mod").Should().BeFalse();
            suite.GetModule("mod");
            suite.HasModule("mod").Should().BeTrue();
        }
示例#16
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void GetModuleCreatesInstanceIfMissing()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));
            var mod1  = suite.GetModule("mod");

            mod1.Should().NotBeNull();
            mod1.Name.Should().Be("mod");
        }
示例#17
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void HasModuleWorksCorrectly()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));

            suite.HasModule("mod").Should().BeFalse();
            suite.GetModule("mod");
            suite.HasModule("mod").Should().BeTrue();
        }
示例#18
0
文件: SuiteTest.cs 项目: zvrana/bari
        public void GetModuleCreatesInstanceIfMissing()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));
            var mod1 = suite.GetModule("mod");

            mod1.Should().NotBeNull();
            mod1.Name.Should().Be("mod");
        }
示例#19
0
        public CommandTarget ParseTarget(string target)
        {
            if (string.IsNullOrEmpty(target))
            {
                return(new FullSuiteTarget(suite));
            }
            else
            {
                if (suite.HasProduct(target))
                {
                    var product = suite.GetProduct(target);
                    return(new ProductTarget(product));
                }
                if (suite.HasModule(target))
                {
                    var module = suite.GetModule(target);
                    return(new ModuleTarget(module));
                }
                else
                {
                    var matches = new HashSet <Project>();

                    // Looking for modulename.projectname matches
                    foreach (var module in suite.Modules)
                    {
                        if (target.StartsWith(module.Name + '.', StringComparison.InvariantCultureIgnoreCase))
                        {
                            string projectName = target.Substring(module.Name.Length + 1);
                            if (module.HasProject(projectName))
                            {
                                matches.Add(module.GetProject(projectName));
                            }
                        }
                    }

                    // If there is only one match
                    if (matches.Count == 1)
                    {
                        var project = matches.First();

                        return(new ProjectTarget(project));
                    }
                    else
                    {
                        if (matches.Count > 1)
                        {
                            throw new ArgumentException(
                                      "The given module and project name identifies more than one projects", "target");
                        }
                        else
                        {
                            throw new ArgumentException("The given project does not exist", "target");
                        }
                    }
                }
            }
        }
示例#20
0
        public void ProductWithExplicitStartupExe()
        {
            var mod2           = suite.GetModule("TestModule2");
            var alternativeExe = mod2.GetProject("AlternativeExe");

            alternativeExe.Type = ProjectType.WindowsExecutable;
            product.AddModule(mod2);
            product.AddParameters("startup", new StartupModuleParameters(alternativeExe));

            targetParser.Setup(p => p.ParseTarget(It.IsAny <string>())).Returns(new ProductTarget(product));
            data.StartupPath.Should().Be(Path.Combine("TestModule2", "AlternativeExe.exe"));
        }
示例#21
0
        public void ProjectsDiscovered()
        {
            var fs = new TestFileSystemDirectory("root",
                                     new TestFileSystemDirectory("src",
                                                                 new TestFileSystemDirectory("Module1",
                                                                     new TestFileSystemDirectory("Project11")),
                                                                 new TestFileSystemDirectory("Module2"),
                                                                 new TestFileSystemDirectory("Module3",
                                                                     new TestFileSystemDirectory("Project31"),
                                                                     new TestFileSystemDirectory("Project32"))),
                                     new TestFileSystemDirectory("output"));

            var suite = new Suite(fs);

            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);
            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(3);
            suite.Modules.Should().OnlyContain(m => m.Name == "Module1" ||
                                                    m.Name == "Module2" ||
                                                    m.Name == "Module3");

            suite.GetModule("Module1").Projects.Should().HaveCount(1);
            suite.GetModule("Module1").Projects.Should().Contain(p => p.Name == "Project11");
            suite.GetModule("Module2").Projects.Should().HaveCount(0);
            suite.GetModule("Module3").Projects.Should().HaveCount(2);
            suite.GetModule("Module3").Projects.Should().Contain(p => p.Name == "Project31");
            suite.GetModule("Module3").Projects.Should().Contain(p => p.Name == "Project32");
        }
示例#22
0
        public void ExistingSourcesMergedWithDiscoveredOnes()
        {
            var fs = CreateFsWithSources();

            var suite = new Suite(fs);

            var fsSet = suite.GetModule("Module1").GetProject("Project11").GetSourceSet("fs");
            var vbSet = suite.GetModule("Module1").GetProject("Project11").GetSourceSet("vb");

            fsSet.Add(new SuiteRelativePath("src\\Module1\\Project11\\fs\\b.fs"));
            vbSet.Add(new SuiteRelativePath("src\\Module1\\Project11\\vb\\x.vb"));

            var discovery = new ModuleProjectDiscovery(fs);

            discovery.ExtendWithDiscoveries(suite);

            var project = suite.GetModule("Module1").GetProject("Project11");

            project.SourceSets.Should().HaveCount(3);
            project.SourceSets.Should().Contain(set => set.Type == "cs");
            project.SourceSets.Should().Contain(set => set.Type == "fs");
            project.SourceSets.Should().Contain(set => set.Type == "vb");

            var csSet = project.GetSourceSet("cs");

            fsSet = project.GetSourceSet("fs");
            vbSet = project.GetSourceSet("vb");

            csSet.Files.Should().HaveCount(3);
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\source1.cs"));
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\source2.cs"));
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\subdir\\source3.cs"));

            fsSet.Files.Should().HaveCount(2);
            fsSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\fs\\a.fs"));
            fsSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\fs\\b.fs"));

            vbSet.Files.Should().HaveCount(1);
            vbSet.Files.Should().HaveElementAt(0, new SuiteRelativePath("src\\Module1\\Project11\\vb\\x.vb"));
        }
示例#23
0
        public void ProjectsDiscovered()
        {
            var fs = new TestFileSystemDirectory("root",
                                                 new TestFileSystemDirectory("src",
                                                                             new TestFileSystemDirectory("Module1",
                                                                                                         new TestFileSystemDirectory("Project11")),
                                                                             new TestFileSystemDirectory("Module2"),
                                                                             new TestFileSystemDirectory("Module3",
                                                                                                         new TestFileSystemDirectory("Project31"),
                                                                                                         new TestFileSystemDirectory("Project32"))),
                                                 new TestFileSystemDirectory("output"));

            var suite = new Suite(fs);

            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);

            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(3);
            suite.Modules.Should().OnlyContain(m => m.Name == "Module1" ||
                                               m.Name == "Module2" ||
                                               m.Name == "Module3");

            suite.GetModule("Module1").Projects.Should().HaveCount(1);
            suite.GetModule("Module1").Projects.Should().Contain(p => p.Name == "Project11");
            suite.GetModule("Module2").Projects.Should().HaveCount(0);
            suite.GetModule("Module3").Projects.Should().HaveCount(2);
            suite.GetModule("Module3").Projects.Should().Contain(p => p.Name == "Project31");
            suite.GetModule("Module3").Projects.Should().Contain(p => p.Name == "Project32");
        }
示例#24
0
        /// <summary>
        /// Writes the section using an XML writer
        /// </summary>
        /// <param name="writer">XML writer to use</param>
        /// <param name="project">The project to generate .csproj for</param>
        /// <param name="context">Current .csproj generation context</param>
        public override void Write(XmlWriter writer, Project project, IMSBuildProjectGeneratorContext context)
        {
            writer.WriteStartElement("ItemGroup");

            foreach (var refPath in context.References.Where(IsValidReference))
            {
                if (IsSolutionReference(refPath))
                {
                    var moduleAndprojectName = ((string)refPath).Substring(4);
                    var parts       = moduleAndprojectName.Split('#');
                    var moduleName  = parts[0];
                    var projectName = parts[1];

                    var referredProject = Suite.GetModule(moduleName).GetProjectOrTestProject(projectName);

                    if (referredProject.Type == ProjectType.Library ||
                        referredProject.Type == ProjectType.Executable)
                    {
                        writer.WriteComment("Project reference " + projectGuidManagement.GetGuid(referredProject));
                        writer.WriteStartElement("Reference");
                        writer.WriteAttributeString("Include", projectName);
                        writer.WriteElementString("HintPath",
                                                  ToProjectRelativePath(project,
                                                                        Path.Combine(Suite.SuiteRoot.GetRelativePath(targetDir), referredProject.Module.Name,
                                                                                     referredProject.Name + ".dll"), sourceSetName));
                        writer.WriteElementString("SpecificVersion", "False");
                        writer.WriteEndElement();
                    }
                }
                else
                {
                    writer.WriteStartElement("Reference");
                    if (IsGACReference(refPath))
                    {
                        var assemblyName = ((string)refPath).Substring(4);
                        writer.WriteAttributeString("Include", assemblyName);
                    }
                    else
                    {
                        string relativePath = ToProjectRelativePath(project, Path.Combine("target", refPath), sourceSetName);

                        writer.WriteAttributeString("Include", Path.GetFileNameWithoutExtension(relativePath));
                        writer.WriteElementString("HintPath", relativePath);
                        writer.WriteElementString("SpecificVersion", "False");
                        writer.WriteElementString("Private", "True");
                    }
                    writer.WriteEndElement();
                }
            }

            writer.WriteEndElement();
        }
示例#25
0
        public void SetUp()
        {
            fallback = new Mock<ISlnNameGenerator>();                        
            suite = new Suite(new TestFileSystemDirectory("root"));
            suiteContents = new DefaultSuiteContentsAnalyzer(suite);
            generator = new ReadableSlnNameGenerator(fallback.Object, suiteContents);

            fallback.Setup(f => f.GetName(It.IsAny<IEnumerable<Project>>())).Returns("fallback");

            // mod1: proj11, testproj11
            // mod2: proj21, proj22
            // mod3: proj31        
            // mod4: proj41
            // mod5: proj51
            // mod6: proj61
            // mod7: proj71

            // prod1: mod1, mod2
            // prod2: mod2, mod3

            mod1 = suite.GetModule("mod1");
            mod2 = suite.GetModule("mod2");
            mod3 = suite.GetModule("mod3");
            mod4 = suite.GetModule("mod4");
            mod5 = suite.GetModule("mod5");
            mod6 = suite.GetModule("mod6");
            mod7 = suite.GetModule("mod7");
            mod8 = suite.GetModule("mod8");

            proj11 = mod1.GetProject("proj1");
            tproj11 = mod1.GetTestProject("test1");
            proj21 = mod2.GetProject("proj21");
            proj22 = mod2.GetProject("proj22");
            proj31 = mod3.GetProject("proj3");
            proj41 = mod4.GetProject("proj4");
            proj51 = mod5.GetProject("proj5");
            proj61 = mod6.GetProject("proj6");
            proj71 = mod7.GetProject("proj7");
            proj81 = mod8.GetProject("proj8");
            tproj81 = mod8.GetTestProject("test8");

            prod1 = suite.GetProduct("prod1");
            prod1.AddModule(mod1);
            prod1.AddModule(mod2);

            prod2 = suite.GetProduct("prod2");
            prod2.AddModule(mod2);
            prod2.AddModule(mod3);
        }
示例#26
0
        public void SetUp()
        {
            fallback      = new Mock <ISlnNameGenerator>();
            suite         = new Suite(new TestFileSystemDirectory("root"));
            suiteContents = new DefaultSuiteContentsAnalyzer(suite);
            generator     = new ReadableSlnNameGenerator(fallback.Object, suiteContents);

            fallback.Setup(f => f.GetName(It.IsAny <IEnumerable <Project> >())).Returns("fallback");

            // mod1: proj11, testproj11
            // mod2: proj21, proj22
            // mod3: proj31
            // mod4: proj41
            // mod5: proj51
            // mod6: proj61
            // mod7: proj71

            // prod1: mod1, mod2
            // prod2: mod2, mod3

            mod1 = suite.GetModule("mod1");
            mod2 = suite.GetModule("mod2");
            mod3 = suite.GetModule("mod3");
            mod4 = suite.GetModule("mod4");
            mod5 = suite.GetModule("mod5");
            mod6 = suite.GetModule("mod6");
            mod7 = suite.GetModule("mod7");
            mod8 = suite.GetModule("mod8");

            proj11  = mod1.GetProject("proj1");
            tproj11 = mod1.GetTestProject("test1");
            proj21  = mod2.GetProject("proj21");
            proj22  = mod2.GetProject("proj22");
            proj31  = mod3.GetProject("proj3");
            proj41  = mod4.GetProject("proj4");
            proj51  = mod5.GetProject("proj5");
            proj61  = mod6.GetProject("proj6");
            proj71  = mod7.GetProject("proj7");
            proj81  = mod8.GetProject("proj8");
            tproj81 = mod8.GetTestProject("test8");

            prod1 = suite.GetProduct("prod1");
            prod1.AddModule(mod1);
            prod1.AddModule(mod2);

            prod2 = suite.GetProduct("prod2");
            prod2.AddModule(mod2);
            prod2.AddModule(mod3);
        }
示例#27
0
        public void Issue90_SingleProjectProduct()
        {
            var s = new Suite(new TestFileSystemDirectory("z"));
            var m = s.GetModule("m");
            var p = m.GetProject("p");
            var prod = s.GetProduct("prod");
            prod.AddModule(m);

            var sc = new DefaultSuiteContentsAnalyzer(s);
            var g = new ReadableSlnNameGenerator(fallback.Object, sc);
            var name = g.GetName(new[] { p });
            name.Should().Be("prod");
        }
示例#28
0
        public void ExistingSourcesMergedWithDiscoveredOnes()
        {
            var fs = CreateFsWithSources();

            var suite = new Suite(fs);

            var fsSet = suite.GetModule("Module1").GetProject("Project11").GetSourceSet("fs");
            var vbSet = suite.GetModule("Module1").GetProject("Project11").GetSourceSet("vb");

            fsSet.Add(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "fs", "b.fs")));
            vbSet.Add(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "vb", "x.vb")));

            var discovery = new ModuleProjectDiscovery(fs);
            discovery.ExtendWithDiscoveries(suite);

            var project = suite.GetModule("Module1").GetProject("Project11");
            project.SourceSets.Should().HaveCount(3);
            project.SourceSets.Should().Contain(set => set.Type == "cs");
            project.SourceSets.Should().Contain(set => set.Type == "fs");
            project.SourceSets.Should().Contain(set => set.Type == "vb");

            var csSet = project.GetSourceSet("cs");
            fsSet = project.GetSourceSet("fs");
            vbSet = project.GetSourceSet("vb");

            csSet.Files.Should().HaveCount(3);
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "source1.cs")));
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "source2.cs")));
            csSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "cs", "subdir", "source3.cs")));

            fsSet.Files.Should().HaveCount(2);
            fsSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "fs", "a.fs")));
            fsSet.Files.Should().Contain(new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "fs", "b.fs")));

            vbSet.Files.Should().HaveCount(1);
            vbSet.Files.Should().HaveElementAt(0, new SuiteRelativePath(Path.Combine("src", "Module1", "Project11", "vb", "x.vb")));
        }
示例#29
0
        public void Issue90_SingleProjectProduct()
        {
            var s    = new Suite(new TestFileSystemDirectory("z"));
            var m    = s.GetModule("m");
            var p    = m.GetProject("p");
            var prod = s.GetProduct("prod");

            prod.AddModule(m);

            var sc   = new DefaultSuiteContentsAnalyzer(s);
            var g    = new ReadableSlnNameGenerator(fallback.Object, sc);
            var name = g.GetName(new[] { p });

            name.Should().Be("prod");
        }
示例#30
0
        private static Project CalculateReferencedProject(Suite suite, Module module, Reference r)
        {
            switch (r.Uri.Scheme)
            {
            case "suite":
            {
                var moduleName  = r.Uri.Host;
                var projectName = r.Uri.AbsolutePath.TrimStart('/');

                if (suite.HasModule(moduleName))
                {
                    module = suite.GetModule(moduleName);
                    var result = module.GetProjectOrTestProject(projectName);

                    if (result == null)
                    {
                        throw new InvalidReferenceException(string.Format("Module {0} has no project called {1}", moduleName, projectName));
                    }

                    return(result);
                }
                else
                {
                    throw new InvalidReferenceException(string.Format("Suite has no module called {0}", moduleName));
                }
            }

            case "module":
            {
                string projectName = r.Uri.Host;
                var    result      = module.GetProjectOrTestProject(projectName);

                if (result == null)
                {
                    throw new InvalidReferenceException(string.Format("Module {0} has no project called {1}", module.Name, projectName));
                }

                return(result);
            }

            default:
                throw new InvalidOperationException("Unsupported suite reference type: " + r.Uri.Scheme);
            }
        }
示例#31
0
        public void SetUp()
        {
            kernel = new StandardKernel();
            Kernel.RegisterCoreBindings(kernel);
            kernel.Bind<IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("root")).WhenTargetHas
                <SuiteRootAttribute>();
            kernel.Bind<IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("target")).WhenTargetHas
                <TargetRootAttribute>();
            kernel.Bind<IProjectGuidManagement>().To<DefaultProjectGuidManagement>();

            suite = kernel.Get<Suite>();
            suite.Name = "test suite";

            var mod = suite.GetModule("testmod");
            project = mod.GetProject("test");

            kernel.Bind<Suite>().ToConstant(suite);
            kernel.Bind<Project>().ToConstant(project);
        }
示例#32
0
        public void SetUp()
        {
            kernel = new StandardKernel();
            Kernel.RegisterCoreBindings(kernel);
            kernel.Bind <IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("root")).WhenTargetHas
            <SuiteRootAttribute>();
            kernel.Bind <IFileSystemDirectory>().ToConstant(new TestFileSystemDirectory("target")).WhenTargetHas
            <TargetRootAttribute>();
            kernel.Bind <IProjectGuidManagement>().To <DefaultProjectGuidManagement>();

            suite      = kernel.Get <Suite>();
            suite.Name = "test suite";

            var mod = suite.GetModule("testmod");

            project = mod.GetProject("test");

            kernel.Bind <Suite>().ToConstant(suite);
            kernel.Bind <Project>().ToConstant(project);
        }
示例#33
0
        private void LoadProduct(Suite suite, Product product, YamlNode productNode)
        {
            Contract.Requires(product != null);
            Contract.Requires(productNode != null);

            foreach (KeyValuePair <string, YamlNode> item in parser.EnumerateNamedNodesOf(productNode, "modules"))
            {
                if (suite.HasModule(item.Key))
                {
                    var module = suite.GetModule(item.Key);
                    product.AddModule(module);
                }
                else
                {
                    output.Warning(String.Format("The product {0} refers to a non-existing module {1}", product.Name, item.Key));
                }
            }

            SetProjectPostProcessors(suite, product, productNode);
            LoadParameters(suite, product, productNode);
        }
        public override IProjectParameters Load(Suite suite, string name, YamlNode value, YamlParser parser)
        {
            var startupName = ParseString(value);

            if (suite.HasModule(startupName))
            {
                return(new StartupModuleParameters(suite.GetModule(startupName)));
            }
            else
            {
                var project = (from module in suite.Modules
                               where module.HasProject(startupName)
                               select module.GetProject(startupName)).FirstOrDefault();

                if (project != null)
                {
                    return(new StartupModuleParameters(project));
                }
                else
                {
                    return(new StartupModuleParameters());
                }
            }
        }
示例#35
0
 private Module FindModule(string module)
 {
     return(suite.HasModule(module) ? suite.GetModule(module) : null);
 }
示例#36
0
        public void ModulesPartiallyCovered()
        {
            var a     = new DefaultSuiteContentsAnalyzer(suite);
            var mod1  = suite.GetModule("mod1");
            var mod2  = suite.GetModule("mod2");
            var projx = mod1.GetProject("x");
            var projy = mod1.GetProject("y");

            var matches = a.GetCoveredModules(new[]
            {
                projx
            });

            matches.Should().HaveCount(1);
            matches.First().Partial.Should().BeTrue();
            matches.First().Module.Should().Be(mod1);
        }
示例#37
0
        private void LoadProduct(Suite suite, Product product, YamlNode productNode)
        {
            Contract.Requires(product != null);
            Contract.Requires(productNode != null);

            foreach (KeyValuePair<string, YamlNode> item in parser.EnumerateNamedNodesOf(productNode, "modules"))
            {
                if (suite.HasModule(item.Key))
                {
                    var module = suite.GetModule(item.Key);
                    product.AddModule(module);
                }
                else
                {
                    output.Warning(String.Format("The product {0} refers to a non-existing module {1}", product.Name, item.Key));
                }
            }

            SetProjectPostProcessors(suite, product, productNode);
            LoadParameters(suite, product, productNode);
        }
示例#38
0
        public void TestProjectsDiscovered()
        {
            var fs = CreateFsWithSourcesAndTests();

            var suite = new Suite(fs);
            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);
            discovery.ExtendWithDiscoveries(suite);

            suite.Modules.Should().HaveCount(3);
            suite.Modules.Should().OnlyContain(m => m.Name == "Module1" ||
                                                    m.Name == "Module2" ||
                                                    m.Name == "Module3");

            var mod3 = suite.GetModule("Module3");
            mod3.Projects.Should().HaveCount(2);
            mod3.Projects.Should().Contain(p => p.Name == "Project31");
            mod3.Projects.Should().Contain(p => p.Name == "Project32");
            mod3.TestProjects.Should().HaveCount(2);
            mod3.TestProjects.Should().Contain(p => p.Name == "Project31.Test");
            mod3.TestProjects.Should().Contain(p => p.Name == "Project32.Test");
        }
示例#39
0
        public void SourceSetsDiscovered()
        {
            var fs = CreateFsWithSources();

            var suite = new Suite(fs);

            suite.Modules.Should().BeEmpty();

            var discovery = new ModuleProjectDiscovery(fs);
            discovery.ExtendWithDiscoveries(suite);

            var project = suite.GetModule("Module1").GetProject("Project11");
            project.SourceSets.Should().HaveCount(2);
            project.SourceSets.Should().Contain(set => set.Type == "cs");
            project.SourceSets.Should().Contain(set => set.Type == "fs");

            var csSet = project.GetSourceSet("cs");
            var fsSet = project.GetSourceSet("fs");

            csSet.Files.Should().HaveCount(3);
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\source1.cs"));
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\source2.cs"));
            csSet.Files.Should().Contain(new SuiteRelativePath("src\\Module1\\Project11\\cs\\subdir\\source3.cs"));

            fsSet.Files.Should().HaveCount(1);
            fsSet.Files.Should().HaveElementAt(0, new SuiteRelativePath("src\\Module1\\Project11\\fs\\a.fs"));
        }