コード例 #1
0
ファイル: DescriptionTests.cs プロジェクト: dimaserd/Zoo
        public void TestTypes(Type type, bool isRecursiveExpected)
        {
            var doc = CrocoTypeDescription.GetDescription(type);

            var main = doc.GetMainTypeDescription();

            Assert.IsNotNull(doc);
            Assert.AreEqual(type, main.ExtractType());

            var isRecursive = new CrocoClassDescriptionChecker().IsRecursiveType(doc);

            Assert.AreEqual(isRecursiveExpected, isRecursive);
        }
コード例 #2
0
        /// <summary>
        /// Создать из типа
        /// </summary>
        /// <param name="type"></param>
        /// <param name="valueJson"></param>
        /// <param name="opts"></param>
        /// <returns></returns>
        private GenerateGenericUserInterfaceModel CreateFromType(Type type, string valueJson = null, GenericInterfaceOptions opts = null)
        {
            var desc = TypeDescriptionBuilder.GetTypeDescriptionResult(type);

            var main = desc.GetMainTypeDescription();

            if (!main.IsClass)
            {
                throw new InvalidOperationException(ExceptionTexts.NonComplexTypesAreNotSupported);
            }

            var typeChecker = new CrocoClassDescriptionChecker();

            if (typeChecker.IsRecursiveType(desc))
            {
                throw new InvalidOperationException(ExceptionTexts.RecursiveTypesAreNotSupported);
            }

            if (typeChecker.HasMultiDimensionalArrays(desc))
            {
                throw new InvalidOperationException(ExceptionTexts.ClassesWithMultiDimensionalArrayPropertiesAreNotSupported);
            }

            if (opts == null)
            {
                opts = GenericInterfaceOptions.Default();
            }

            var prefix = string.Empty;

            var blocks = GenericUserInterfaceModelBuilderExtensions.GetBlocks(prefix, desc.GetMainTypeDescription(), desc, opts);

            return(new GenerateGenericUserInterfaceModel
            {
                TypeDescription = desc,
                Interface = new GenericInterfaceModel
                {
                    Prefix = prefix,
                    Blocks = blocks
                },
                ValueJson = valueJson
            });
        }