public async Task CanCreateBagWithDefaultValues() { var tracker = new BagTracker(); using (var context = CreateContext( commands => commands .Add("c", Track <BagWithDefaultValues>(tracker)) )) { await context.Executor.ExecuteAsync <object>("c", default); tracker.Assert <BagWithDefaultValues>( "c", bag => { Assert.IsFalse(bag.Async); //Assert.IsFalse(bag.CanThrow); Assert.IsFalse(bag.BoolOnly); Assert.IsFalse(bag.BoolWithDefaultValue1); Assert.IsTrue(bag.BoolWithDefaultValue2); Assert.IsNull(bag.StringOnly); Assert.AreEqual("foo", bag.StringWithDefaultValue); Assert.AreEqual(0, bag.Int32Only); Assert.IsNull(bag.NullableInt32Only); Assert.AreEqual(3, bag.Int32WithDefaultValue); Assert.AreEqual(DateTime.MinValue, bag.DateTimeOnly); Assert.IsNull(bag.NullableDateTime); Assert.AreEqual(new DateTime(2018, 1, 1), bag.DateTimeWithDefaultValue); Assert.IsNull(bag.ListOnly); } ); } }
internal static ExecuteCallback <TBag> Track <TBag>(BagTracker bags) where TBag : ICommandBag, new() { return((name, bag, cancellationToken) => { bags.Add(name, bag); return Task.CompletedTask; }); }
public void DisallowUnsupportedParameterType() { Assert.That.Throws <DynamicException>( () => { var bags = new BagTracker(); using (CreateContext( commands => commands .Add("c", Track <BagWithUnsupportedParameterType>(bags)) )) { } }, filter => filter.When(name: "^RegisterCommand"), inner => inner.When(name: "^UnsupportedParameterTypeException") ); }
public void DisallowNonSequentialParameterPosition() { Assert.That.Throws <DynamicException>( () => { var bags = new BagTracker(); using (CreateContext( commands => commands .Add("c", Track <BagWithInvalidParameterPosition>(bags)) )) { } }, filter => filter.When(name: "^RegisterCommand"), inner => inner.When(name: "^ParameterPositionException") ); }
public void DisallowDuplicateParameterNames() { Assert.That.Throws <DynamicException>( () => { var bags = new BagTracker(); using (CreateContext( commands => commands .Add("c", Track <BagWithDuplicateParameter>(bags)) )) { } }, filter => filter.When(name: "^RegisterCommand"), inner => inner.When(name: "^DuplicateParameterName") ); }
public void DisallowNonExistingCommandName() { Assert.That.Throws <DynamicException>( () => { var bags = new BagTracker(); using (var context = CreateContext( commands => commands .Add("c", Track <SimpleBag>(bags)) )) { context.Executor.ExecuteAsync("b").GetAwaiter().GetResult(); } }, filter => filter.When(name: "^InvalidCommandLine") ); }
public async Task CanCreateBagWithCommandLineValues() { var tracker = new BagTracker(); using (var context = CreateContext( commands => commands .Add("c", Track <BagWithMappedValues>(tracker)) )) { await context.Executor.ExecuteAsync <object>("c", default); tracker.Assert <BagWithMappedValues>( "c", bag => { } ); } }
public void DisallowDuplicateCommandNames() { var ex = Assert.ThrowsAny <DynamicException>( () => { var bags = new BagTracker(); using (CreateContext( commands => commands .Add("c", Track <SimpleBag>(bags)) .Add("c", Track <SimpleBag>(bags)) )) { } } // , // filter => filter.When(name: "^RegisterCommand"), // inner => inner.When(name: "^DuplicateCommandName") ); }
public async Task CanMapParameterByPosition() { var tracker = new BagTracker(); using (var context = CreateContext( commands => commands.Add("c", Track <BagWithPositionalValues>(tracker)), (ExecuteExceptionCallback)(ex => throw ex) )) { await context.Executor.ExecuteAsync <object>("c 3 kmh -ismetric", default); tracker.Assert <BagWithPositionalValues>("c", bag => { Assert.AreEqual(3, bag.Speed); Assert.AreEqual("kmh", bag.Unit); Assert.AreEqual(true, bag.IsMetric); }); } }
public async Task CanCreateBagWithFlagValues() { var tracker = new BagTracker(); using (var context = CreateContext( commands => commands .Add("c", Track <SimpleBag>(tracker)) )) { await context.Executor.ExecuteAsync <object>("c -async -canthrow=true", default); tracker.Assert <SimpleBag>( "c", bag => { Assert.IsTrue(bag.Async); //Assert.IsTrue(bag.CanThrow); } ); } }
public async Task CanMapParameterByAlias() { var tracker = new BagTracker(); using (var context = CreateContext( commands => commands .Add("c", Track <BagWithAliases>(tracker)) )) { await context.Executor.ExecuteAsync <object>("c -swa=abc", default); tracker.Assert <BagWithAliases>( "c", bag => { Assert.IsFalse(bag.Async); //Assert.IsFalse(bag.CanThrow); Assert.AreEqual("abc", bag.StringWithAlias); } ); } }