using System;
using System.Collections;
using NUnit.Core.Extensibility;
namespace NUnit.Core
{
///
/// ExtensionPoint is used as a base class for all
/// extension points.
///
public abstract class ExtensionPoint : IExtensionPoint
{
private string name;
private IExtensionHost host;
protected ArrayList extensions = new ArrayList();
#region Constructor
public ExtensionPoint(string name, IExtensionHost host)
{
this.name = name;
this.host = host;
}
#endregion
#region IExtensionPoint Members
///
/// Get the name of this extension point
///
public string Name
{
get { return this.name; }
}
///
/// Get the host that provides this extension point
///
public IExtensionHost Host
{
get { return this.host; }
}
///
/// Install an extension at this extension point. If the
/// extension object does not meet the requirements for
/// this extension point, an exception is thrown.
///
/// The extension to install
public void Install(object extension)
{
if ( !ValidExtension( extension ) )
throw new ArgumentException(
extension.GetType().FullName + " is not {0} extension point", "extension" );
extensions.Add( extension );
}
///
/// Removes an extension from this extension point. If the
/// extension object is not present, the method returns
/// without error.
///
///
public void Remove(object extension)
{
extensions.Remove( extension );
}
#endregion
#region Abstract Methods
protected abstract bool ValidExtension(object extension);
#endregion
}
}