public void GenerateAllFieldsTest()
        {
            var implDetails = new Dictionary<JsonSchema, SchemaImplementationDetails>();
            var schema = new MockSchema();
            schema.SchemaDetails = new JsonSchema();
            schema.SchemaDetails.Type = JsonSchemaType.Object;
            schema.SchemaDetails.Properties = new Dictionary<string, JsonSchema>();
            implDetails.Add(schema.SchemaDetails, new SchemaImplementationDetails());

            foreach (var pair in NamesToType)
            {
                JsonSchema property = new JsonSchema();
                property.Type = pair.Value;
                property.Id = pair.Key;
                schema.SchemaDetails.Properties.Add(pair.Key, property);
                implDetails.Add(property, new SchemaImplementationDetails());
            }

            var decorator = new StandardPropertyFieldDecorator();
            IList<CodeMemberField> generatedFields = decorator.GenerateAllFields(
                "test", schema.SchemaDetails, implDetails, internalClassProvider);

            Assert.NotNull(generatedFields);
            Assert.AreEqual(NamesToType.Count, generatedFields.Count);
            foreach (var field in generatedFields)
            {
                Assert.That(
                    NamesToType.ContainsKey(field.Name.Substring(1)), "field name was not present in namesToType " + field.Name);
            }

            int item = 0;
            foreach (var pair in NamesToType)
            {
                var field = generatedFields[item++];
                Assert.AreEqual(
                    "_" + pair.Key, field.Name, string.Format("Name different for expected at index {0}", item - 1));
                Assert.AreEqual(
                    SchemaDecoratorUtil.GetCodeType(new JsonSchema { Type = pair.Value }, null, internalClassProvider)
                        .BaseType, field.Type.BaseType);
            }
        }
        public void GenerateFieldTest()
        {
            var schema = new JsonSchema();
            var decorator = new StandardPropertyFieldDecorator();
            var implDetails = new SchemaImplementationDetails();

            schema.Type = JsonSchemaType.String;
            CodeMemberField generatedField = decorator.GenerateField(
                "normalName", schema, implDetails, 1, internalClassProvider, Enumerable.Empty<string>());

            Assert.NotNull(generatedField);
            Assert.AreEqual(typeof(string).FullName, generatedField.Type.BaseType);
            Assert.AreEqual("_normalName", generatedField.Name);
            Assert.AreEqual(MemberAttributes.Private, generatedField.Attributes);

            schema.Type = JsonSchemaType.Boolean;
            generatedField = decorator.GenerateField(
                "public", schema, implDetails, 2, internalClassProvider, Enumerable.Empty<string>());

            Assert.NotNull(generatedField);
            Assert.AreEqual(typeof(Nullable<>).FullName, generatedField.Type.BaseType);
            Assert.AreEqual(typeof(bool).FullName, generatedField.Type.TypeArguments[0].BaseType);
            Assert.AreEqual("_public", generatedField.Name);
            Assert.AreEqual(MemberAttributes.Private, generatedField.Attributes);

            generatedField = decorator.GenerateField(
                "UPPERCASE", schema, implDetails, 2, internalClassProvider, Enumerable.Empty<string>());

            Assert.NotNull(generatedField);
            Assert.AreEqual("_UPPERCASE", generatedField.Name);
        }
        public void GenerateAllFieldsTestEdgeCases()
        {
            var implDetails = new Dictionary<JsonSchema, SchemaImplementationDetails>();
            var decorator = new StandardPropertyFieldDecorator();
            var schema = new MockSchema();
            string name = "test";
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllFields(name, null, implDetails, internalClassProvider));
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllFields(name, schema.SchemaDetails, null, internalClassProvider));
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllFields(name, schema.SchemaDetails, implDetails, null));

            schema.Name = "test";
            schema.SchemaDetails = null;
            Assert.Throws(
                typeof(ArgumentNullException),
                () => decorator.GenerateAllFields(name, schema.SchemaDetails, implDetails, internalClassProvider));

            schema.SchemaDetails = new JsonSchema();
            schema.SchemaDetails.Properties = null;
            var expectedEmpty = decorator.GenerateAllFields(
                name, schema.SchemaDetails, implDetails, internalClassProvider);
            Assert.IsNotNull(expectedEmpty);
            Assert.AreEqual(0, expectedEmpty.Count);
        }