public void TestArgumentFields()
        {
            using (MockCommandLine command = new MockCommandLine())
            {
                CommandLineExternal external = new CommandLineExternal();
                external.Command   = command.ScriptFilename;
                external.Arguments = "$$ \"$filename$\"";

                using (MockDicomPresentationImage image = new MockDicomPresentationImage())
                {
                    Assert.IsFalse(external.CanLaunch(image), "Fields are case sensitive - unresolved field should fail the launch");

                    external.Arguments = "$$ \"$FILENAME$\"";

                    Assert.IsTrue(external.CanLaunch(image), "Fields are case sensitive - unresolved field should fail the launch");

                    external.Launch(image);

                    Thread.Sleep(_processEndWaitDelay);                     // wait for the external to finish
                    command.Refresh();

                    Trace.WriteLine(string.Format("Command Execution Report"));
                    Trace.WriteLine(command.ExecutionReport);

                    AssertAreEqualIgnoreCase("$", command.ExecutedArguments[0], "Wrong argument passed at index {0}", 0);

                    // these file paths may or may not have spaces in them, but we don't care either way for this test
                    AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[1].Trim('"'), "Wrong argument passed at index {0}", 1);
                }
            }
        }
        public void TestBasic()
        {
            string workingDirectory = Environment.CurrentDirectory;

            using (MockCommandLine command = new MockCommandLine())
            {
                CommandLineExternal external = new CommandLineExternal();
                external.Command = command.ScriptFilename;

                Assert.IsTrue(external.IsValid, "Minimum parameters for Command Line External should be just the command itself");

                using (MockDicomPresentationImage image = new MockDicomPresentationImage())
                {
                    Assert.IsTrue(external.CanLaunch(image), "Check that external can launch the dummy image");

                    external.Launch(image);

                    Thread.Sleep(_processEndWaitDelay);                     // wait for the external to finish
                    command.Refresh();

                    Trace.WriteLine(string.Format("Command Execution Report"));
                    Trace.WriteLine(command.ExecutionReport);

                    AssertAreEqualIgnoreCase(external.Command, command.ExecutedCommand, "Wrong command was executed");
                    AssertAreEqualIgnoreCase(workingDirectory, command.ExecutedWorkingDirectory, "Command executed in wrong working directory.");
                }
            }
        }
		public void TestBasic()
		{
			string workingDirectory = Environment.CurrentDirectory;
			using (MockCommandLine command = new MockCommandLine())
			{
				CommandLineExternal external = new CommandLineExternal();
				external.Command = command.ScriptFilename;

				Assert.IsTrue(external.IsValid, "Minimum parameters for Command Line External should be just the command itself");

				using (MockDicomPresentationImage image = new MockDicomPresentationImage())
				{
					Assert.IsTrue(external.CanLaunch(image), "Check that external can launch the dummy image");

					external.Launch(image);

					Thread.Sleep(_processEndWaitDelay); // wait for the external to finish
					command.Refresh();

					Trace.WriteLine(string.Format("Command Execution Report"));
					Trace.WriteLine(command.ExecutionReport);

					AssertAreEqualIgnoreCase(external.Command, command.ExecutedCommand, "Wrong command was executed");
					AssertAreEqualIgnoreCase(workingDirectory, command.ExecutedWorkingDirectory, "Command executed in wrong working directory.");
				}
			}
		}
        public void TestDicomFieldsWithMultipleImages()
        {
            using (MockCommandLine command = new MockCommandLine())
            {
                CommandLineExternal external = new CommandLineExternal();
                external.Command = command.ScriptFilename;
                external.AllowMultiValueFields    = true;
                external.MultiValueFieldSeparator = " ";
                external.Arguments = "\"$00100020$\" \"$00100021$\"";

                using (MockDicomPresentationImage image = new MockDicomPresentationImage())
                {
                    using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
                    {
                        using (MockDicomPresentationImage thirdImage = new MockDicomPresentationImage())
                        {
                            using (MockDicomPresentationImage fourthImage = new MockDicomPresentationImage())
                            {
                                using (MockDicomPresentationImage anotherImage = new MockDicomPresentationImage())
                                {
                                    image[0x00100020].SetStringValue("The cake is a lie");
                                    otherImage[0x00100020].SetStringValue("The cake is a lie");
                                    thirdImage[0x00100020].SetStringValue("The cake is a lie");
                                    fourthImage[0x00100020].SetStringValue("The cake is a lie");
                                    anotherImage[0x00100020].SetStringValue("The cake is a lie");

                                    image[0x00100021].SetStringValue("Look, my liege!");
                                    otherImage[0x00100021].SetStringValue("Camelot!");
                                    thirdImage[0x00100021].SetStringValue("Camelot!");
                                    fourthImage[0x00100021].SetStringValue("Camelot!");
                                    anotherImage[0x00100021].SetStringValue("It's only a model");

                                    IPresentationImage[] images = new IPresentationImage[] { image, otherImage, thirdImage, fourthImage, anotherImage };
                                    Assert.IsTrue(external.CanLaunch(images));
                                    external.Launch(images);

                                    Thread.Sleep(_processEndWaitDelay);                                     // wait for the external to finish
                                    command.Refresh();

                                    Trace.WriteLine(string.Format("Command Execution Report"));
                                    Trace.WriteLine(command.ExecutionReport);

                                    // these file paths may or may not have spaces in them, but we don't care either way for this test
                                    Assert.AreEqual("\"The cake is a lie\"", command.ExecutedArguments[0], "Wrong argument for 00100020 field of first image");
                                    Assert.AreEqual("\"Look, my liege!\"", command.ExecutedArguments[1], "Wrong argument for 00100021 field of first image");
                                }
                            }
                        }
                    }
                }
            }
        }
        public void TestSingleImage()
        {
            using (MockCommandLine command = new MockCommandLine())
            {
                CommandLineExternal external = new CommandLineExternal();
                external.Command = command.ScriptFilename;
                external.AllowMultiValueFields = false;
                external.Arguments             = "\"$FILENAME$\" \"$DIRECTORY$\" \"$EXTENSIONONLY$\" \"$FILENAMEONLY$\" \"$00100020$\" \"$00100021$\"";

                using (MockDicomPresentationImage image = new MockDicomPresentationImage())
                {
                    using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
                    {
                        image[0x00100020].SetStringValue("I've got a lovely bunch of coconuts");
                        image[0x00100021].SetStringValue("Here they are all standing in a row");
                        otherImage[0x00100020].SetStringValue("Big ones, small ones, some as big as your head");

                        Assert.IsFalse(external.CanLaunch(new IPresentationImage[] { image, otherImage }));
                        Assert.IsTrue(external.CanLaunch(image));

                        external.Launch(image);

                        Thread.Sleep(_processEndWaitDelay);                         // wait for the external to finish
                        command.Refresh();

                        Trace.WriteLine(string.Format("Command Execution Report"));
                        Trace.WriteLine(command.ExecutionReport);

                        // these file paths may or may not have spaces in them, but we don't care either way for this test
                        AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[0].Trim('"'), "Wrong argument for filename field");
                        AssertAreEqualIgnoreCase(Path.GetDirectoryName(image.Filename), command.ExecutedArguments[1].Trim('"'), "Wrong argument for directory field");
                        AssertAreEqualIgnoreCase(Path.GetExtension(image.Filename), command.ExecutedArguments[2].Trim('"'), "Wrong argument for extension field");
                        AssertAreEqualIgnoreCase(Path.GetFileName(image.Filename), command.ExecutedArguments[3].Trim('"'), "Wrong argument for filename only field");
                        Assert.AreEqual("I've got a lovely bunch of coconuts", command.ExecutedArguments[4].Trim('"'), "Wrong argument for 00100020 field");
                        Assert.AreEqual("Here they are all standing in a row", command.ExecutedArguments[5].Trim('"'), "Wrong argument for 00100021 field");
                    }
                }
            }
        }
        public void TestMultipleImages()
        {
            using (MockCommandLine command = new MockCommandLine())
            {
                CommandLineExternal external = new CommandLineExternal();
                external.Command = command.ScriptFilename;
                external.AllowMultiValueFields    = true;
                external.MultiValueFieldSeparator = "\" \"";
                external.Arguments = "\"$FILENAME$\" \"$DIRECTORY$\" \"$EXTENSIONONLY$\" \"$FILENAMEONLY$\"";

                using (MockDicomPresentationImage image = new MockDicomPresentationImage())
                {
                    using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
                    {
                        using (MockDicomPresentationImage thirdImage = new MockDicomPresentationImage())
                        {
                            IPresentationImage[] images = new IPresentationImage[] { image, otherImage, thirdImage };
                            Assert.IsTrue(external.CanLaunch(images));
                            external.Launch(images);

                            Thread.Sleep(_processEndWaitDelay);                             // wait for the external to finish
                            command.Refresh();

                            Trace.WriteLine(string.Format("Command Execution Report"));
                            Trace.WriteLine(command.ExecutionReport);

                            // these file paths may or may not have spaces in them, but we don't care either way for this test
                            AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[0].Replace("\"", ""), "Wrong argument for 1st filename field");
                            AssertAreEqualIgnoreCase(otherImage.Filename, command.ExecutedArguments[1].Replace("\"", ""), "Wrong argument for 2nd filename field");
                            AssertAreEqualIgnoreCase(thirdImage.Filename, command.ExecutedArguments[2].Replace("\"", ""), "Wrong argument for 3rd filename field");
                            AssertAreEqualIgnoreCase(Path.GetDirectoryName(image.Filename), command.ExecutedArguments[3].Replace("\"", ""), "Wrong argument for directory field");
                            AssertAreEqualIgnoreCase(Path.GetExtension(image.Filename), command.ExecutedArguments[4].Replace("\"", ""), "Wrong argument for extension field");
                            AssertAreEqualIgnoreCase(Path.GetFileName(image.Filename), command.ExecutedArguments[5].Replace("\"", ""), "Wrong argument for 1st filename only field");
                            AssertAreEqualIgnoreCase(Path.GetFileName(otherImage.Filename), command.ExecutedArguments[6].Replace("\"", ""), "Wrong argument for 2nd filename only field");
                            AssertAreEqualIgnoreCase(Path.GetFileName(thirdImage.Filename), command.ExecutedArguments[7].Replace("\"", ""), "Wrong argument for 3rd filename only field");
                        }
                    }
                }
            }
        }
		public void TestDicomFieldsWithMultipleImages()
		{
			using (MockCommandLine command = new MockCommandLine())
			{
				CommandLineExternal external = new CommandLineExternal();
				external.Command = command.ScriptFilename;
				external.AllowMultiValueFields = true;
				external.MultiValueFieldSeparator = " ";
				external.Arguments = "\"$00100020$\" \"$00100021$\"";

				using (MockDicomPresentationImage image = new MockDicomPresentationImage())
				{
					using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
					{
						using (MockDicomPresentationImage thirdImage = new MockDicomPresentationImage())
						{
							using (MockDicomPresentationImage fourthImage = new MockDicomPresentationImage())
							{
								using (MockDicomPresentationImage anotherImage = new MockDicomPresentationImage())
								{
									image[0x00100020].SetStringValue("The cake is a lie");
									otherImage[0x00100020].SetStringValue("The cake is a lie");
									thirdImage[0x00100020].SetStringValue("The cake is a lie");
									fourthImage[0x00100020].SetStringValue("The cake is a lie");
									anotherImage[0x00100020].SetStringValue("The cake is a lie");

									image[0x00100021].SetStringValue("Look, my liege!");
									otherImage[0x00100021].SetStringValue("Camelot!");
									thirdImage[0x00100021].SetStringValue("Camelot!");
									fourthImage[0x00100021].SetStringValue("Camelot!");
									anotherImage[0x00100021].SetStringValue("It's only a model");

									IPresentationImage[] images = new IPresentationImage[] {image, otherImage, thirdImage, fourthImage, anotherImage};
									Assert.IsTrue(external.CanLaunch(images));
									external.Launch(images);

									Thread.Sleep(_processEndWaitDelay); // wait for the external to finish
									command.Refresh();

									Trace.WriteLine(string.Format("Command Execution Report"));
									Trace.WriteLine(command.ExecutionReport);

									// these file paths may or may not have spaces in them, but we don't care either way for this test
									Assert.AreEqual("\"The cake is a lie\"", command.ExecutedArguments[0], "Wrong argument for 00100020 field of first image");
									Assert.AreEqual("\"Look, my liege!\"", command.ExecutedArguments[1], "Wrong argument for 00100021 field of first image");
								}
							}
						}
					}
				}
			}
		}
		public void TestMultipleImages()
		{
			using (MockCommandLine command = new MockCommandLine())
			{
				CommandLineExternal external = new CommandLineExternal();
				external.Command = command.ScriptFilename;
				external.AllowMultiValueFields = true;
				external.MultiValueFieldSeparator = "\" \"";
				external.Arguments = "\"$FILENAME$\" \"$DIRECTORY$\" \"$EXTENSIONONLY$\" \"$FILENAMEONLY$\"";

				using (MockDicomPresentationImage image = new MockDicomPresentationImage())
				{
					using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
					{
						using (MockDicomPresentationImage thirdImage = new MockDicomPresentationImage())
						{
							IPresentationImage[] images = new IPresentationImage[] {image, otherImage, thirdImage};
							Assert.IsTrue(external.CanLaunch(images));
							external.Launch(images);

							Thread.Sleep(_processEndWaitDelay); // wait for the external to finish
							command.Refresh();

							Trace.WriteLine(string.Format("Command Execution Report"));
							Trace.WriteLine(command.ExecutionReport);

							// these file paths may or may not have spaces in them, but we don't care either way for this test
							AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[0].Replace("\"", ""), "Wrong argument for 1st filename field");
							AssertAreEqualIgnoreCase(otherImage.Filename, command.ExecutedArguments[1].Replace("\"", ""), "Wrong argument for 2nd filename field");
							AssertAreEqualIgnoreCase(thirdImage.Filename, command.ExecutedArguments[2].Replace("\"", ""), "Wrong argument for 3rd filename field");
							AssertAreEqualIgnoreCase(Path.GetDirectoryName(image.Filename), command.ExecutedArguments[3].Replace("\"", ""), "Wrong argument for directory field");
							AssertAreEqualIgnoreCase(Path.GetExtension(image.Filename), command.ExecutedArguments[4].Replace("\"", ""), "Wrong argument for extension field");
							AssertAreEqualIgnoreCase(Path.GetFileName(image.Filename), command.ExecutedArguments[5].Replace("\"", ""), "Wrong argument for 1st filename only field");
							AssertAreEqualIgnoreCase(Path.GetFileName(otherImage.Filename), command.ExecutedArguments[6].Replace("\"", ""), "Wrong argument for 2nd filename only field");
							AssertAreEqualIgnoreCase(Path.GetFileName(thirdImage.Filename), command.ExecutedArguments[7].Replace("\"", ""), "Wrong argument for 3rd filename only field");
						}
					}
				}
			}
		}
		public void TestSingleImage()
		{
			using (MockCommandLine command = new MockCommandLine())
			{
				CommandLineExternal external = new CommandLineExternal();
				external.Command = command.ScriptFilename;
				external.AllowMultiValueFields = false;
				external.Arguments = "\"$FILENAME$\" \"$DIRECTORY$\" \"$EXTENSIONONLY$\" \"$FILENAMEONLY$\" \"$00100020$\" \"$00100021$\"";

				using (MockDicomPresentationImage image = new MockDicomPresentationImage())
				{
					using (MockDicomPresentationImage otherImage = new MockDicomPresentationImage())
					{
						image[0x00100020].SetStringValue("I've got a lovely bunch of coconuts");
						image[0x00100021].SetStringValue("Here they are all standing in a row");
						otherImage[0x00100020].SetStringValue("Big ones, small ones, some as big as your head");

						Assert.IsFalse(external.CanLaunch(new IPresentationImage[] {image, otherImage}));
						Assert.IsTrue(external.CanLaunch(image));

						external.Launch(image);

						Thread.Sleep(_processEndWaitDelay); // wait for the external to finish
						command.Refresh();

						Trace.WriteLine(string.Format("Command Execution Report"));
						Trace.WriteLine(command.ExecutionReport);

						// these file paths may or may not have spaces in them, but we don't care either way for this test
						AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[0].Trim('"'), "Wrong argument for filename field");
						AssertAreEqualIgnoreCase(Path.GetDirectoryName(image.Filename), command.ExecutedArguments[1].Trim('"'), "Wrong argument for directory field");
						AssertAreEqualIgnoreCase(Path.GetExtension(image.Filename), command.ExecutedArguments[2].Trim('"'), "Wrong argument for extension field");
						AssertAreEqualIgnoreCase(Path.GetFileName(image.Filename), command.ExecutedArguments[3].Trim('"'), "Wrong argument for filename only field");
						Assert.AreEqual("I've got a lovely bunch of coconuts", command.ExecutedArguments[4].Trim('"'), "Wrong argument for 00100020 field");
						Assert.AreEqual("Here they are all standing in a row", command.ExecutedArguments[5].Trim('"'), "Wrong argument for 00100021 field");
					}
				}
			}
		}
		public void TestArgumentFields()
		{
			using (MockCommandLine command = new MockCommandLine())
			{
				CommandLineExternal external = new CommandLineExternal();
				external.Command = command.ScriptFilename;
				external.Arguments = "$$ \"$filename$\"";

				using (MockDicomPresentationImage image = new MockDicomPresentationImage())
				{
					Assert.IsFalse(external.CanLaunch(image), "Fields are case sensitive - unresolved field should fail the launch");

					external.Arguments = "$$ \"$FILENAME$\"";

					Assert.IsTrue(external.CanLaunch(image), "Fields are case sensitive - unresolved field should fail the launch");

					external.Launch(image);

					Thread.Sleep(_processEndWaitDelay); // wait for the external to finish
					command.Refresh();

					Trace.WriteLine(string.Format("Command Execution Report"));
					Trace.WriteLine(command.ExecutionReport);

					AssertAreEqualIgnoreCase("$", command.ExecutedArguments[0], "Wrong argument passed at index {0}", 0);

					// these file paths may or may not have spaces in them, but we don't care either way for this test
					AssertAreEqualIgnoreCase(image.Filename, command.ExecutedArguments[1].Trim('"'), "Wrong argument passed at index {0}", 1);
				}
			}
		}