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); }
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); }
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\"?>" + 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); }
//读取全部是从缓存文件中读,若为空先写入缓存,再读取。(基本上所有的涉及缓存的操作都是这么个套路) 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); }
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()); }
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); }
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); }
//为了提升性能,这里提供基于文件的缓存策略,而不需要每次重新遍历 private static IEnumerable<Type> ReadTypesFromCache(string cacheName,Predicate<Type> predict,IBuildManager buildManager,TypeCacheSerializer serializer) { return null; //涉及到文件又不会了。。。 }
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); }