public void TestPluginRequirementCollectionUpdate()
        {             

            bool updated = false;
            Guid guid1 = Guid.NewGuid();
            Guid guid2 = Guid.NewGuid();
            Guid guid3 = Guid.NewGuid();

            IPluginRequirementCollection reqs = new PluginRequirementCollection( );
            reqs.Changed += ( o, e ) =>  {if (e.Action == CK.Core.ChangeStatus.Update)
                                                        updated = true;
                                                    };

            PluginRequirement req = reqs.AddOrSet( guid1, RunningRequirement.MustExistAndRun );
            Assert.That( reqs.Count == 1 );
            //Assert.That( (req.Source == reqs.Source) && (reqs.Source == ctx) );

            PluginRequirement req1 = reqs.AddOrSet( guid2, RunningRequirement.MustExistAndRun );
            Assert.That( reqs.Count == 2 );

            PluginRequirement req2 =  reqs.AddOrSet( guid3, RunningRequirement.MustExistAndRun );
            Assert.That( reqs.Count == 3 );

            Assert.That( reqs.Contains( req2 ) && reqs.Contains( req1 ) && reqs.Contains( req ) );

            PluginRequirement req3 =  reqs.AddOrSet( guid3, RunningRequirement.Optional );

            Assert.That( updated );
            Assert.That( req2 == req3 );
            Assert.That( reqs.Count == 3 );
        }
        public void TestPluginRequirementCollectionEnumerable()
        {
            Guid guid0 = Guid.NewGuid();
            Guid guid1 = Guid.NewGuid();
            Guid guid2 = Guid.NewGuid();

            IPluginRequirementCollection reqs = new PluginRequirementCollection( );

            PluginRequirement req0 = reqs.AddOrSet( guid0, RunningRequirement.MustExistAndRun );
            Assert.That( reqs.Count == 1 );

            PluginRequirement req1 = reqs.AddOrSet( guid1, RunningRequirement.Optional );
            Assert.That( reqs.Count == 2 );

            PluginRequirement req2 =  reqs.AddOrSet( guid2, RunningRequirement.OptionalTryStart );
            Assert.That( reqs.Count == 3 );

            Assert.That( reqs.Contains( req2 ) && reqs.Contains( req1 ) && reqs.Contains( req0 ) );

            reqs.Remove( guid2 );

            Assert.That( reqs.Count == 2 );
            Assert.That( !reqs.Contains( req2 ) );

            int passed = 0;
            foreach( PluginRequirement o in reqs )
            {
                if( o.PluginId == guid0 )
                {
                    Assert.That( o.Requirement == RunningRequirement.MustExistAndRun );
                    passed++;
                }
                if( o.PluginId == guid1 )
                {
                    Assert.That( o.Requirement == RunningRequirement.Optional );
                    passed++;
                }
            }
            Assert.That( passed, Is.EqualTo( 2 ) );

            reqs.Clear();

            Assert.That( reqs.Count == 0 );
            Assert.That( ((PluginRequirement)req0).Holder == null );
            Assert.That( ((PluginRequirement)req1).Holder == null );
            Assert.That( ((PluginRequirement)req2).Holder == null );

            passed = 0;
            foreach( PluginRequirement o in reqs )
            {
                passed++;
            }
            Assert.That( passed == 0 );
        }