Example #1
0
        public static void Main(string[] args)
        {
            var rex = Freezable.MakeFreezable <Pet>();

            rex.DataReturn();
            rex.Name = "Rex";
            Console.WriteLine(Freezable.IsFreezable(rex)
                ? "Rex is freezable!"
                : "Rex is not freezable. Something is not working");
            Console.WriteLine(rex.ToString());
            Console.WriteLine("Add 50 years");
            rex.Age += 50;
            Console.WriteLine("Age: {0}", rex.Age);
            rex.Deceased = true;

            Console.WriteLine("Deceased: {0}", rex.Deceased);
            Freezable.Freeze(rex);
            try
            {
                rex.Age++;
            }
            catch (ObjectFrozenException ex)
            {
                Console.WriteLine("Oups. it's frozen. Can't change that anymore");
            }
            Console.WriteLine("--- press enter to close");
            Console.ReadLine();
        }
Example #2
0
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;

            #region Protection Proxy
            //ICar car = new CarProxy(new Driver(16));
            //car.Drive();
            #endregion

            #region Property Proxy
            //var c = new Creature();
            //c.Agility = 10;
            //c.Agility = 10;
            #endregion

            #region Dynamic Proxy for Logging
            //var bank = new BankAccount();
            //bank.Deposit(100);
            //bank.Deposit(50);
            //Console.WriteLine(bank.ToString());
            #endregion

            #region Castle DynamicProxy
            Person p = Freezable.MakeFreezable <Person>();
            p.FirstName = "Foo";
            p.LastName  = "Bar";
            Console.WriteLine(p);
            Freezable.Freeze(p);
            p.FirstName = "what";
            Console.WriteLine(p);
            #endregion
        }
Example #3
0
        public void DynProxyGetTarget_should_return_proxy_itself()
        {
            var pet  = Freezable.MakeFreezable <Pet>();
            var hack = pet as IProxyTargetAccessor;

            Assert.NotNull(hack);
            Assert.Same(pet, hack.DynProxyGetTarget());
        }
        public void Freezable_Should_Not_Intercept_Property_Getters()
        {
            var pet     = Freezable.MakeFreezable <Pet>();
            var notUsed = pet.Age; // not intercepted
            var interceptedMethodsCount = GetInterceptedMethodsCountFor <FreezableInterceptor>(pet);

            Assert.AreEqual(0, interceptedMethodsCount);
        }
        public void Freezable_should_intercept_property_setters()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 5; // should intercept
            var interceptedMethodsCount = GetInterceptedMethodsCountFor <FreezableInterceptor>(pet);

            Assert.AreEqual(1, interceptedMethodsCount);
        }
Example #6
0
        public void FreezablePerson_Test()
        {
            Person per = Freezable.MakeFreezable <Person>();

            per.FirstName = "Foo";
            per.LastName  = "Bar";

            Assert.IsTrue(Freezable.IsFreezable(per));
        }
Example #7
0
        public void Freezable_should_not_hold_any_reference_to_created_objects()
        {
            var pet = Freezable.MakeFreezable <Pet>();
            var petWeakReference = new WeakReference(pet, false);

            pet = null;
            GC.Collect();
            Assert.False(petWeakReference.IsAlive, "Object should have been collected");
        }
        public void DynProxyGetTarget_Should_Return_Proxy_Itself()
        {
            var pet  = Freezable.MakeFreezable <Pet>();
            var hack = pet as IProxyTargetAccessor;

            Assert.IsNotNull(hack);

            // DynProxyGetTarget()는 proxyed object를 반환한다.
            Assert.AreEqual(pet, hack.DynProxyGetTarget());
        }
Example #9
0
        public void Frozen_object_should_throw_ObjectFrozenException_when_trying_to_set_a_property()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 3;

            Freezable.Freeze(pet);

            Assert.Throws <ObjectFrozenException>(delegate { pet.Name = "This should throw"; });
        }
Example #10
0
        public void Freezable_should_work_normally()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 3;

            pet.Name = "Rex";
            pet.Age += pet.Name.Length;
            pet.ToString();
        }
        public void Freezable_should_not_hold_any_reference_to_created_objects()
        {
            var pet = Freezable.MakeFreezable <Pet>();
            var petWeakReference = new WeakReference(pet, false);

            pet = null;

            GC.Collect();
            GC.WaitForFullGCComplete();
            Assert.IsFalse(petWeakReference.IsAlive, "Object should have been released.");
        }
Example #12
0
        public void Frozen_object_should_not_intercept_getters()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 123;
            var age = pet.Age;

            Freezable.Freeze(pet);

            Assert.Equal(2, Freezable.GetCountOfInterceptorInvocations <CountingInterceptor>(pet));
            Assert.Equal(1, Freezable.GetCountOfInterceptorInvocations <FreezableInterceptor>(pet));
        }
Example #13
0
        public void Frozen_object_should_not_throw_when_trying_to_read_it()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 3;

            Freezable.Freeze(pet);

            Assert.True(Record.Exception(() => { var age = pet.Age; }) == null);
            Assert.True(Record.Exception(() => { var name = pet.Name; }) == null);
            Assert.True(Record.Exception(() => { var tr = pet.ToString(); }) == null);
        }
        public void Freezable_should_not_intercept_normal_methods()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            Freezable.Freeze(pet);
            Assert.IsTrue(Freezable.IsFrozen(pet));

            var dummy = pet.ToString(); // not intercepted
            var interceptedMethodsCount = GetInterceptedMethodsCountFor <FreezableInterceptor>(pet);

            Assert.AreEqual(0, interceptedMethodsCount);
        }
        public void Freezable_should_not_intercept_methods()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.ToString();

            int logsCount   = GetInterceptedMethodsCountFor <CallLoggingInterceptor>(pet);
            int freezeCount = GetInterceptedMethodsCountFor <FreezableInterceptor>(pet);

            Assert.AreEqual(3, logsCount);
            Assert.AreEqual(0, freezeCount);
        }
        public void Freezable_should_log_getters_and_setters()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 4;
            var age = pet.Age;

            int logsCount   = GetInterceptedMethodsCountFor <CallLoggingInterceptor>(pet);
            int freezeCount = GetInterceptedMethodsCountFor <FreezableInterceptor>(pet);

            Assert.AreEqual(2, logsCount);
            Assert.AreEqual(1, freezeCount);
        }
        public void Frozen_object_should_not_throw_when_trying_to_get_property()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 3;

            Freezable.Freeze(pet);

            var age      = pet.Age;
            var name     = pet.Name;
            var deceased = pet.Deceased;
            var str      = pet.ToString();
        }
Example #18
0
        public void CountCalls()
        {
            var pet = Freezable.MakeFreezable <Pet>();

            pet.Age = 123;
            pet.Age = 1243;
            pet.Age = 1223;
            var age  = pet.Age;
            var age2 = pet.Age;

            pet = null;

            var pet2 = Freezable.MakeFreezable <Pet>();

            pet2.Age = 123;
            pet2.Age = 1243;
            pet2.Age = 1223;
            var age3 = pet2.Age;
            var age4 = pet2.Age;
        }
        public void Freezable_should_work_normally()
        {
            var rex = Freezable.MakeFreezable <Pet>();

            rex.Name = "Rex";
            rex.Age += 50;
            Assert.AreEqual(50, rex.Age);
            rex.Deceased = true;

            Freezable.Freeze(rex);

            Assert.IsTrue(Freezable.IsFrozen(rex));

            try {
                rex.Age++;
                Assert.Fail("rex is frozen!!!");
            }
            catch (ObjectFreezenException) {
                Console.WriteLine("Oops. it's frozen. Can't change that anymore.");
            }
        }
Example #20
0
        public void IsFreezable_should_be_true_for_objects_created_with_MakeFreezable()
        {
            var freezablePet = Freezable.MakeFreezable <Pet>();

            Assert.True(Freezable.IsFreezable(freezablePet));
        }