示例#1
0
        public Task CanShowTemplateOptions_MultipleTemplate_MultipleParams()
        {
            var template1 = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group", precedence: 0)
                            .WithChoiceParameter("choice", new[] { "val1", "val2" }, description: "my description", defaultValue: "def-val-not-shown", defaultIfNoOptionValue: "def-val-not-shown")
                            .WithParameter("bool", paramType: "boolean", description: "my bool", defaultValue: "false", defaultIfNoOptionValue: "false");
            var template2 = new MockTemplateInfo("foo", identity: "foo.2", groupIdentity: "foo.group", precedence: 2)
                            .WithChoiceParameter("choice", new[] { "val1", "val3" }, description: "my description", defaultValue: "def-val", defaultIfNoOptionValue: "def-val-no-arg")
                            .WithParameter("int", paramType: "integer", description: "my int", defaultValue: "0", defaultIfNoOptionValue: "10");
            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template1, template2 }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand myCommand = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());

            TemplateCommand templateCommand1 = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates[0]);
            TemplateCommand templateCommand2 = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates[1]);

            StringWriter sw          = new StringWriter();
            HelpContext  helpContext = new HelpContext(new HelpBuilder(LocalizationResources.Instance), myCommand, sw);

            InstantiateCommand.ShowTemplateSpecificOptions(new[] { templateCommand2, templateCommand1 }, helpContext);
            return(Verifier.Verify(sw.ToString(), _verifySettings.Settings));
        }
        public void UniqueStartsWithValueResolvesCanonicalValueTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, string>()
                {
                    { "foo", "Foo value" },
                    { "bar", "Bar value" }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "f");

            Assert.Equal("foo", canonical);
        }
        private static IReadOnlyDictionary <string, IReadOnlyList <(ITemplatePackageInfo PackageInfo, IReadOnlyList <ITemplateInfo> MatchedTemplates)> > GetMockNameSearchResults()
        {
            Dictionary <string, IReadOnlyList <(ITemplatePackageInfo, IReadOnlyList <ITemplateInfo>)> > dataForSources = new();

            ITemplateInfo sourceOneTemplateOne   = new MockTemplateInfo("foo1", name: "MockFooTemplateOne", identity: "Mock.Foo.1").WithDescription("Mock Foo template one");
            ITemplateInfo sourceOneTemplateTwo   = new MockTemplateInfo("foo2", name: "MockFooTemplateTwo", identity: "Mock.Foo.2").WithDescription("Mock Foo template two");
            ITemplateInfo sourceOneTemplateThree = new MockTemplateInfo("bar1", name: "MockBarTemplateOne", identity: "Mock.Bar.1").WithDescription("Mock Bar template one");

            var packOne = (_fooPackInfo, (IReadOnlyList <ITemplateInfo>) new[] { sourceOneTemplateOne, sourceOneTemplateTwo });
            var packTwo = (_barPackInfo, new[] { sourceOneTemplateThree });

            dataForSources["source one"] = new[] { packOne, packTwo };

            ITemplateInfo sourceTwoTemplateOne   = new MockTemplateInfo("red", name: "MockRedTemplate", identity: "Mock.Red.1").WithDescription("Mock red template");
            ITemplateInfo sourceTwoTemplateTwo   = new MockTemplateInfo("blue", name: "MockBlueTemplate", identity: "Mock.Blue.1").WithDescription("Mock blue template");
            ITemplateInfo sourceTwoTemplateThree = new MockTemplateInfo("green", name: "MockGreenTemplate", identity: "Mock.Green.1").WithDescription("Mock green template");

            var red   = (_redPackInfo, (IReadOnlyList <ITemplateInfo>) new[] { sourceTwoTemplateOne });
            var blue  = (_bluePackInfo, new[] { sourceTwoTemplateTwo });
            var green = (_greenPackInfo, new[] { sourceTwoTemplateThree });

            dataForSources["source two"] = new[] { red, blue, green };

            return(dataForSources);
        }
        public void ChoiceValueCaseDifferenceIsAMatchTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, string>()
                {
                    { "foo", "Foo value" },
                    { "bar", "Bar value" }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "FOO");

            Assert.Equal("foo", canonical);
        }
示例#5
0
        public void CanCompleteTypes()
        {
            var template1 = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group")
                            .WithTag("type", "project");

            var template2 = new MockTemplateInfo("foo", identity: "foo.2", groupIdentity: "foo.group")
                            .WithTag("type", "solution");

            var templateGroups = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template1, template2 }, A.Fake <IHostSpecificDataLoader>()));

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand             myCommand         = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var                    parseResult       = myCommand.Parse($" new foo --type ");
            InstantiateCommandArgs args              = InstantiateCommandArgs.FromNewCommandArgs(new NewCommandArgs(myCommand, parseResult));
            var                    completionContext = parseResult.GetCompletionContext() as TextCompletionContext;

            Assert.NotNull(completionContext);

            var result = InstantiateCommand.GetTemplateCompletions(args, templateGroups, settings, packageManager, completionContext !).Select(l => l.Label);

            Assert.Equal(new[] { "project", "solution" }, result);
        }
        public void AmbiguousStartsWithValueHasNullCanonicalValueTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, ParameterChoice>()
                {
                    { "foo", new ParameterChoice("Foo", "Foo value") },
                    { "bar", new ParameterChoice("Bar", "Bar value") },
                    { "foot", new ParameterChoice("Foot", "Foot value") }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "f");

            Assert.Null(canonical);
        }
        public void InvalidChoiceValueForParameterHasNullCanonicalValueTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, string>()
                {
                    { "foo", "Foo value" },
                    { "bar", "Bar value" }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "whatever");

            Assert.Null(canonical);
        }
示例#8
0
        internal void CanParseAllowScriptsOption(string command, AllowRunScripts?result)
        {
            var template = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group")
                           .WithPostActions(ProcessStartPostActionProcessor.ActionProcessorId);

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand             myCommand   = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var                    parseResult = myCommand.Parse(command);
            InstantiateCommandArgs args        = InstantiateCommandArgs.FromNewCommandArgs(new NewCommandArgs(myCommand, parseResult));

            TemplateCommand templateCommand     = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());
            Parser          parser              = ParserFactory.CreateParser(templateCommand);
            ParseResult     templateParseResult = parser.Parse(args.RemainingArguments ?? Array.Empty <string>());

            TemplateCommandArgs templateArgs = new TemplateCommandArgs(templateCommand, myCommand, templateParseResult);

            Assert.Equal(result, templateArgs.AllowScripts);
        }
示例#9
0
        internal void Create_CanDetectParseErrorsChoiceTemplateOptions(
            string command,
            string parameterName,
            string parameterValues,
            bool isRequired,
            string?defaultValue,
            string?defaultIfNoOptionValue,
            string expectedError)
        {
            var template = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group")
                           .WithChoiceParameter(parameterName, parameterValues.Split("|"), isRequired, defaultValue, defaultIfNoOptionValue);

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand myCommand          = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var        parseResult        = myCommand.Parse($" new create {command}");
            var        instantiateCommand = (InstantiateCommand)parseResult.CommandResult.Command;
            var        args = new InstantiateCommandArgs(instantiateCommand, parseResult);

            TemplateCommand templateCommand     = new TemplateCommand(instantiateCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());
            Parser          parser              = ParserFactory.CreateParser(templateCommand);
            ParseResult     templateParseResult = parser.Parse(args.RemainingArguments ?? Array.Empty <string>());

            Assert.True(templateParseResult.Errors.Any());
            Assert.Equal(expectedError, templateParseResult.Errors.Single().Message);
        }
示例#10
0
        internal void CanParseMultiChoiceTemplateOptions(string command, string parameterName, string parameterValues, string?defaultIfNoOptionValue, string?expectedValue)
        {
            var template = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group")
                           .WithChoiceParameter(parameterName, parameterValues.Split("|"), defaultIfNoOptionValue: defaultIfNoOptionValue, allowMultipleValues: true);

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand             myCommand           = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var                    parseResult         = myCommand.Parse($" new {command}");
            InstantiateCommandArgs args                = InstantiateCommandArgs.FromNewCommandArgs(new NewCommandArgs(myCommand, parseResult));
            TemplateCommand        templateCommand     = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());
            Parser                 parser              = ParserFactory.CreateParser(templateCommand);
            ParseResult            templateParseResult = parser.Parse(args.RemainingArguments ?? Array.Empty <string>());
            var                    templateArgs        = new TemplateCommandArgs(templateCommand, myCommand, templateParseResult);

            if (string.IsNullOrWhiteSpace(expectedValue))
            {
                Assert.False(templateArgs.TemplateParameters.ContainsKey(parameterName));
            }
            else
            {
                Assert.True(templateArgs.TemplateParameters.ContainsKey(parameterName));
                Assert.Equal(expectedValue, templateArgs.TemplateParameters[parameterName]);
            }
        }
        public void ChoiceValueCaseDifferencesContributeToAmbiguousMatchTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, ParameterChoice>()
                {
                    { "foot", new ParameterChoice("Foo", "Foo value") },
                    { "bar", new ParameterChoice("Bar", "Bar value") },
                    { "Football", new ParameterChoice("Football", "Foo value") },
                    { "FOOTPOUND", new ParameterChoice("Footpound", "Foo value") }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "foo");

            Assert.Null(canonical);
        }
        public void ValidChoiceForParameterIsItsOwnCanonicalValueTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = new Dictionary <string, ParameterChoice>()
                {
                    { "foo", new ParameterChoice("Foo", "Foo value") },
                    { "bar", new ParameterChoice("Bar", "Bar value") }
                }
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "TestName", "foo");

            Assert.Equal("foo", canonical);
        }
示例#13
0
        public void TypeMismatch_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo templateMatchInfo = new TemplateMatchInfo(templateInfo);

            templateMatchInfo.AddMatchDisposition(new MatchInfo(MatchInfo.BuiltIn.Type, "test", MatchKind.Mismatch));
            Assert.False(WellKnownSearchFilters.MatchesAllCriteria(templateMatchInfo));
            Assert.False(WellKnownSearchFilters.MatchesAtLeastOneCriteria(templateMatchInfo));
        }
示例#14
0
        public void NamePartialMatch_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo templateMatchInfo = new TemplateMatchInfo(templateInfo);

            templateMatchInfo.AddMatchDisposition(new MatchInfo(MatchInfo.BuiltIn.Name, "test", MatchKind.Partial));
            Assert.True(WellKnownSearchFilters.MatchesAllCriteria(templateMatchInfo));
            Assert.True(WellKnownSearchFilters.MatchesAtLeastOneCriteria(templateMatchInfo));
        }
示例#15
0
        public void EmptyMatchDisposition_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo templateMatchInfo = new TemplateMatchInfo(templateInfo);

            Assert.False(WellKnownSearchFilters.MatchesAllCriteria(templateMatchInfo));
            Assert.False(WellKnownSearchFilters.MatchesAtLeastOneCriteria(templateMatchInfo));
            Assert.Empty(templateMatchInfo.GetInvalidParameterNames());
            Assert.Equal(0, templateMatchInfo.GetValidTemplateParameters().Count);
        }
示例#16
0
        public void TypeMatch_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo templateMatchInfo = new TemplateMatchInfo(templateInfo);

            templateMatchInfo.AddMatchDisposition(new MatchInfo(MatchInfo.BuiltIn.Type, "test", MatchKind.Exact));
            Assert.True(WellKnownSearchFilters.MatchesAllCriteria(templateMatchInfo));
            Assert.True(WellKnownSearchFilters.MatchesAtLeastOneCriteria(templateMatchInfo));
            Assert.True(templateMatchInfo.IsInvokableMatch());
            Assert.False(templateMatchInfo.HasAmbiguousParameterValueMatch());
        }
        public void TagFilterTests_TemplateWithoutTags(string testTag, MatchKind?kind)
        {
            MockTemplateInfo template = new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test")
                                        .WithTag("language", "L1")
                                        .WithTag("type", "project")
                                        .WithBaselineInfo("app", "standard");

            var       filter = WellKnownSearchFilters.ClassificationFilter(testTag);
            MatchInfo?result = filter(template);

            Assert.Equal(kind, result?.Kind);
        }
示例#18
0
        private string GenerateLocalCache()
        {
            ITemplatePackageInfo packOneInfo   = new MockTemplatePackageInfo("PackOne", "1.0.0");
            ITemplatePackageInfo packTwoInfo   = new MockTemplatePackageInfo("PackTwo", "1.6.0");
            ITemplatePackageInfo packThreeInfo = new MockTemplatePackageInfo("PackThree", "2.1");

            ITemplateInfo fooOneTemplate =
                new MockTemplateInfo("foo1", name: "MockFooTemplateOne", identity: "Mock.Foo.1", groupIdentity: "Mock.Foo", author: "TestAuthor")
                .WithClassifications("CSharp", "Library")
                .WithDescription("Mock Foo template one")
                .WithChoiceParameter("Framework", "netcoreapp3.0", "netcoreapp3.1")
                .WithTag("language", "C#")
                .WithTag("type", "project");

            ITemplateInfo fooTwoTemplate =
                new MockTemplateInfo("foo2", name: "MockFooTemplateTwo", identity: "Mock.Foo.2", groupIdentity: "Mock.Foo")
                .WithClassifications("CSharp", "Console")
                .WithDescription("Mock Foo template two")
                .WithChoiceParameter("Framework", "netcoreapp2.0", "netcoreapp2.1", "netcoreapp3.1")
                .WithTag("language", "C#");

            ITemplateInfo barCSharpTemplate =
                new MockTemplateInfo("barC", name: "MockBarCsharpTemplate", identity: "Mock.Bar.1.Csharp", groupIdentity: "Mock.Bar")
                .WithClassifications("CSharp")
                .WithDescription("Mock Bar CSharp template")
                .WithTag("language", "C#");

            ITemplateInfo barFSharpTemplate =
                new MockTemplateInfo("barF", name: "MockBarFSharpTemplate", identity: "Mock.Bar.1.FSharp", groupIdentity: "Mock.Bar")
                .WithClassifications("FSharp")
                .WithDescription("Mock Bar FSharp template")
                .WithTag("language", "F#");

            var fooOneTemplateData    = new TemplateSearchData(fooOneTemplate);
            var fooTwoTemplateData    = new TemplateSearchData(fooTwoTemplate);
            var barCSharpTemplateData = new TemplateSearchData(barCSharpTemplate);
            var barFSharpTemplateData = new TemplateSearchData(barFSharpTemplate);

            var packOne   = new TemplatePackageSearchData(packOneInfo, new[] { fooOneTemplateData });
            var packTwo   = new TemplatePackageSearchData(packTwoInfo, new[] { fooTwoTemplateData });
            var packThree = new TemplatePackageSearchData(packThreeInfo, new[] { barCSharpTemplateData, barFSharpTemplateData });

            var cache = new TemplateSearchCache(new[] { packOne, packTwo, packThree });

            string targetPath = Path.Combine(TestUtils.CreateTemporaryFolder(), "searchCacheV2.json");

            File.WriteAllText(targetPath, cache.ToJObject().ToString());
            return(targetPath);
        }
示例#19
0
        public void CanIgnoreTemplateGroupsWithConstraints()
        {
            var template1 = new MockTemplateInfo("foo1", identity: "foo.1")
                            .WithConstraints(new TemplateConstraintInfo("test", "yes"));

            var template2 = new MockTemplateInfo("foo2", identity: "foo.2")
                            .WithConstraints(new TemplateConstraintInfo("test", "no"));

            var template3 = new MockTemplateInfo("foo3", identity: "foo.3")
                            .WithConstraints(new TemplateConstraintInfo("test", "bad-params"));

            var templateGroups = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template1, template2, template3 }, A.Fake <IHostSpecificDataLoader>()));

            ITemplateEngineHost        host           = TestHost.GetVirtualHost(additionalComponents: new[] { (typeof(ITemplateConstraintFactory), (IIdentifiedComponent) new TestConstraintFactory("test")) });
        public void TagFilterTests_TemplateWithTags(string templateTags, string testTag, MatchKind?kind)
        {
            const string separator         = "||";
            var          templateTagsArray = templateTags.Split(new[] { separator }, System.StringSplitOptions.None);

            MockTemplateInfo template = new MockTemplateInfo("console", name: "Long name for Console App", identity: "Console.App.T1", groupIdentity: "Console.App.Test")
                                        .WithTag("language", "L1")
                                        .WithTag("type", "project")
                                        .WithBaselineInfo("app", "standard")
                                        .WithClassifications(templateTagsArray);

            var       filter = WellKnownSearchFilters.ClassificationFilter(testTag);
            MatchInfo?result = filter(template);

            Assert.Equal(kind, result?.Kind);
        }
        public void EmptyMatchDisposition_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo TemplateMatchInfo = new TemplateMatchInfo(templateInfo);

            Assert.False(TemplateMatchInfo.IsMatch);
            Assert.False(TemplateMatchInfo.IsMatchExceptContext());
            Assert.False(TemplateMatchInfo.IsPartialMatch);
            Assert.False(TemplateMatchInfo.IsPartialMatchExceptContext());
            Assert.False(TemplateMatchInfo.IsInvokableMatch());
            Assert.False(TemplateMatchInfo.HasAmbiguousParameterValueMatch());
            Assert.False(TemplateMatchInfo.HasParameterMismatch());
            Assert.False(TemplateMatchInfo.HasParseError());
            Assert.Equal(0, TemplateMatchInfo.GetInvalidParameterNames().Count);
            Assert.Equal(0, TemplateMatchInfo.GetValidTemplateParameters().Count);
        }
示例#22
0
        public Task CannotCreateCommandForInvalidParameter()
        {
            var template = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group")
                           .WithParameters("have:colon", "n1", "n2");

            var paramSymbolInfo = new Dictionary <string, string>()
            {
                { "longName", "name" },
                { "shortName", "n" }
            };
            var symbolInfo = new Dictionary <string, IReadOnlyDictionary <string, string> >
            {
                { "n1", paramSymbolInfo },
                { "n2", paramSymbolInfo }
            };

            var hostDataLoader = A.Fake <IHostSpecificDataLoader>();

            A.CallTo(() => hostDataLoader.ReadHostSpecificTemplateData(template)).Returns(new HostSpecificTemplateData(symbolInfo));

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, hostDataLoader))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand             myCommand   = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var                    parseResult = myCommand.Parse($" new foo");
            InstantiateCommandArgs args        = InstantiateCommandArgs.FromNewCommandArgs(new NewCommandArgs(myCommand, parseResult));

            try
            {
                _ = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());
            }
            catch (InvalidTemplateParametersException e)
            {
                Assert.Equal(2, e.ParameterErrors.Count);
                Assert.Equal(templateGroup.Templates.Single(), e.Template);

                return(Verifier.Verify(e.Message, _verifySettings.Settings));
            }

            Assert.True(false, "should not land here");
            return(Task.FromResult(1));
        }
        public void ContextMatch_ReportsCorrectly()
        {
            ITemplateInfo      templateInfo      = new MockTemplateInfo();
            ITemplateMatchInfo TemplateMatchInfo = new TemplateMatchInfo(templateInfo);

            TemplateMatchInfo.AddDisposition(new MatchInfo {
                Location = MatchLocation.Context, Kind = MatchKind.Exact
            });
            Assert.True(TemplateMatchInfo.IsMatch);
            Assert.False(TemplateMatchInfo.IsMatchExceptContext());
            Assert.True(TemplateMatchInfo.IsPartialMatch);
            Assert.False(TemplateMatchInfo.IsPartialMatchExceptContext());
            Assert.True(TemplateMatchInfo.IsInvokableMatch());
            Assert.False(TemplateMatchInfo.HasAmbiguousParameterValueMatch());
            Assert.False(TemplateMatchInfo.HasParameterMismatch());
            Assert.False(TemplateMatchInfo.HasParseError());
        }
示例#24
0
        private static IReadOnlyDictionary <string, IReadOnlyList <ITemplateNameSearchResult> > GetMockNameSearchResults()
        {
            Dictionary <string, IReadOnlyList <ITemplateNameSearchResult> > dataForSources = new Dictionary <string, IReadOnlyList <ITemplateNameSearchResult> >();

            List <TemplateNameSearchResult> sourceOneResults = new List <TemplateNameSearchResult>();

            ITemplateInfo            sourceOneTemplateOne = new MockTemplateInfo("foo1", name: "MockFooTemplateOne", identity: "Mock.Foo.1").WithDescription("Mock Foo template one");
            TemplateNameSearchResult sourceOneResultOne   = new TemplateNameSearchResult(sourceOneTemplateOne, _fooPackInfo);

            sourceOneResults.Add(sourceOneResultOne);

            ITemplateInfo            sourceOneTemplateTwo = new MockTemplateInfo("foo2", name: "MockFooTemplateTwo", identity: "Mock.Foo.2").WithDescription("Mock Foo template two");
            TemplateNameSearchResult sourceOneResultTwo   = new TemplateNameSearchResult(sourceOneTemplateTwo, _fooPackInfo);

            sourceOneResults.Add(sourceOneResultTwo);

            ITemplateInfo            sourceOneTemplateThree = new MockTemplateInfo("bar1", name: "MockBarTemplateOne", identity: "Mock.Bar.1").WithDescription("Mock Bar template one");
            TemplateNameSearchResult sourceOneResultThree   = new TemplateNameSearchResult(sourceOneTemplateThree, _barPackInfo);

            sourceOneResults.Add(sourceOneResultThree);

            dataForSources["source one"] = sourceOneResults;

            List <TemplateNameSearchResult> sourceTwoResults = new List <TemplateNameSearchResult>();

            ITemplateInfo sourceTwoTemplateOne = new MockTemplateInfo("red", name: "MockRedTemplate", identity: "Mock.Red.1").WithDescription("Mock red template");

            TemplateNameSearchResult sourceTwoResultOne = new TemplateNameSearchResult(sourceTwoTemplateOne, _redPackInfo);

            sourceTwoResults.Add(sourceTwoResultOne);

            ITemplateInfo            sourceTwoTemplateTwo = new MockTemplateInfo("blue", name: "MockBlueTemplate", identity: "Mock.Blue.1").WithDescription("Mock blue template");
            TemplateNameSearchResult sourceTwoResultTwo   = new TemplateNameSearchResult(sourceTwoTemplateTwo, _bluePackInfo);

            sourceTwoResults.Add(sourceTwoResultTwo);

            ITemplateInfo            sourceTwoTemplateThree = new MockTemplateInfo("green", name: "MockGreenTemplate", identity: "Mock.Green.1").WithDescription("Mock green template");
            TemplateNameSearchResult sourceTwoResultThree   = new TemplateNameSearchResult(sourceTwoTemplateThree, _greenPackInfo);

            sourceTwoResults.Add(sourceTwoResultThree);

            dataForSources["source two"] = sourceTwoResults;

            return(dataForSources);
        }
示例#25
0
#pragma warning restore SA1117 // Parameters should be on same line or separate lines
        public void CanShowTemplateDescription(string name, string?language, string?author, string?description, string expected)
        {
            MockTemplateInfo templateInfo = new MockTemplateInfo(
                "console2",
                name: name,
                identity: "Console.App2",
                author: author);

            templateInfo.WithDescription(description);
            if (language != null)
            {
                templateInfo.WithTag("language", language);
            }

            CliTemplateInfo cliTemplateInfo = new CliTemplateInfo(templateInfo, HostSpecificTemplateData.Default);
            StringWriter    sw = new StringWriter();

            InstantiateCommand.ShowTemplateDetailHeaders(cliTemplateInfo, sw);
            Assert.Equal(expected, sw.ToString());
        }
示例#26
0
        public Task CanShowHintsForOtherTemplates()
        {
            var template1 = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group").WithTag("language", "Lang1").WithTag("type", "project");
            var template2 = new MockTemplateInfo("foo", identity: "foo.2", groupIdentity: "foo.group").WithTag("language", "Lang2").WithTag("type", "item");

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template1, template2 }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost host = TestHost.GetVirtualHost();

            NewCommand             myCommand   = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            ParseResult            parseResult = myCommand.Parse("new -h");
            InstantiateCommandArgs args        = InstantiateCommandArgs.FromNewCommandArgs(new NewCommandArgs(myCommand, parseResult));

            StringWriter sw = new StringWriter();

            InstantiateCommand.ShowHintForOtherTemplates(templateGroup, templateGroup.Templates[0], args, sw);
            return(Verifier.Verify(sw.ToString(), _verifySettings.Settings));
        }
        public void UnknownParameterNameHasNullCanonicalValueTest()
        {
            ITemplateParameter param = new MockParameter()
            {
                Name    = "TestName",
                Choices = null
            };
            IReadOnlyList <ITemplateParameter> parametersForTemplate = new List <ITemplateParameter>()
            {
                param
            };

            ITemplateInfo template = new MockTemplateInfo()
            {
                Parameters = parametersForTemplate
            };

            string canonical = TelemetryHelper.GetCanonicalValueForChoiceParamOrDefault(template, "OtherName", "whatever");

            Assert.Null(canonical);
        }
示例#28
0
        internal void Create_CanEvaluateTemplateWithSubcommandShortName(string command, string?expectedIdentitiesStr)
        {
            MockTemplateInfo template = new MockTemplateInfo(command, identity: $"{command}Template");

            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            string[]                   expectedIdentities = expectedIdentitiesStr?.Split("|") ?? Array.Empty <string>();
            ITemplateEngineHost        host     = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings = new EngineEnvironmentSettings(host, virtualizeSettings: true);

            NewCommand myCommand          = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());
            var        parseResult        = myCommand.Parse($"new create {command}");
            var        instantiateCommand = (InstantiateCommand)parseResult.CommandResult.Command;
            var        args             = new InstantiateCommandArgs(instantiateCommand, parseResult);
            var        templateCommands = InstantiateCommand.GetTemplateCommand(args, settings, A.Fake <TemplatePackageManager>(), templateGroup);

            Assert.Equal(expectedIdentities.Count(), templateCommands.Count);
            Assert.Equal(expectedIdentities.OrderBy(s => s), templateCommands.Select(templateCommand => templateCommand.Template.Identity).OrderBy(s => s));
        }
示例#29
0
        public void CanShowCommandOptions_NoOptions()
        {
            var           template      = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group").WithTag("type", "MyType");
            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand myCommand = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());

            TemplateCommand templateCommand = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());

            StringWriter sw          = new StringWriter();
            HelpContext  helpContext = new HelpContext(new HelpBuilder(LocalizationResources.Instance), myCommand, sw);

            InstantiateCommand.ShowTemplateSpecificOptions(new[] { templateCommand }, helpContext);
            Assert.Equal($"Template options:{Environment.NewLine}   (No options){Environment.NewLine}", sw.ToString());
        }
示例#30
0
        public Task CanShowCommandOptions_Basic()
        {
            var           template      = new MockTemplateInfo("foo", identity: "foo.1", groupIdentity: "foo.group");
            TemplateGroup templateGroup = TemplateGroup.FromTemplateList(
                CliTemplateInfo.FromTemplateInfo(new[] { template }, A.Fake <IHostSpecificDataLoader>()))
                                          .Single();

            ITemplateEngineHost        host           = TestHost.GetVirtualHost();
            IEngineEnvironmentSettings settings       = new EngineEnvironmentSettings(host, virtualizeSettings: true);
            TemplatePackageManager     packageManager = A.Fake <TemplatePackageManager>();

            NewCommand myCommand = (NewCommand)NewCommandFactory.Create("new", _ => host, _ => new TelemetryLogger(null, false), new NewCommandCallbacks());

            TemplateCommand templateCommand = new TemplateCommand(myCommand, settings, packageManager, templateGroup, templateGroup.Templates.Single());

            StringWriter sw          = new StringWriter();
            HelpContext  helpContext = new HelpContext(new HelpBuilder(LocalizationResources.Instance), myCommand, sw);

            InstantiateCommand.ShowCommandOptions(new[] { templateCommand }, templateCommand, helpContext);
            return(Verifier.Verify(sw.ToString(), _verifySettings.Settings));
        }