Esempio n. 1
0
        public void Allow_Auto_Help_To_Be_Registered()
        {
            // arrange
            var mockRenderer = new Mock <ITemplateRenderer>();

            mockRenderer.SetupAllProperties();
            var isHelpRequested = false;
            var builder         = DefaultBuilder.CreateDefaultBuilder()
                                  .RegisterExtensions()
                                  .AddAutoHelp((results, exceptions) =>
            {
                isHelpRequested = true;
                var first       = results.Keys.OfType <UtilOptions>().FirstOrDefault();
                if (first != null && first.IsHelpRequested)
                {
                    return(results[first].Id);
                }
                return(null);
            }, factory =>
            {
                factory.TemplateRenderer = mockRenderer.Object;
                return(factory);
            });

            // act
            builder.Parse("-h".Split(' '));

            // assert
            isHelpRequested.Should().BeTrue();
        }
Esempio n. 2
0
        public void Work_With_Letters()
        {
            // arrange
            var    builder = DefaultBuilder.CreateDefaultBuilder();
            var    root    = builder.Context.ParserRepository.Get("util");
            string value   = null;
            var    sut     = new SeparatedSwitch(root, 'v', "value", (o, s) => { value = s; })
            {
                Separator = ":"
            };
            var info = new IterationInfo("-v:a".Split(' '));

            // act
            // assert
            var canConsumeResult = sut.CanConsume("", info);

            canConsumeResult.ConsumingParameter.Should().BeSameAs(sut);
            canConsumeResult.NumConsumed.Should().Be(1);
            canConsumeResult.ParseExceptions.Should().BeEmpty();
            canConsumeResult.Info.Index.Should().Be(1);

            var consumeResult = sut.Consume("", new ConsumptionRequest(info));

            consumeResult.ConsumingParameter.Should().BeSameAs(sut);
            consumeResult.NumConsumed.Should().Be(1);
            consumeResult.ParseExceptions.Should().BeEmpty();
            consumeResult.Info.Index.Should().Be(1);
        }
Esempio n. 3
0
        public void Not_Throw_If_An_Unexpected_Argument_Is_Found()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();
            var strat   = new ParseStrategy(builder.Context);
            var mock    = new Mock <IPotentialConsumerStrategy>();

            mock.SetupAllProperties();
            mock.Setup(s => s.IdentifyPotentialConsumer(It.IsAny <PotentialConsumerRequest>())).Returns(
                new PotentialConsumerResult(builder.Context.PathToRoot("util"), new ConsumptionResult[0],
                                            new IterationInfo("-h".Split(' '))));
            strat.PotentialConsumerStrategy = mock.Object;
            IParseResult res        = null;
            Action       mightThrow = () => res = strat.Parse("-h".Split(' '));

            // act
            // assert
            mightThrow.Should().NotThrow();
            var isParsed = false;

            res.WhenError(exceptions =>
            {
                exceptions.Single().Should().BeOfType <UnexpectedArgException>();
                isParsed = true;
            });
            isParsed.Should().BeTrue();
        }
Esempio n. 4
0
        public void Can_build_book()
        {
            var book = DefaultBuilder.Create <Book>()
                       .Build();

            Assert.IsInstanceOfType(book, typeof(Book));
        }
Esempio n. 5
0
        public void TestPipOutputFingerprinting(FileExistence existence, FileExistence anotherExistence)
        {
            // Arrange
            var          pathTable  = m_context.PathTable;
            var          executable = FileArtifact.CreateSourceFile(AbsolutePath.Create(pathTable, X("/x/pkgs/tool.exe")));
            AbsolutePath outputPath = AbsolutePath.Create(pathTable, X("/x/obj/working/out.bin"));

            FileArtifactWithAttributes output = new FileArtifactWithAttributes(outputPath, rewriteCount: 1, fileExistence: existence);
            Process process = DefaultBuilder.WithOutputs(output).Build();

            Process processSecondVersion = DefaultBuilder.WithOutputs(output.CreateNextWrittenVersion()).Build();

            var outputWithDifferenceExistence  = new FileArtifactWithAttributes(outputPath, rewriteCount: 1, fileExistence: anotherExistence);
            var processWithDifferenceExistence = DefaultBuilder.WithOutputs(outputWithDifferenceExistence).Build();

            var fingerprinter = CreateFingerprinter(executable);

            // Act
            var fingerprint = fingerprinter.ComputeFingerprint(process);

            // Assert
            XAssert.AreEqual(fingerprint, fingerprinter.ComputeFingerprint(processSecondVersion),
                             "RewriteCount should not affect the fingerprint");
            XAssert.AreNotEqual(fingerprint, fingerprinter.ComputeFingerprint(processWithDifferenceExistence),
                                "Two process with the same output path but with different attributes should produce different fingerprints");
        }
Esempio n. 6
0
        public void BindDefault(DefaultBuilder builder)
        {
            _defaultBuilders.Add(builder);

            // new types available - clear caches
            ClearCaches();
        }
        public void Can_assert_result()
        {
            DefaultBuilder.Create <TestingClass>()
            .When()
            .Invoke(x => 5000)

            .ThenIs(5000);
        }
Esempio n. 8
0
        public void Not_Throw_If_Asking_For_An_Unregistered_Context()
        {
            // arrange
            var    builder     = DefaultBuilder.CreateDefaultBuilder();
            Action mightThrow0 = () => builder.Context.ToExtensionContext();

            // act
            // assert
            mightThrow0.Should().NotThrow();
        }
        public void Return_The_Children_Of_The_Requested_Node()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();

            // act
            // assert
            builder.Context.HierarchyRepository.GetChildren("util").Should()
            .Contain("clipboard convert firewall".Split(' '));
        }
        public void Book_requires_title_and_serial()
        {
            var bookWithoutTitle = DefaultBuilder.Create <Book>()
                                   .Build();

            _sut.When()
            .Validate(bookWithoutTitle)

            .ThenExpectException <ArgumentException>();
        }
Esempio n. 11
0
        public void Valid_book_is_valid()
        {
            DefaultBuilder.Create <Book>()
            .Valid()

            .When()
            .PerformValidateModel("book")

            .ThenSuccess();
        }
Esempio n. 12
0
        public void Default_book_isnt_valid()
        {
            DefaultBuilder.Create <Book>()

            .When()
            .PerformValidateModel("book")

            .ThenExpectException <ArgumentException>()
            .WithParameter("book");
        }
        public void Calls_book_serial_validator_validate_method()
        {
            var book = DefaultBuilder.Create <Book>()
                       .Valid()
                       .Build();

            _sut.When()
            .Validate(book)

            .ThenReceived(BookSerialValidator, x => x.Validate(book.Serial));
        }
        public void Can_validate_valid_book()
        {
            var book = DefaultBuilder.Create <Book>()
                       .Valid()
                       .Build();

            _sut.When()
            .Validate(book)

            .ThenSuccess();
        }
Esempio n. 15
0
        public void Allow_Themes_To_Be_Set_After_They_Have_Been_Created()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder()
                          .SetTheme("util", Theme.Cool)
                          .SetTheme("util", Theme.Warm);

            // act
            // assert
            ContextBuilderExtensions.ParserThemes[builder.Context.ParserRepository.Get("util")].Should().Be(Theme.Warm);
        }
        public void Valid_serial_is_valid()
        {
            var serial = DefaultBuilder.Create <BookSerial>()
                         .Valid()
                         .Build();

            _sut.When()
            .Validate(serial)

            .ThenSuccess();
        }
Esempio n. 17
0
        public void Only_Group_If_The_Entire_Arg_Matches_And_Not_When_A_Subtring_Matches()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();
            var request = new MutateArgsRequest("--help".Split(' '), builder.Context.ParserRepository.Get("util").ToEnumerableOfOne(), builder.Context);
            var mutator = new ArgsMutator(builder.Context);

            // act
            // assert
            mutator.Mutate(request).Should().BeEquivalentTo("--help".ToEnumerableOfOne(), "Although the arg contains -h, it is not the entire arg and thus does not match");
        }
        public void First_group_must_be_3_characters_long()
        {
            var serial = DefaultBuilder.Create <BookSerial>()
                         .Valid()
                         .SetGroup(0, "12")
                         .Build();

            _sut.When()
            .Validate(serial)

            .ThenExpectException <GroupParseException>();
        }
        public void Serial_must_have_three_groups()
        {
            var serial = DefaultBuilder.Create <BookSerial>()
                         .WithGroup("123")
                         .WithGroup("123")
                         .Build();

            _sut.When()
            .Validate(serial)

            .ThenExpectException <GroupCountException>();
        }
        public void Checking_result_from_action_raises_error()
        {
            var test = DefaultBuilder.Create <TestingClass>()
                       .When()
                       .Invoke(x => { });

            void When()
            {
                test.ThenIs(true);
            }

            Assert.ThrowsException <NoResultFromActionException>((Action)When);
        }
        public void Then_success_fails_if_exception_is_thrown()
        {
            var test = DefaultBuilder.Create <TestingClass>()
                       .When()
                       .Invoke(x => throw new Exception());

            void When()
            {
                test.ThenSuccess();
            }

            Assert.ThrowsException <TestFailedException>((Action)When);
        }
        public void Asserting_incorrect_result_raises_Exception()
        {
            var test = DefaultBuilder.Create <TestingClass>()
                       .When()
                       .Invoke(x => 4999);

            void When()
            {
                test.ThenIs(5000);
            }

            Assert.ThrowsException <TestFailedException>((Action)When);
        }
Esempio n. 23
0
        public void Create_A_Theme_Repository_With_All_Added_Themes()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();

            builder.SetTheme("util", Theme.Cool);

            // act
            var res = builder.Context.ToExtensionContext();

            // assert
            res.ThemeRepository.Get("util").Should().BeSameAs(Theme.Cool);
        }
Esempio n. 24
0
        public void Not_Do_Anything_For_Positionals()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();

            builder.SetSwitchTokens("#", "##");

            // act
            builder.AddParser("whatever").WithPositional((o, s) => { });

            // assert
            builder.Context.ParserRepository.Get("whatever").Should().NotBeNull();
        }
        public void Book_title_cannot_be_null()
        {
            var bookWithoutTitle = DefaultBuilder.Create <Book>()
                                   .Valid()
                                   .With(x => x.Title = null)
                                   .Build();

            _sut.When()
            .Validate(bookWithoutTitle)

            .ThenExpectException <ArgumentException>()
            .WithParameter(nameof(Book.Title));
        }
        public void Doesnt_stop_exception_from_validate()
        {
            BookSerialValidator.When(x => x.Validate(Arg.Any <string>())).Throw <TestingException>();

            var book = DefaultBuilder.Create <Book>()
                       .Valid()
                       .Build();

            _sut.When()
            .Validate(book)

            .ThenExpectException <TestingException>();
        }
        public void ShouldBuiltDateReturnGoodValueForDefault()
        {
            //Arrange
            var firstDate  = new DateTime(2000, 1, 1);
            var secondDate = new DateTime(2021, 5, 14);

            const string expedtedDateString = "01.01.2000 - 14.05.2021";

            var builder = new DefaultBuilder();

            //Act
            var actualOutput = builder.BuildDate(firstDate, secondDate);

            //Assert
            Assert.Equal(expedtedDateString, actualOutput);
        }
        public void Only_Consume_Until_The_Mutated_Args_No_Longer_Match()
        {
            // arrange
            var builder = DefaultBuilder.CreateDefaultBuilder();
            var fac     = new IterationInfoFactory(builder.Context);
            var parsers = builder.Context.PathToRoot("firewall").Reverse();
            var res     = new ChainIdentificationResult(parsers, new[] { "firewall" });
            var req     = new IterationInfoRequest(res, "firewall -s -l".Split(' '), "firewall -h -h -h".Split(' '));

            // act
            var result = fac.Create(req);

            // assert
            result.Args.Should().BeEquivalentTo("firewall -s -l".Split(' '));
            result.Index.Should().Be(1);
        }
Esempio n. 29
0
        public void Consume_Everything_After_The_Separator_As_A_Single_Value0()
        {
            // arrange
            var    builder = DefaultBuilder.CreateDefaultBuilder();
            var    root    = builder.Context.ParserRepository.Get("util");
            string value   = null;
            var    sut     = new SeparatedSwitch(root, 'v', "value", (o, s) => { value = s; });

            // act
            var info = new IterationInfo("-v=a".Split(' '));
            var res  = sut.Consume("", new ConsumptionRequest(info));

            // assert
            res.ConsumingParameter.Should().BeSameAs(sut);
            value.Should().Be("a");
        }
Esempio n. 30
0
        private static string GetRegex(int rule, IDictionary <int, Body> rules, IDictionary <int, Builder> overrides)
        {
            IDictionary <int, string> cache          = new Dictionary <int, string>();
            DefaultBuilder            defaultBuilder = new DefaultBuilder();

            string GetRegexInternal(int rule, IDictionary <int, Body> rules, IDictionary <int, Builder> overrides)
            {
                if (!overrides.TryGetValue(rule, out Builder builder))
                {
                    builder = defaultBuilder;
                }
                return(builder.Build(rules[rule], r => GetRegexInternal(r, rules, overrides)));
            }

            return(GetRegexInternal(rule, rules, overrides));
        }