コード例 #1
0
ファイル: TypeResolver.cs プロジェクト: PhenTse/virtualRadar
        /// <summary>
        /// Resolves TsType to the more specialized type.
        /// </summary>
        /// <param name="toResolve">The type to resolve.</param>
        /// <returns></returns>
        private TsType ResolveType(TsType toResolve, TsPropertyVisibilityFormatter propertyVisibilityFormatter, bool useOpenGenericDefinition = true)
        {
            if (!(toResolve is TsType))
            {
                return(toResolve);
            }

            if (_knownTypes.ContainsKey(toResolve.Type))
            {
                return(_knownTypes[toResolve.Type]);
            }
            else if (toResolve.Type.IsGenericType && useOpenGenericDefinition)
            {
                // We stored its open type definition instead
                TsType openType = null;
                if (_knownTypes.TryGetValue(toResolve.Type.GetGenericTypeDefinition(), out openType))
                {
                    return(openType);
                }
            }
            else if (toResolve.Type.IsGenericType)
            {
                var genericType = TsType.Create(toResolve.Type, propertyVisibilityFormatter);
                _knownTypes[toResolve.Type] = genericType;
                return(genericType);
            }

            var    typeFamily = TsType.GetTypeFamily(toResolve.Type);
            TsType type       = null;

            switch (typeFamily)
            {
            case TsTypeFamily.System: type = new TsSystemType(toResolve.Type); break;

            case TsTypeFamily.Collection: type = this.CreateCollectionType(toResolve, propertyVisibilityFormatter); break;

            case TsTypeFamily.Enum: type = new TsEnum(toResolve.Type); break;

            default: type = TsType.Any; break;
            }

            _knownTypes[toResolve.Type] = type;
            return(type);
        }
        public void WhenInitializedWithNullableType_KindIsSetAccordingToUnderlayingType()
        {
            var target = new TsSystemType(typeof(int?));

            Assert.Equal(SystemTypeKind.Number, target.Kind);
        }
        public void WhenInitializedWithDateTime_KindIsSetToDate()
        {
            var target = new TsSystemType(typeof(DateTime));

            Assert.Equal(SystemTypeKind.Date, target.Kind);
        }
        public void WhenInitializedWithString_KindIsSetToString()
        {
            var target = new TsSystemType(typeof(string));

            Assert.Equal(SystemTypeKind.String, target.Kind);
        }
        public void WhenInitializedWithDecimal_KindIsSetToNumber()
        {
            var target = new TsSystemType(typeof(decimal));

            Assert.Equal(SystemTypeKind.Number, target.Kind);
        }
        public void WhenInitializedWithBool_KindIsSetToBool()
        {
            var target = new TsSystemType(typeof(bool));

            Assert.Equal(SystemTypeKind.Bool, target.Kind);
        }