#region CPL License
/*
Nuclex Framework
Copyright (C) 2002-2012 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
#if UNITTEST
using System;
using System.IO;
using NUnit.Framework;
namespace Nuclex.Support {
  /// Unit Test for the enumeration helper class
  [TestFixture]
  internal class EnumHelperTest {
    #region enum TestEnumeration
    /// An enumeration used for unit testing
    internal enum TestEnumeration {
      /// First arbitrary enumeration value
      One = -2,
      /// Third arbitrary enumeration value
      Three = 33,
      /// Second arbitrary enumeration value
      Two = 23
    }
    #endregion // enum TestEnumeration
    #region enum EmptyEnumeration
    internal enum EmptyEnumeration { }
    #endregion // enum EmptyEnumeration
    /// 
    ///   Verifies that the enum helper can list the members of an enumeration
    ///   manually (as it needs to be done on the XBox 360)
    /// 
    [Test]
    public void TestGetValuesXbox360() {
      CollectionAssert.AreEquivalent(
        new TestEnumeration[] {
          TestEnumeration.One, TestEnumeration.Two, TestEnumeration.Three
        },
        EnumHelper.GetValuesXbox360()
      );
    }
    /// 
    ///   Verifies that the enum helper can list the members of an enumeration
    /// 
    [Test]
    public void TestGetValues() {
      CollectionAssert.AreEquivalent(
        new TestEnumeration[] {
          TestEnumeration.One, TestEnumeration.Two, TestEnumeration.Three
        },
        EnumHelper.GetValues()
      );
    }
    /// 
    ///   Verifies that the enum helper can locate the highest value in an enumeration
    /// 
    [Test]
    public void TestGetHighestValue() {
      Assert.AreEqual(
        TestEnumeration.Three, EnumHelper.GetHighestValue()
      );
    }
    /// 
    ///   Verifies that the enum helper can locate the lowest value in an enumeration
    /// 
    [Test]
    public void TestGetLowestValue() {
      Assert.AreEqual(
        TestEnumeration.One, EnumHelper.GetLowestValue()
      );
    }
    /// 
    ///   Tests whether an exception is thrown if the GetValuesXbox360() method is
    ///   used on a non-enumeration type
    /// 
    [Test]
    public void TestThrowOnNonEnumTypeXbox360() {
      Assert.Throws(
        delegate() { EnumHelper.GetValuesXbox360(); }
      );
    }
    /// 
    ///   Tests whether an exception is thrown if the GetValues() method is used on
    ///   a non-enumeration type
    /// 
    [Test]
    public void TestThrowOnNonEnumType() {
      Assert.Throws(
        delegate() { EnumHelper.GetValues(); }
      );
    }
    /// 
    ///   Verifies that the default value for an enumeration is returned if
    ///   the GetLowestValue() method is used on an empty enumeration
    /// 
    [Test]
    public void TestLowestValueInEmptyEnumeration() {
      Assert.AreEqual(
        default(EmptyEnumeration), EnumHelper.GetLowestValue()
      );
    }
    /// 
    ///   Verifies that the default value for an enumeration is returned if
    ///   the GetHighestValue() method is used on an empty enumeration
    /// 
    [Test]
    public void TestHighestValueInEmptyEnumeration() {
      Assert.AreEqual(
        default(EmptyEnumeration), EnumHelper.GetHighestValue()
      );
    }
  }
} // namespace Nuclex.Support
#endif // UNITTEST