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); }
/// <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 }); }