public void TestCreateConstructorWithArgs()
        {
            var decorator = new StandardConstructServiceDecorator();
            CodeConstructor constructor = decorator.CreateConstructorWithArgs();

            Assert.AreEqual(2, constructor.Parameters.Count);
            Assert.AreEqual(typeof(IService).FullName, constructor.Parameters[0].Type.BaseType);
            Assert.AreEqual(typeof(IAuthenticator).FullName, constructor.Parameters[1].Type.BaseType);
            Assert.AreEqual(ServiceClassGenerator.GenericServiceName, constructor.Parameters[0].Name);
            Assert.AreEqual(ServiceClassGenerator.AuthenticatorName, constructor.Parameters[1].Name);
            Assert.GreaterOrEqual(2, constructor.Statements.Count);

            Assert.IsInstanceOf(typeof(CodeAssignStatement), constructor.Statements[0]);
            Assert.IsInstanceOf(typeof(CodeAssignStatement), constructor.Statements[1]);
        }
        public void TestDecorateClass()
        {
            var codeType = new CodeTypeDeclaration("TestClass");
            var decorator = new StandardConstructServiceDecorator();
            var service = CreateBuzzService();

            Assert.AreEqual(0, codeType.Members.Count);
            decorator.DecorateClass(service, codeType);

            Assert.AreEqual(1, codeType.Members.Count); // We expect one member to be added
            Assert.IsInstanceOf(typeof(CodeConstructor), codeType.Members[0]);
            var constructor = (CodeConstructor) codeType.Members[0];
            // Test that both of the add statment methods where called.
            Assert.GreaterOrEqual(constructor.Statements.Count, 9);

            //We have already tested the statment formation in the other tests.
        }
        public void TestAddResourceAssignments()
        {
            CodeMemberMethod method = new CodeMemberMethod();
            method.Name = "TestMethod";
            var decorator = new StandardConstructServiceDecorator();

            var service = CreateBuzzService();
            decorator.AddResourceAssignments(service, method);

            Assert.AreEqual(7, method.Statements.Count);
            foreach (var statment in method.Statements)
            {
                Assert.IsInstanceOf(typeof(CodeAssignStatement), statment);
                var assign = (CodeAssignStatement) statment;
                Assert.IsNotNull(assign.Left);
                Assert.IsNotNull(assign.Right);
                Assert.IsInstanceOf(typeof(CodeFieldReferenceExpression), assign.Left);
                Assert.IsInstanceOf(typeof(CodeObjectCreateExpression), assign.Right);
            }
        }