// ****************************************************************
// 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
}
}