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