Пример #1
0
        /// <summary>
        /// Resolves TsType to the more specialized type.
        /// </summary>
        /// <param name="toResolve">The type to resolve.</param>
        /// <returns></returns>
        private TsType ResolveType(TsType toResolve, 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);
                _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); break;
                case TsTypeFamily.Enum: type = new TsEnum(toResolve.Type); break;
                default: type = TsType.Any; break;
            }

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

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

            Assert.Equal(SystemTypeKind.Number, target.Kind);
        }
        public void WhenInitializedWithInt_KindIsSetToNumber()
        {
            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 WhenInitializedWithBool_KindIsSetToBool()
        {
            var target = new TsSystemType(typeof(bool));

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