Пример #1
0
        public void HasModuleWorksCorrectly()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));

            suite.HasModule("mod").Should().BeFalse();
            suite.GetModule("mod");
            suite.HasModule("mod").Should().BeTrue();
        }
Пример #2
0
        public void HasModuleWorksCorrectly()
        {
            var suite = new Suite(new TestFileSystemDirectory("root"));

            suite.HasModule("mod").Should().BeFalse();
            suite.GetModule("mod");
            suite.HasModule("mod").Should().BeTrue();
        }
Пример #3
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));
            }
        }
Пример #4
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");
                        }
                    }
                }
            }
        }
Пример #5
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);
            }
        }
Пример #6
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);
        }
Пример #7
0
        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());
                }
            }
        }
Пример #8
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);
        }
Пример #9
0
 private Module FindModule(string module)
 {
     return(suite.HasModule(module) ? suite.GetModule(module) : null);
 }