// **************************************************************** // Copyright 2007, Charlie Poole // This is free software licensed under the NUnit license. You may // obtain a copy of the license at http://nunit.org/?p=license&r=2.4 // **************************************************************** using System; namespace NUnit.Core { /// /// TestID encapsulates a unique identifier for tests. As /// currently implemented, this is an integer and is unique /// within the AppDomain. TestID is one component of a /// TestName. We use this object, rather than a raw int, /// for two reasons: (1) to hide the implementation so /// it may be changed later if necessary and (2) so that the /// id may be null in a "weak" TestName. /// [Serializable] public class TestID : ICloneable { #region Fields /// /// The int key that distinguishes this test from all others created /// by the same runner. /// private int id; /// /// Static value to seed ids. It's started at 1000 so any /// uninitialized ids will stand out. /// private static int nextID = 1000; #endregion #region Construction /// /// Construct a new TestID /// public TestID() { this.id = unchecked( nextID++ ); } /// /// Construct a TestID with a given value. /// Used in parsing test names and in order /// to construct an artificial test node for /// aggregating multiple test runners. /// /// public TestID( int id ) { this.id = id; } #endregion #region Static Methods /// /// Parse a TestID from it's string representation /// /// /// public static TestID Parse( string s ) { int id = Int32.Parse( s ); return new TestID( id ); } #endregion #region Object Overrides /// /// Override of Equals method to allow comparison of TestIDs /// /// /// public override bool Equals(object obj) { TestID other = obj as TestID; if ( other != null ) return this.id == other.id; return base.Equals (obj); } /// /// Override of GetHashCode for TestIDs /// /// public override int GetHashCode() { return id.GetHashCode(); } /// /// Override ToString() to display the int id /// /// public override string ToString() { return id.ToString(); } #endregion #region Operator Overrides /// /// Operator == override /// /// /// /// public static bool operator ==( TestID id1, TestID id2 ) { if ( Object.Equals( id1, null ) ) return Object.Equals( id2, null ); return id1.Equals( id2 ); } /// /// Operator != override /// /// /// /// public static bool operator !=( TestID id1, TestID id2 ) { return id1 == id2 ? false : true; } #endregion #region ICloneable Implementation /// /// Clone this TestID /// /// An identical TestID public object Clone() { return this.MemberwiseClone(); } #endregion } }