Beispiel #1
0
        public void TestWithLocalVariableInAnonymousMethod()
        {
            var counter = new InstanceCounter();

            var evSrc   = new EventSource();
            var evSink1 = new EventSink2(counter, evSrc);
            var evSink2 = new EventSink2(counter, evSrc);
            var evSink3 = new EventSink2(counter, evSrc);
            var evSink4 = new EventSink2(counter, evSrc);
            var evSink5 = new EventSink2(counter, evSrc);

            Assert.AreEqual(5, counter.Instances);

            evSink1.CreateLinkToSourceGoodStyle();
            evSink2.CreateLinkToSourceGoodStyle();
            evSink3.CreateLinkToSourceGoodStyle();
            evSink4.CreateLinkToSourceGoodStyle();
            evSink5.CreateLinkToSourceGoodStyle();

            evSink1 = null;
            evSink2 = null;
            evSink3 = null;
            evSink4 = null;
            evSink5 = null;

            GC.Collect();
            System.Threading.Thread.Sleep(500);
            GC.Collect();

            Assert.AreEqual(0, counter.Instances); // all instances should be claimed because we used a local variable to create the anonymous methode
        }
        public void Reset_Should_Replace_Default()
        {
            var defaultCount      = new InstanceCounter();
            var simpleLazyFactory = SimpleLazyFactory <IFooService> .CreateForTest();

            var defaultFunc = simpleLazyFactory.Default(() => new FooService(defaultCount)).Resolve;

            var instanceCount = new InstanceCounter();
            var theOne        = new FooService(instanceCount);
            var resetFunc     = simpleLazyFactory.Reset(() => theOne).Resolve;

            var fooService  = defaultFunc();
            var fooService2 = resetFunc();

            fooService.ShouldEqual(fooService2);

            for (int i = 0; i < 10; i++)
            {
                defaultFunc();
            }

            for (int i = 0; i < 10; i++)
            {
                resetFunc();
            }

            defaultCount.TotalCount.ShouldEqual(0);
            instanceCount.TotalCount.ShouldEqual(1);
        }
Beispiel #3
0
        public void TestWithInstanceVariableInAnonymousMethod()
        {
            var counter = new InstanceCounter();

            var evSrc   = new EventSource();
            var evSink1 = new EventSink2(counter, evSrc);
            var evSink2 = new EventSink2(counter, evSrc);
            var evSink3 = new EventSink2(counter, evSrc);
            var evSink4 = new EventSink2(counter, evSrc);
            var evSink5 = new EventSink2(counter, evSrc);

            Assert.AreEqual(5, counter.Instances);

            evSink1.CreateLinkToSourceBadStyle();
            evSink2.CreateLinkToSourceBadStyle();
            evSink3.CreateLinkToSourceBadStyle();
            evSink4.CreateLinkToSourceBadStyle();
            evSink5.CreateLinkToSourceBadStyle();

            evSink1 = null;
            evSink2 = null;
            evSink3 = null;
            evSink4 = null;
            evSink5 = null;

            GC.Collect();
            System.Threading.Thread.Sleep(500);
            GC.Collect();

            Assert.AreEqual(5, counter.Instances); // the 5 instances could not be claimed because we used the instance member in CreateLinkToSource1,
        }
Beispiel #4
0
        public void TestWithoutAndWithWeakEventHandlerWithStorage()
        {
            var counter = new InstanceCounter();

            var evSrc   = new EventSource();
            var evSink1 = new EventSink(counter);
            var evSink2 = new EventSink(counter);
            var evSink3 = new EventSink(counter);
            var evSink4 = new EventSink(counter);
            var evSink5 = new EventSink(counter);

            Assert.AreEqual(5, counter.Instances);

            evSrc.Changed += (evSink1.StoreTheWeakEventHandler = new WeakEventHandler(evSink1.EhChanged, (h) => evSrc.Changed -= h)); // with storage
            evSrc.Changed += (evSink1.StoreTheWeakEventHandler = new WeakEventHandler(evSink2.EhChanged, (h) => evSrc.Changed -= h)); // with storage
            evSrc.Changed += new WeakEventHandler(evSink3.EhChanged, (h) => evSrc.Changed -= h);                                      // without storage
            evSrc.Changed += evSink4.EhChanged;
            evSrc.Changed += evSink5.EhChanged;

            evSink1 = null;
            evSink2 = null;
            evSink3 = null;
            evSink4 = null;
            evSink5 = null;

            GC.Collect();
            System.Threading.Thread.Sleep(500);
            GC.Collect();

            Assert.AreEqual(2, counter.Instances); // the 2 instances that are reachable by ordinary event handlers should be still reachable
        }
Beispiel #5
0
 public TestComWrapperFactory(int?maximumOpenItemsPerType)
 {
     _appointment = new InstanceCounter <IAppointmentItemWrapper>(maximumOpenItemsPerType);
     _contactItem = new InstanceCounter <IContactItemWrapper>(maximumOpenItemsPerType);
     _taskItem    = new InstanceCounter <ITaskItemWrapper>(maximumOpenItemsPerType);
     _distList    = new InstanceCounter <IDistListItemWrapper>(maximumOpenItemsPerType);
 }
Beispiel #6
0
        public void Instance_ShouldReturnTheInstance_WhenItIsCalled()
        {
            var counter = new InstanceCounter();
            var lazy    = new Lazy <InstanceCounter>(() => counter);

            var instanceCounter = lazy.Value;

            Assert.That(instanceCounter, Is.SameAs(counter));
        }
 public FooService(InstanceCounter instanceCount)
 {
     Counter = instanceCount;
     lock (_lock)
     {
         instanceCount.TotalCount++;
         this.LogHashCode();
     }
 }
 public void Default_Multi_Call_Should_Ex()
 {
     AssertHelper.ShouldThrows <Exception>(() =>
     {
         var defaultCount      = new InstanceCounter();
         var simpleLazyFactory = SimpleLazyFactory <IFooService> .CreateForTest();
         simpleLazyFactory.Default(() => new FooService(defaultCount));
         simpleLazyFactory.Default(() => new FooService(defaultCount));
     });
 }
        public void Default_Multi_Call_Should_Return_Same()
        {
            var defaultCount      = new InstanceCounter();
            var simpleLazyFactory = SimpleLazyFactory <IFooService> .CreateForTest();

            var defaultFunc = simpleLazyFactory.Default(() => new FooService(defaultCount)).Resolve;
            var fooService  = defaultFunc();
            var fooService2 = defaultFunc();

            defaultCount.TotalCount.ShouldEqual(1);
            fooService.ShouldEqual(fooService2);
        }
 public void FixtureSetUp()
 {
     ObjectFactory.Initialize(expression =>
     {
         expression.For(typeof(Lazy <>)).Use(typeof(Lazy <>)).CtorDependency <bool>("isThreadSafe").Is(true);
         expression.Scan(assemblyScanner =>
         {
             assemblyScanner.TheCallingAssembly();
             assemblyScanner.WithDefaultConventions();
         });
     });
     InstanceCounter.Reset();
 }
        public void Default_Multi_Call_Should_Singleton()
        {
            var defaultCount      = new InstanceCounter();
            var simpleLazyFactory = SimpleLazyFactory <IFooService> .CreateForTest();

            var defaultFunc = simpleLazyFactory.Default(() => new FooService(defaultCount)).Resolve;

            for (int i = 0; i < 10; i++)
            {
                defaultFunc();
            }
            defaultCount.TotalCount.ShouldEqual(1);
        }
Beispiel #12
0
 internal void WriteToFile(string fileName)
 {
     using (StreamWriter writer = new StreamWriter(fileName, false))
     {
         writer.WriteLine("frame,update,draw,instances");
         for (int i = 0; i < Count; i++)
         {
             writer.WriteLine(string.Format("{0},{1},{2},{3}",
                                            i,
                                            UpdateEvents.ElementAtOrDefault(i),
                                            DrawEvents.ElementAtOrDefault(i),
                                            InstanceCounter.ElementAtOrDefault(i)));
         }
         writer.Flush();
     }
 }
        public void Reset_Multi_Time_Should_Ok()
        {
            var counter1          = new InstanceCounter();
            var counter2          = new InstanceCounter();
            var simpleLazyFactory = SimpleLazyFactory <IFooService> .CreateForTest();

            simpleLazyFactory.Reset(() => new FooService(counter1));
            simpleLazyFactory.Reset(() => new FooService(counter2));
            var resolve = simpleLazyFactory.Resolve;

            for (int i = 0; i < 3; i++)
            {
                var service = resolve();
            }
            counter1.TotalCount.ShouldEqual(0);
            counter2.TotalCount.ShouldEqual(1);
        }
Beispiel #14
0
			public EventSink2(InstanceCounter counter, EventSource src)
			{
				_counter = counter;
				_src = src;
				System.Threading.Interlocked.Increment(ref counter.Instances);
			}
Beispiel #15
0
			public EventSink(InstanceCounter counter)
			{
				_counter = counter;
				System.Threading.Interlocked.Increment(ref counter.Instances);
			}
Beispiel #16
0
		public void TestWithLocalVariableInAnonymousMethod()
		{
			var counter = new InstanceCounter();

			var evSrc = new EventSource();
			var evSink1 = new EventSink2(counter, evSrc);
			var evSink2 = new EventSink2(counter, evSrc);
			var evSink3 = new EventSink2(counter, evSrc);
			var evSink4 = new EventSink2(counter, evSrc);
			var evSink5 = new EventSink2(counter, evSrc);

			Assert.AreEqual(5, counter.Instances);

			evSink1.CreateLinkToSourceGoodStyle();
			evSink2.CreateLinkToSourceGoodStyle();
			evSink3.CreateLinkToSourceGoodStyle();
			evSink4.CreateLinkToSourceGoodStyle();
			evSink5.CreateLinkToSourceGoodStyle();

			evSink1 = null;
			evSink2 = null;
			evSink3 = null;
			evSink4 = null;
			evSink5 = null;

			GC.Collect();
			System.Threading.Thread.Sleep(500);
			GC.Collect();

			Assert.AreEqual(0, counter.Instances); // all instances should be claimed because we used a local variable to create the anonymous methode
		}
Beispiel #17
0
		public void TestWithInstanceVariableInAnonymousMethod()
		{
			var counter = new InstanceCounter();

			var evSrc = new EventSource();
			var evSink1 = new EventSink2(counter, evSrc);
			var evSink2 = new EventSink2(counter, evSrc);
			var evSink3 = new EventSink2(counter, evSrc);
			var evSink4 = new EventSink2(counter, evSrc);
			var evSink5 = new EventSink2(counter, evSrc);

			Assert.AreEqual(5, counter.Instances);

			evSink1.CreateLinkToSourceBadStyle();
			evSink2.CreateLinkToSourceBadStyle();
			evSink3.CreateLinkToSourceBadStyle();
			evSink4.CreateLinkToSourceBadStyle();
			evSink5.CreateLinkToSourceBadStyle();

			evSink1 = null;
			evSink2 = null;
			evSink3 = null;
			evSink4 = null;
			evSink5 = null;

			GC.Collect();
			System.Threading.Thread.Sleep(500);
			GC.Collect();

			Assert.AreEqual(5, counter.Instances); // the 5 instances could not be claimed because we used the instance member in CreateLinkToSource1,
		}
Beispiel #18
0
		public void TestWithoutAndWithWeakEventHandlerWithStorage()
		{
			var counter = new InstanceCounter();

			var evSrc = new EventSource();
			var evSink1 = new EventSink(counter);
			var evSink2 = new EventSink(counter);
			var evSink3 = new EventSink(counter);
			var evSink4 = new EventSink(counter);
			var evSink5 = new EventSink(counter);

			Assert.AreEqual(5, counter.Instances);

			evSrc.Changed += (evSink1.StoreTheWeakEventHandler = new WeakEventHandler(evSink1.EhChanged, (h) => evSrc.Changed -= h)); // with storage
			evSrc.Changed += (evSink1.StoreTheWeakEventHandler = new WeakEventHandler(evSink2.EhChanged, (h) => evSrc.Changed -= h)); // with storage
			evSrc.Changed += new WeakEventHandler(evSink3.EhChanged, (h) => evSrc.Changed -= h); // without storage
			evSrc.Changed += evSink4.EhChanged;
			evSrc.Changed += evSink5.EhChanged;

			evSink1 = null;
			evSink2 = null;
			evSink3 = null;
			evSink4 = null;
			evSink5 = null;

			GC.Collect();
			System.Threading.Thread.Sleep(500);
			GC.Collect();

			Assert.AreEqual(2, counter.Instances); // the 2 instances that are reachable by ordinary event handlers should be still reachable
		}
Beispiel #19
0
 public EventSink(InstanceCounter counter)
 {
     _counter = counter;
     System.Threading.Interlocked.Increment(ref counter.Instances);
 }
Beispiel #20
0
 public EventSink2(InstanceCounter counter, EventSource src)
 {
     _counter = counter;
     _src     = src;
     System.Threading.Interlocked.Increment(ref counter.Instances);
 }
Beispiel #21
0
 public SomeClass()
 {
     InstanceCounter <SomeClass> .Increase();
 }