예제 #1
0
            public void Should_Invoke_Generator()
            {
                var context           = CreateContext(typeof(string), _overrides);
                var generatorOverride = AutoGeneratorFactory.GetGenerator(context);

                generatorOverride.Generate(context).Should().BeOfType <string>().And.Should().NotBeNull();
            }
예제 #2
0
            public void GetGenerator_Should_Return_ArrayGenerator(Type type)
            {
                var itemType      = type.GetElementType();
                var generatorType = GetGeneratorType(typeof(ArrayGenerator <>), itemType);

                AutoGeneratorFactory.GetGenerator(type, _context).Should().BeOfType(generatorType);
            }
예제 #3
0
            public void GetGenerator_Should_Return_EnumGenerator()
            {
                var type    = typeof(TestEnum);
                var context = CreateContext(type);

                AutoGeneratorFactory.GetGenerator(context).Should().BeOfType <EnumGenerator <TestEnum> >();
            }
예제 #4
0
            public void GetGenerator_Should_Return_TypeGenerator(Type type)
            {
                var context       = CreateContext(type);
                var generatorType = GetGeneratorType(typeof(TypeGenerator <>), type);

                AutoGeneratorFactory.GetGenerator(context).Should().BeOfType(generatorType);
            }
예제 #5
0
            public void GetGenerator_Should_Return_Generator(Type type)
            {
                var context   = CreateContext(type);
                var generator = AutoGeneratorFactory.Generators[type];

                AutoGeneratorFactory.GetGenerator(context).Should().Be(generator);
            }
            public void GetGenerator_Should_Return_NullableGenerator()
            {
                var type    = typeof(ExpandoObject);
                var context = CreateContext(type);

                AutoGeneratorFactory.GetGenerator(context).Should().BeOfType <Generators.ExpandoObjectGenerator>();
            }
예제 #7
0
            public void GetGenerator_Should_Return_EnumerableGenerator(Type type)
            {
                var genericTypes  = ReflectionHelper.GetGenericArguments(type);
                var itemType      = genericTypes.ElementAt(0);
                var generatorType = GetGeneratorType(typeof(EnumerableGenerator <>), itemType);

                AutoGeneratorFactory.GetGenerator(type, _context).Should().BeOfType(generatorType);
            }
예제 #8
0
            public void GetGenerator_Should_Return_DictionaryGenerator(Type type)
            {
                var genericTypes  = ReflectionHelper.GetGenericArguments(type);
                var keyType       = genericTypes.ElementAt(0);
                var valueType     = genericTypes.ElementAt(1);
                var generatorType = GetGeneratorType(typeof(DictionaryGenerator <,>), keyType, valueType);

                AutoGeneratorFactory.GetGenerator(type, _context).Should().BeOfType(generatorType);
            }
예제 #9
0
            public void Should_Return_Generator_If_No_Matching_Override()
            {
                _overrides = new List <AutoGeneratorOverride>
                {
                    new TestGeneratorOverride()
                };

                var context = CreateContext(typeof(int), _overrides);

                AutoGeneratorFactory.GetGenerator(context).Should().BeOfType <IntGenerator>();
            }
예제 #10
0
            public void Should_Return_All_Matching_Overrides()
            {
                var generatorOverride = new TestGeneratorOverride(true);

                _overrides.Insert(1, generatorOverride);

                var context = CreateContext(typeof(string), _overrides);
                var invoker = AutoGeneratorFactory.GetGenerator(context) as AutoGeneratorOverrideInvoker;

                invoker.Overrides.Should().BeEquivalentTo(new[] { generatorOverride, _generatorOverride });
            }
            public void GetGenerator_Should_Return_Generator_For_DataSets_And_DataTables(Type dataType, Type generatorType)
            {
                // Arrange
                var context = CreateContext(dataType);

                // Act
                var generator = AutoGeneratorFactory.GetGenerator(context);

                // Assert
                generator.Should().BeAssignableTo(generatorType);
            }
            public void Should_Not_Throw_For_Reference_Types()
            {
                var type        = typeof(TestClass);
                var constructor = type.GetConstructors().Single();
                var parameter   = constructor.GetParameters().Single();
                var context     = CreateContext(parameter.ParameterType);

                Action action = () => AutoGeneratorFactory.GetGenerator(context);

                action.Should().NotThrow();
            }
                public void Should_Handle_Subclasses(Type readOnlyDictionaryType)
                {
                    // Arrange
                    var config = new AutoConfig();

                    var context = new AutoGenerateContext(config);

                    context.GenerateType = readOnlyDictionaryType;

                    // Act
                    var generator = AutoGeneratorFactory.ResolveGenerator(context);

                    var instance = generator.Generate(context);

                    // Arrange
                    generator.Should().BeOfType <ReadOnlyDictionaryGenerator <int, string> >();

                    instance.Should().BeOfType(readOnlyDictionaryType);
                }
                public void Should_Handle_Subclasses(Type listType)
                {
                    // Arrange
                    var config = new AutoConfig();

                    var context = new AutoGenerateContext(config);

                    context.GenerateType = listType;

                    // Act
                    var generator = AutoGeneratorFactory.ResolveGenerator(context);

                    var instance = generator.Generate(context);

                    // Arrange
                    generator.Should().BeOfType <ListGenerator <int> >();

                    instance.Should().BeOfType(listType);
                }
예제 #15
0
        object IAutoGenerator.Generate(AutoGenerateContext context)
        {
            var instance = context.Instance;

#if !NETSTANDARD1_3
            // Need to copy the target dictionary to avoid mutations during population
            var target     = instance as IDictionary <string, object>;
            var source     = new Dictionary <string, object>(target);
            var properties = source.Where(pair => pair.Value != null);

            foreach (var property in properties)
            {
                // Configure the context
                var type = property.Value.GetType();

                context.ParentType   = context.GenerateType;
                context.GenerateType = type;
                context.GenerateName = property.Key;

                if (ReflectionHelper.IsExpandoObject(type))
                {
                    context.Instance = property.Value;
                }
                else
                {
                    context.Instance = null;
                }

                // Generate the property values
                var generator = AutoGeneratorFactory.GetGenerator(context);
                target[property.Key] = generator.Generate(context);
            }

            // Reset the instance context
            context.Instance = instance;
#endif

            return(instance);
        }
예제 #16
0
 public void GetGenerator_Should_Return_NullableGenerator()
 {
     AutoGeneratorFactory.GetGenerator <TestEnum?>(_context).Should().BeOfType <NullableGenerator <TestEnum> >();
 }