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(); }
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 }
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); }
public void FreezablePerson_Test() { Person per = Freezable.MakeFreezable <Person>(); per.FirstName = "Foo"; per.LastName = "Bar"; Assert.IsTrue(Freezable.IsFreezable(per)); }
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()); }
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"; }); }
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."); }
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)); }
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(); }
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."); } }
public void IsFreezable_should_be_true_for_objects_created_with_MakeFreezable() { var freezablePet = Freezable.MakeFreezable <Pet>(); Assert.True(Freezable.IsFreezable(freezablePet)); }