예제 #1
0
            StorageEntry <T> IObjectStorage.GetOrCreate <T>(DataBuffer keySpace, StorageKey key, Func <StorageEntry <T> > creator)
            {
                var             space = GetSingleKeySpace(keySpace);
                ObjectDecorator dec;

                // get
                using (space.Lock(LockType.Read))
                {
                    if (space.TryGetValue(key, out dec))
                    {
                        return(dec.ToEntry <T>());
                    }
                }
                // not found, so create
                using (space.Lock(LockType.ReadUpgradable))
                {
                    if (space.TryGetValue(key, out dec))
                    {
                        return(dec.ToEntry <T>());
                    }
                    using (space.Lock(LockType.Write))
                    {
                        var ret = creator();
                        dec = ObjectDecorator.FromEntry(ret);
                        space.Add(key, dec);
                        return(ret);
                    }
                }
            }
 public void ShouldBuildAbstractTypeThenGetDecorated()
 {
     MockClass1 actual = builder.BuildAssemblyFromType<MockClass1>(typeof(MockClass1), null);
     Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
     decorator.Decorate<MockClass1>(actual);
     Assert.AreEqual("This is a sentence", actual.OtherMagic());
 }
 public void ShouldBuildAbstractTypeThenGetDecoratedWith2Args()
 {
     MockClass3 actual = builder.BuildAssemblyFromType<MockClass3>(typeof(MockClass3), null);
     Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
     decorator.Decorate<MockClass3>(actual);
     Assert.AreEqual("some1", actual.OtherMagic("some", 1));
 }
 public void ShouldBuildAbstractTypeThenGetDecoratedWith3Args()
 {
     MockClass actual = builder.BuildAssemblyFromType<MockClass>(typeof(MockClass), null);
     Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
     decorator.Decorate<MockClass>(actual);
     Assert.AreEqual("some1help", actual.DoSomeMagic("some", 1, "help"));
 }
예제 #5
0
        public void ShouldBuildAbstractTypeThenGetDecoratedWith2Args()
        {
            MockClass3 actual    = builder.BuildAssemblyFromType <MockClass3>(typeof(MockClass3), null);
            Decorator  decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass3>(actual);
            Assert.AreEqual("some1", actual.OtherMagic("some", 1));
        }
예제 #6
0
        public void ShouldBuildAbstractTypeThenGetDecorated()
        {
            MockClass1 actual    = builder.BuildAssemblyFromType <MockClass1>(typeof(MockClass1), null);
            Decorator  decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass1>(actual);
            Assert.AreEqual("This is a sentence", actual.OtherMagic());
        }
예제 #7
0
        public void ShouldImplementPropertiesAndDecorateThem()
        {
            MockInjectable actual    = builder.BuildAssemblyFromType <MockInjectable>(typeof(MockInjectable), null);
            Decorator      decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockInjectable>(actual);
            Assert.IsNotNull(actual.Earth);
        }
예제 #8
0
        public void ShouldBuildAbstractTypeThenGetDecoratedWith4Args()
        {
            MockClass4 actual    = builder.BuildAssemblyFromType <MockClass4>(typeof(MockClass4), null);
            Decorator  decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass4>(actual);
            Assert.AreEqual("some1helpme", actual.DoSomeMagic("some", 1, "help", "me"));
        }
        public void ShouldInterruptTheAbstractMethodAndUseAttributeFunction()
        {
            AbstractObjectBuilder<MockClass> builder = new AbstractObjectBuilder<MockClass>(new AssemblyBuilder(new CSharpProvider()));
            MockClass mock = builder.Construct(typeof(MockClass), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
            decorator.Decorate<MockClass>(mock);

            Assert.AreEqual("some1helpme", mock.DoSomeMagic("some", 1, "helpme"));
        }
예제 #10
0
        private static void Method2ToBenchMark()
        {
            AssemblyOpCodeBuilder builder = new AssemblyOpCodeBuilder();
            MockClass mock = builder.BuildAssemblyFromType<MockClass>(typeof(MockClass), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
            decorator.Decorate<MockClass>(mock);

            double value = mock.GetZero();
        }
예제 #11
0
        private static void Method1ToBenchMark()
        {
            AbstractObjectBuilder<MockClass> builder = new AbstractObjectBuilder<MockClass>(new AssemblyBuilder(new CSharpProvider()));
            MockClass mock = builder.Construct(typeof(MockClass), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
            decorator.Decorate<MockClass>(mock);

            double value = mock.GetZero();
        }
예제 #12
0
        public void ShouldInterruptTheAbstractMethodAndUseAttributeFunction()
        {
            AbstractObjectBuilder <MockClass> builder = new AbstractObjectBuilder <MockClass>(new AssemblyBuilder(new CSharpProvider()));
            MockClass mock      = builder.Construct(typeof(MockClass), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass>(mock);

            Assert.AreEqual("some1helpme", mock.DoSomeMagic("some", 1, "helpme"));
        }
예제 #13
0
        private static void Method1ToBenchMark()
        {
            AbstractObjectBuilder <MockClass> builder = new AbstractObjectBuilder <MockClass>(new AssemblyBuilder(new CSharpProvider()));
            MockClass mock      = builder.Construct(typeof(MockClass), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass>(mock);

            double value = mock.GetZero();
        }
예제 #14
0
        private static void Method2ToBenchMark()
        {
            AssemblyOpCodeBuilder builder   = new AssemblyOpCodeBuilder();
            MockClass             mock      = builder.BuildAssemblyFromType <MockClass>(typeof(MockClass), null);
            Decorator             decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockClass>(mock);

            double value = mock.GetZero();
        }
        public void ShouldBeAbleToCallAbstractMethodsAndBeImplementedByAnAttribute()
        {
            AbstractMockObject mock      = ConstructDiscreteHelper <AbstractMockObject>();
            Decorator          decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <AbstractMockObject>(mock);
            Assert.AreEqual("The Next Employer", mock.TestGetEmployer());
            Assert.AreEqual("MyName 1", mock.GetTitleAndPosition("MyName", 1));
            Assert.AreEqual((-3 - 5 - 7 - 2), mock.Subtract(3, 5, 7, 2));
            Assert.AreEqual((3 + 5 + 7 + 2), mock.Add(3, 5, 7, 2));
            Assert.AreEqual(0, mock.GetZero());
        }
예제 #16
0
            void IObjectStorage.Put <T>(DataBuffer keySpace, StorageKey key, StorageEntry <T> entry)
            {
                var space = GetSingleKeySpace(keySpace);

                using (space.Lock(LockType.Write))
                {
                    space[key] = new ObjectDecorator
                    {
                        Instance = entry.Instance,
                        Expires  = entry.Expires,
                        Updated  = entry.Updated
                    };
                }
            }
예제 #17
0
        public void DecoratePropertyTest()
        {
            AssemblyOpCodeBuilder builder = new AssemblyOpCodeBuilder();
            MockInjectable mock = builder.BuildAssemblyFromType<MockInjectable>(typeof(MockInjectable), null);
            Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
            decorator.Decorate<MockInjectable>(mock);

            Assert.IsNotNull(mock.Fire);
            Assert.IsTrue(mock.Fire is Fire);

            Assert.IsNotNull(mock.Water);
            Assert.IsTrue(mock.Water is Water);

            Assert.IsNotNull(mock.Earth);
            Assert.IsTrue(mock.Earth is Earth);
        }
예제 #18
0
        public void DecoratePropertyTest()
        {
            AssemblyOpCodeBuilder builder   = new AssemblyOpCodeBuilder();
            MockInjectable        mock      = builder.BuildAssemblyFromType <MockInjectable>(typeof(MockInjectable), null);
            Decorator             decorator = new ObjectDecorator(new ObjectInstantiator());

            decorator.Decorate <MockInjectable>(mock);

            Assert.IsNotNull(mock.Fire);
            Assert.IsTrue(mock.Fire is Fire);

            Assert.IsNotNull(mock.Water);
            Assert.IsTrue(mock.Water is Water);

            Assert.IsNotNull(mock.Earth);
            Assert.IsTrue(mock.Earth is Earth);
        }
예제 #19
0
 public void MyTestSetup()
 {
     decorator = new ObjectDecorator(inst);
 }
예제 #20
0
 public void MyTestCleanup()
 {
     inst.Clear();
     decorator = null;
 }
 public void ShouldImplementPropertiesAndDecorateThem()
 {
     MockInjectable actual = builder.BuildAssemblyFromType<MockInjectable>(typeof(MockInjectable), null);
     Decorator decorator = new ObjectDecorator(new ObjectInstantiator());
     decorator.Decorate<MockInjectable>(actual);
     Assert.IsNotNull(actual.Earth);
 }