public void DeserializeTypes_ReturnsNullIfTypeNotFound()
        {
            string expectedFormat = @"<?xml version=""1.0"" encoding=""utf-16""?>
<!--This file is automatically generated. Please do not modify the contents of this file.-->
<typeCache lastModified=""__IGNORED__"" mvcVersionId=""{0}"">
  <assembly name=""{1}"">
    <module versionId=""{2}"">
      <type>System.String</type>
      <type>This.Type.Does.Not.Exist</type>
    </module>
  </assembly>
</typeCache>";

            // Arrange
            string expected = String.Format(expectedFormat,
                                            GetMvidForType(typeof(TypeCacheSerializer)) /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader input = new StringReader(expected);

            // Act
            List<Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.Null(deserializedTypes);
        }
Пример #2
0
        public void DeserializeTypes_ReturnsNullIfTypeNotFound()
        {
            string expectedFormat = @"<?xml version=""1.0"" encoding=""utf-16""?>
<!--This file is automatically generated. Please do not modify the contents of this file.-->
<typeCache lastModified=""__IGNORED__"" mvcVersionId=""{0}"">
  <assembly name=""{1}"">
    <module versionId=""{2}"">
      <type>System.String</type>
      <type>This.Type.Does.Not.Exist</type>
    </module>
  </assembly>
</typeCache>";

            // Arrange
            string expected = String.Format(expectedFormat,
                                            GetMvidForType(typeof(TypeCacheSerializer)) /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                                            );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader        input      = new StringReader(expected);

            // Act
            List <Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.IsNull(deserializedTypes);
        }
Пример #3
0
        public void DeserializeTypes_Success()
        {
            // Arrange
            string expected = String.Format(
                _expectedDeserializationFormat,
                GetMvidForType(
                    typeof(TypeCacheSerializer)
                    )                          /* mvcVersionId */
                ,
                _mscorlibAsmFullName           /* assembly.name */
                ,
                GetMvidForType(typeof(object)) /* module.versionId */
                );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader        input      = new StringReader(expected);

            Type[] expectedTypes = new Type[] { typeof(string), typeof(object) };

            // Act
            List <Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.Equal(expectedTypes, deserializedTypes.ToArray());
        }
Пример #4
0
        public void SerializeTypes()
        {
            // Arrange
            DateTime expectedDate   = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Jan 1, 2001 midnight UTC
            string   expectedFormat =
                "<?xml version=\"1.0\" encoding=\"utf-16\"?>"
                + Environment.NewLine
                + "<!--This file is automatically generated. Please do not modify the contents of this file.-->"
                + Environment.NewLine
                + "<typeCache lastModified=\"{0}\" mvcVersionId=\"{1}\">"
                + Environment.NewLine
                + "  <assembly name=\"{2}\">"
                + Environment.NewLine
                + "    <module versionId=\"{3}\">"
                + Environment.NewLine
                + "      <type>System.String</type>"
                + Environment.NewLine
                + "      <type>System.Object</type>"
                + Environment.NewLine
                + "    </module>"
                + Environment.NewLine
                + "  </assembly>"
                + Environment.NewLine
                + "</typeCache>";

            string expected = String.Format(
                CultureInfo.InvariantCulture,
                expectedFormat,
                expectedDate /* lastModified */
                ,
                GetMvidForType(
                    typeof(TypeCacheSerializer)
                    )                          /* mvcVersionId */
                ,
                _mscorlibAsmFullName           /* assembly.name */
                ,
                GetMvidForType(typeof(object)) /* module.versionId */
                );

            Type[] typesToSerialize = new Type[] { typeof(string), typeof(object) };

            TypeCacheSerializer serializer = new TypeCacheSerializer();

            serializer.CurrentDateOverride = expectedDate;

            StringWriter output = new StringWriter();

            // Act
            serializer.SerializeTypes(typesToSerialize, output);
            string outputString = output.ToString();

            // Assert
            Assert.Equal(expected, outputString);
        }
Пример #5
0
 //读取全部是从缓存文件中读,若为空先写入缓存,再读取。(基本上所有的涉及缓存的操作都是这么个套路)
 public static IEnumerable<Type> GetFilteredTypesFromAssemblies(string cacheName,IBuildManager buildManager,Predicate<Type> predict)
 {
     TypeCacheSerializer serializer = new TypeCacheSerializer();
     IEnumerable<Type> matchingTypes = ReadTypesFromCache(cacheName,predict,buildManager,serializer);
     if (matchingTypes!=null)
     {
         return matchingTypes;
     }
     matchingTypes = FilterTypesInAssemblies(buildManager,predict);
     SaveTypesToCache(cacheName,matchingTypes,buildManager,serializer);
     return matchingTypes;
 }
        public void DeserializeTypes_ReturnsNullIfMvcVersionIdDoesNotMatch()
        {
            // Arrange
            string expected = String.Format(_expectedDeserializationFormat,
                                            Guid.Empty /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader input = new StringReader(expected);

            // Act
            List<Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.Null(deserializedTypes);
        }
Пример #7
0
        public void DeserializeTypes_ReturnsNullIfMvcVersionIdDoesNotMatch()
        {
            // Arrange
            string expected = String.Format(_expectedDeserializationFormat,
                                            Guid.Empty /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                                            );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader        input      = new StringReader(expected);

            // Act
            List <Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.IsNull(deserializedTypes);
        }
        public void SaveToCache_ReadFromCache_Success()
        {
            //
            // SAVING
            //

            // Arrange
            Type[] expectedTypes = new Type[]
            {
                typeof(object),
                typeof(string)
            };

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            string           cacheName     = "testCache";
            MockBuildManager buildManager  = new MockBuildManager();

            // Act
            TypeCacheUtil.SaveTypesToCache(cacheName, expectedTypes, buildManager, serializer);

            // Assert
            MemoryStream writeStream = buildManager.CachedFileStore[cacheName] as MemoryStream;

            Assert.NotNull(writeStream);

            byte[] streamContents = writeStream.ToArray();
            Assert.NotEqual(0, streamContents.Length);

            //
            // READING
            //

            // Arrange
            MemoryStream readStream = new MemoryStream(streamContents);

            buildManager.CachedFileStore[cacheName] = readStream;

            // Act
            List <Type> returnedTypes = TypeCacheUtil.ReadTypesFromCache(cacheName, _ => true /* all types are valid */, buildManager, serializer);

            // Assert
            Assert.Equal(expectedTypes, returnedTypes.ToArray());
        }
Пример #9
0
        public void SaveToCache_ReadFromCache_ReturnsNullIfTypesAreInvalid()
        {
            //
            // SAVING
            //

            // Arrange
            Type[] expectedTypes = new Type[] {
                typeof(object),
                typeof(string)
            };

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            string           cacheName     = "testCache";
            MockBuildManager buildManager  = new MockBuildManager();

            // Act
            TypeCacheUtil.SaveTypesToCache(cacheName, expectedTypes, buildManager, serializer);

            // Assert
            MemoryStream writeStream = buildManager.CachedFileStore[cacheName] as MemoryStream;

            Assert.IsNotNull(writeStream, "Stream should've been created.");

            byte[] streamContents = writeStream.ToArray();
            Assert.AreNotEqual(0, streamContents.Length, "Data should've been written to the stream.");

            //
            // READING
            //

            // Arrange
            MemoryStream readStream = new MemoryStream(streamContents);

            buildManager.CachedFileStore[cacheName] = readStream;

            // Act
            List <Type> returnedTypes = TypeCacheUtil.ReadTypesFromCache(cacheName, _ => false /* all types are invalid */, buildManager, serializer);

            // Assert
            Assert.IsNull(returnedTypes);
        }
Пример #10
0
        public void SaveToCache_ReadFromCache_ReturnsNullIfTypesAreInvalid()
        {
            //
            // SAVING
            //

            // Arrange
            Type[] expectedTypes = new Type[]
            {
                typeof(object),
                typeof(string)
            };

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            string cacheName = "testCache";
            MockBuildManager buildManager = new MockBuildManager();

            // Act
            TypeCacheUtil.SaveTypesToCache(cacheName, expectedTypes, buildManager, serializer);

            // Assert
            MemoryStream writeStream = buildManager.CachedFileStore[cacheName] as MemoryStream;
            Assert.NotNull(writeStream);

            byte[] streamContents = writeStream.ToArray();
            Assert.NotEqual(0, streamContents.Length);

            //
            // READING
            //

            // Arrange
            MemoryStream readStream = new MemoryStream(streamContents);
            buildManager.CachedFileStore[cacheName] = readStream;

            // Act
            List<Type> returnedTypes = TypeCacheUtil.ReadTypesFromCache(cacheName, _ => false /* all types are invalid */, buildManager, serializer);

            // Assert
            Assert.Null(returnedTypes);
        }
        public void DeserializeTypes_Success()
        {
            // Arrange
            string expected = String.Format(_expectedDeserializationFormat,
                                            GetMvidForType(typeof(TypeCacheSerializer)) /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                );

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            StringReader input = new StringReader(expected);

            Type[] expectedTypes = new Type[]
            {
                typeof(string),
                typeof(object)
            };

            // Act
            List<Type> deserializedTypes = serializer.DeserializeTypes(input);

            // Assert
            Assert.Equal(expectedTypes, deserializedTypes.ToArray());
        }
        public void SerializeTypes()
        {
            // Arrange
            DateTime expectedDate = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Jan 1, 2001 midnight UTC
            string expectedFormat = @"<?xml version=""1.0"" encoding=""utf-16""?>
<!--This file is automatically generated. Please do not modify the contents of this file.-->
<typeCache lastModified=""{0}"" mvcVersionId=""{1}"">
  <assembly name=""{2}"">
    <module versionId=""{3}"">
      <type>System.String</type>
      <type>System.Object</type>
    </module>
  </assembly>
</typeCache>";
            string expected = String.Format(expectedFormat,
                                            expectedDate /* lastModified */,
                                            GetMvidForType(typeof(TypeCacheSerializer)) /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                );

            Type[] typesToSerialize = new Type[]
            {
                typeof(string),
                typeof(object)
            };

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            serializer.CurrentDateOverride = expectedDate;

            StringWriter output = new StringWriter();

            // Act
            serializer.SerializeTypes(typesToSerialize, output);
            string outputString = output.ToString();

            // Assert
            Assert.Equal(expected, outputString);
        }
Пример #13
0
 //为了提升性能,这里提供基于文件的缓存策略,而不需要每次重新遍历
 private static IEnumerable<Type> ReadTypesFromCache(string cacheName,Predicate<Type> predict,IBuildManager buildManager,TypeCacheSerializer serializer)
 {
     return null; //涉及到文件又不会了。。。
 }
Пример #14
0
 public static void SaveTypesToCache(string cacheName,IEnumerable<Type> matchingTypes,IBuildManager builderManager,TypeCacheSerializer serializer)
 {
 }
        public void SerializeTypes()
        {
            // Arrange
            DateTime expectedDate = new DateTime(2001, 1, 1, 0, 0, 0, DateTimeKind.Utc); // Jan 1, 2001 midnight UTC
            string expectedFormat =
                "<?xml version=\"1.0\" encoding=\"utf-16\"?>" + Environment.NewLine
              + "<!--This file is automatically generated. Please do not modify the contents of this file.-->" + Environment.NewLine
              + "<typeCache lastModified=\"{0}\" mvcVersionId=\"{1}\">" + Environment.NewLine
              + "  <assembly name=\"{2}\">" + Environment.NewLine
              + "    <module versionId=\"{3}\">" + Environment.NewLine
              + "      <type>System.String</type>" + Environment.NewLine
              + "      <type>System.Object</type>" + Environment.NewLine
              + "    </module>" + Environment.NewLine
              + "  </assembly>" + Environment.NewLine
              + "</typeCache>";

            string expected = String.Format(System.Globalization.CultureInfo.InvariantCulture, expectedFormat,
                                            expectedDate /* lastModified */,
                                            GetMvidForType(typeof(TypeCacheSerializer)) /* mvcVersionId */,
                                            _mscorlibAsmFullName /* assembly.name */,
                                            GetMvidForType(typeof(object)) /* module.versionId */
                );

            Type[] typesToSerialize = new Type[]
            {
                typeof(string),
                typeof(object)
            };

            TypeCacheSerializer serializer = new TypeCacheSerializer();
            serializer.CurrentDateOverride = expectedDate;

            StringWriter output = new StringWriter();

            // Act
            serializer.SerializeTypes(typesToSerialize, output);
            string outputString = output.ToString();

            // Assert
            Assert.Equal(expected, outputString);
        }