internal ServiceRequirement( ServiceRequirementCollection holder, string serviceAssemblyQualifiedName, RunningRequirement requirement )
     : this( holder )
 {
     Debug.Assert( serviceAssemblyQualifiedName != null );
     AssemblyQualifiedName = serviceAssemblyQualifiedName;
     _req = requirement;
 }
        void ServiceRequirementCollectionEvents(ServiceRequirementCollection collection)
        {
            string id = "service.full.name";

            ServiceRequirementCollectionChangingEventArgs lastChanging = null;
            ServiceRequirementCollectionChangedEventArgs  lastChanged  = null;
            int changingCount = 0;
            int changedCount  = 0;

            collection.Changing += (o, e) => { lastChanging = e; changingCount++; };
            collection.Changed  += (o, e) => { lastChanged = e; changedCount++; };

            // Check add
            ServiceRequirement req = collection.AddOrSet(id, RunningRequirement.MustExistAndRun);

            Assert.That(changedCount == 1 && changingCount == 1);
            Assert.That(lastChanging.Action == CK.Core.ChangeStatus.Add);
            Assert.That(lastChanged.Action == CK.Core.ChangeStatus.Add);
            Assert.That(lastChanging.Collection == collection);
            Assert.That(lastChanged.Collection == collection);
            Assert.That(lastChanging.AssemblyQualifiedName == id);
            Assert.That(lastChanged.AssemblyQualifiedName == id);
            Assert.That(lastChanging.Requirement == RunningRequirement.MustExistAndRun);
            Assert.That(lastChanged.Requirement == RunningRequirement.MustExistAndRun);

            changedCount = 0; changingCount = 0;

            // Check delete : from the collection
            collection.Remove(id);

            Assert.That(changedCount == 1 && changingCount == 1);
            Assert.That(lastChanging.Action == CK.Core.ChangeStatus.Delete);
            Assert.That(lastChanged.Action == CK.Core.ChangeStatus.Delete);
            Assert.That(lastChanging.Collection == collection);
            Assert.That(lastChanged.Collection == collection);
            Assert.That(lastChanging.AssemblyQualifiedName == id);
            Assert.That(lastChanged.AssemblyQualifiedName == id);
            Assert.That(lastChanging.Requirement == RunningRequirement.MustExistAndRun);
            Assert.That(lastChanged.Requirement == RunningRequirement.MustExistAndRun);

            changedCount = 0; changingCount = 0;

            // Check clear
            collection.Clear();

            Assert.That(changedCount == 1 && changingCount == 1);
            Assert.That(lastChanging.Action == CK.Core.ChangeStatus.ContainerClear);
            Assert.That(lastChanged.Action == CK.Core.ChangeStatus.ContainerClear);
            Assert.That(lastChanging.Collection == collection);
            Assert.That(lastChanged.Collection == collection);
            Assert.That(lastChanging.AssemblyQualifiedName == string.Empty);
            Assert.That(lastChanged.AssemblyQualifiedName == string.Empty);
            Assert.That(lastChanging.Requirement == 0);
            Assert.That(lastChanged.Requirement == 0);
        }
 internal ServiceRequirement( ServiceRequirementCollection holder )
 {
     Debug.Assert( holder != null );
     _holder = holder;
 }
 /// <summary>
 /// Initializes a new <see cref="RequirementLayer"/>.
 /// </summary>
 /// <param name="layerName">Optional name for the requirements.</param>
 public RequirementLayer( string layerName )
 {
     LayerName = layerName;
     _pluginRequirements = new PluginRequirementCollection();
     _serviceRequirements = new ServiceRequirementCollection();
 }
        void ServiceRequirementCollectionEvents( ServiceRequirementCollection collection )
        {
            string id = "service.full.name";

            ServiceRequirementCollectionChangingEventArgs lastChanging = null;
            ServiceRequirementCollectionChangedEventArgs lastChanged = null;
            int changingCount = 0;
            int changedCount = 0;

            collection.Changing += ( o, e ) => { lastChanging = e; changingCount++; };
            collection.Changed += ( o, e ) => { lastChanged = e; changedCount++; };

            // Check add
            ServiceRequirement req = collection.AddOrSet( id, RunningRequirement.MustExistAndRun );

            Assert.That( changedCount == 1 && changingCount == 1 );
            Assert.That( lastChanging.Action == CK.Core.ChangeStatus.Add );
            Assert.That( lastChanged.Action == CK.Core.ChangeStatus.Add );
            Assert.That( lastChanging.Collection == collection );
            Assert.That( lastChanged.Collection == collection );
            Assert.That( lastChanging.AssemblyQualifiedName == id );
            Assert.That( lastChanged.AssemblyQualifiedName == id );
            Assert.That( lastChanging.Requirement == RunningRequirement.MustExistAndRun );
            Assert.That( lastChanged.Requirement == RunningRequirement.MustExistAndRun );

            changedCount = 0; changingCount = 0;

            // Check delete : from the collection
            collection.Remove( id );

            Assert.That( changedCount == 1 && changingCount == 1 );
            Assert.That( lastChanging.Action == CK.Core.ChangeStatus.Delete );
            Assert.That( lastChanged.Action == CK.Core.ChangeStatus.Delete );
            Assert.That( lastChanging.Collection == collection );
            Assert.That( lastChanged.Collection == collection );
            Assert.That( lastChanging.AssemblyQualifiedName == id );
            Assert.That( lastChanged.AssemblyQualifiedName == id );
            Assert.That( lastChanging.Requirement == RunningRequirement.MustExistAndRun );
            Assert.That( lastChanged.Requirement == RunningRequirement.MustExistAndRun );

            changedCount = 0; changingCount = 0;

            // Check clear
            collection.Clear();

            Assert.That( changedCount == 1 && changingCount == 1 );
            Assert.That( lastChanging.Action == CK.Core.ChangeStatus.ContainerClear );
            Assert.That( lastChanged.Action == CK.Core.ChangeStatus.ContainerClear );
            Assert.That( lastChanging.Collection == collection );
            Assert.That( lastChanged.Collection == collection );
            Assert.That( lastChanging.AssemblyQualifiedName == string.Empty );
            Assert.That( lastChanged.AssemblyQualifiedName == string.Empty );
            Assert.That( lastChanging.Requirement == 0 );
            Assert.That( lastChanged.Requirement == 0 );
        }