public void TestRunCommandOnWhenCommandExists() { // GIVEN a mock event handler Mock <EventHandler <CommandEventArgs> > mockHandler = new Mock <EventHandler <CommandEventArgs> >(); mockHandler.Setup(h => h(It.IsAny <PluginTestUtil>(), It.IsAny <CommandEventArgs>())); // AND a command with that handler Command command = new Command("my-command", "xyz", "abc", mockHandler.Object); // AND a mock plugin with that command Mock <ExtendedPluginBase> mockPlugin = new Mock <ExtendedPluginBase>(new PluginLoadData(null, null, null, null, (Logger)null, null)); mockPlugin.Setup(p => p.Commands).Returns(new Command[] { command }); // WHEN the command is run on the plugin through the test util PluginTestUtil pluginTestUtil = new PluginTestUtil(); pluginTestUtil.RunCommandOn("my-command with arguments -and=many -f -l -a -g -s", mockPlugin.Object); // THEN the command handler was invoked with the correct args mockHandler.Verify(h => h(pluginTestUtil, It.Is <CommandEventArgs>(a => a.OriginalCommand == "my-command with arguments -and=many -f -l -a -g -s" && a.Arguments.Length == 2 && a.Arguments[1] == "arguments" && a.Command == command && a.Flags.Count == 6 && a.Flags.Get("and") == "many" && a.RawArguments.Length == 8 && a.RawArguments[3] == "-f" )), Times.Once); }
public void TestRunCommandOnWhenCommandDoesNotExists() { // GIVEN a mock event handler Mock <EventHandler <CommandEventArgs> > mockHandler = new Mock <EventHandler <CommandEventArgs> >(); mockHandler.Setup(h => h(It.IsAny <PluginTestUtil>(), It.IsAny <CommandEventArgs>())); // AND a command with a different name Command command = new Command("not-this", "xyz", "abc", mockHandler.Object); // AND a mock plugin with that command Mock <ExtendedPluginBase> mockPlugin = new Mock <ExtendedPluginBase>(new PluginLoadData(null, null, null, null, (Logger)null, null)); mockPlugin.Setup(p => p.Commands).Returns(new Command[] { command }); // THEN an exception is thrown // TODO DR3 this is a poor choice of exception Assert.ThrowsException <InvalidOperationException>(() => { // WHEN the command is run on the plugin through the test util PluginTestUtil pluginTestUtil = new PluginTestUtil(); pluginTestUtil.RunCommandOn("my-command with arguments -and=many -f -l -a -g -s", mockPlugin.Object); }); }