#region CPL License /* Nuclex Framework Copyright (C) 2002-2008 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #endregion using System; using System.Collections.Generic; using System.Text; #if UNITTEST using NUnit.Framework; namespace Nuclex.Support.Parsing { /// Ensures that the command line parser is working properly [TestFixture] public class CommandLineParserTest { /// Validates that normal arguments can be parsed [Test] public void TestArrayConstructorWithPlainArguments() { Assert.IsTrue( new CommandLineParser(new string[] { "-hello" }).HasArgument("hello"), "Argument with minus sign is recognized" ); Assert.IsTrue( new CommandLineParser(new string[] { "--hello" }).HasArgument("hello"), "Argument with double minus sign is recognized" ); Assert.IsTrue( new CommandLineParser(new string[] { "/hello" }).HasArgument("hello"), "Argument with slash is recognized" ); } /// Validates that argument assignments are working [Test] public void TestArrayConstructorWithAssignments() { Assert.AreEqual( "world", new CommandLineParser(new string[] { "-hello:world" })["hello"], "Argument can be assigned with a double colon" ); Assert.AreEqual( "world", new CommandLineParser(new string[] { "-hello=world" })["hello"], "Argument can be assigned with a equality sign" ); Assert.AreEqual( "world", new CommandLineParser(new string[] { "-hello", "world" })["hello"], "Argument can be assigned with a space" ); } /// /// Validates that loosely specified values are recognized by the parser /// [Test] public void TestArrayConstructorWithLooseValues() { Assert.IsTrue( new CommandLineParser(new string[] { "hello" }).Values.Contains("hello"), "Plain loose value is recognized" ); Assert.IsTrue( new CommandLineParser(new string[] { "-hello:world", "foo" }).Values.Contains("foo"), "Loose value following an assignment is recognized" ); } /// /// Tests whether the parser can parse the processes current command line if /// the default constructor is used /// [Test] public void TestDefaultConstructor() { new CommandLineParser(); } /// /// Tests whether the string constructor works for simple arguments being /// specified on the command line /// [Test] public void TestStringConstructorWithSimpleArguments() { CommandLineParser parser = new CommandLineParser("argument1 argument2"); Assert.AreEqual("argument1", parser.Values[0]); Assert.AreEqual("argument2", parser.Values[1]); } // TODO: This test fails!! #if FAILED_TEST /// /// Bullshit /// [Test] public void TestStringConstructorWithQuotedArguments() { CommandLineParser parser = new CommandLineParser("\"this is a single argument\""); Assert.AreEqual("this is a single argument", parser.Values[0]); } #endif /// /// Tests whether the string constructor recognizes an unfinished argument /// (that is, and argument that gets 'nothing' assigned) /// [Test] public void TestStringConstructorWithUnfinishedAssignment() { CommandLineParser parser = new CommandLineParser("--hello= --world="); } } } // namespace Nuclex.Support.Parsing #endif // UNITTEST