コード例 #1
0
        public void SubscriberCleanup(
            EventBroker eventBroker,
            SimpleEvent.EventPublisher publisher,
            SimpleEvent.EventSubscriber subscriber,
            SimpleEvent.EventSubscriber subscriberThatIsCollected,
            SimpleEvent.RegisterableEventSubscriber registerableSubscriberThatIsCollected,
            WeakReference referenceOnSubscriberThatIsCollected,
            WeakReference referenceOnRegisterableSubscriberThatIsCollected)
        {
            "Establish an event broker".x(() =>
                                          eventBroker = new EventBroker());

            "Establish a registered publisher".x(() =>
            {
                publisher = new SimpleEvent.EventPublisher();
                eventBroker.Register(publisher);
            });

            "Establish a registered subscriber".x(() =>
            {
                subscriber = new SimpleEvent.EventSubscriber();
                eventBroker.Register(subscriber);
            });

            "Establish a registered subscriber that is collected".x(() =>
            {
                subscriberThatIsCollected = new SimpleEvent.EventSubscriber();
                eventBroker.Register(subscriberThatIsCollected);
            });

            "Establish a registerable subscriber that is collected".x(() =>
            {
                registerableSubscriberThatIsCollected = new SimpleEvent.RegisterableEventSubscriber();
                eventBroker.Register(registerableSubscriberThatIsCollected);
            });

            "Establish a weak references to the collected subscribers".x(() =>
            {
                referenceOnSubscriberThatIsCollected             = new WeakReference(subscriberThatIsCollected);
                referenceOnRegisterableSubscriberThatIsCollected =
                    new WeakReference(registerableSubscriberThatIsCollected);
            });

            "When enforcing the garbage collection".x(() =>
            {
                subscriberThatIsCollected             = null;
                registerableSubscriberThatIsCollected = null;
                GC.Collect();
            });

            "It should garbage collect the subscribers registered by attribute".x(() =>
                                                                                  referenceOnSubscriberThatIsCollected.IsAlive
                                                                                  .Should().BeFalse("subscriber should be collected"));

            "It should garbage collect the subscribers registered by registrar".x(() =>
                                                                                  referenceOnRegisterableSubscriberThatIsCollected.IsAlive
                                                                                  .Should().BeFalse("subscriber should be collected"));
        }
コード例 #2
0
        public void EventBrokerCleanup(
            EventBroker eventBroker,
            WeakReference publisher,
            WeakReference registerablePublisher,
            WeakReference subscriber,
            WeakReference registerableSubscriber)
        {
            "Establish an event broker".x(() =>
                                          eventBroker = new EventBroker());

            "Establish a registered publisher".x(() =>
            {
                var p     = new SimpleEvent.EventPublisher();
                publisher = new WeakReference(p);
                eventBroker.Register(p);
            });

            "Establish a registered registerable publisher".x(() =>
            {
                var p = new SimpleEvent.RegisterableEventPublisher();
                registerablePublisher = new WeakReference(p);
                eventBroker.Register(p);
            });

            "Establish a registered subscriber".x(() =>
            {
                var s      = new SimpleEvent.EventSubscriber();
                subscriber = new WeakReference(s);
                eventBroker.Register(s);
            });

            "Establish a registered registerable subscriber".x(() =>
            {
                var s = new SimpleEvent.RegisterableEventSubscriber();
                registerableSubscriber = new WeakReference(s);
                eventBroker.Register(s);
            });

            "When enforcing the garbage collection".x(
                GC.Collect);

            "It should unregister publishers registered by attribute".x(() =>
                                                                        publisher.IsAlive
                                                                        .Should().BeFalse("publisher should not be referenced anymore"));

            "It should unregister publishers registered by registrar".x(() =>
                                                                        registerablePublisher.IsAlive
                                                                        .Should().BeFalse("publisher should not be referenced anymore"));

            "It should unregister subscribers registered by attribtue".x(() =>
                                                                         subscriber.IsAlive
                                                                         .Should().BeFalse("subscriber should not be referenced anymore"));

            "It should unregister subscribers registered by registrar".x(() =>
                                                                         registerableSubscriber.IsAlive
                                                                         .Should().BeFalse("subscriber should not be referenced anymore"));
        }