diff options
author | Michal Strehovský <MichalStrehovsky@users.noreply.github.com> | 2017-08-26 07:55:43 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-26 07:55:43 +0300 |
commit | 872ddb1753224a102380296f5e9219f5e0ce864e (patch) | |
tree | 90a52895fce25de3878faecc477e7f40db11e517 /src/ILCompiler.TypeSystem | |
parent | f954fb1e95c00d3bbd51822c53a2bbab7cca34d1 (diff) |
Add custom attribute type name formatter (#4367)
Diffstat (limited to 'src/ILCompiler.TypeSystem')
-rw-r--r-- | src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj | 3 | ||||
-rw-r--r-- | src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs | 55 |
2 files changed, 58 insertions, 0 deletions
diff --git a/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj b/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj index 67bbb498f..d68cff2c9 100644 --- a/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj +++ b/src/ILCompiler.TypeSystem/src/ILCompiler.TypeSystem.csproj @@ -112,6 +112,9 @@ <Compile Include="..\..\Common\src\TypeSystem\Common\ThrowHelper.Common.cs"> <Link>TypeSystem\Common\ThrowHelper.Common.cs</Link> </Compile> + <Compile Include="..\..\Common\src\TypeSystem\Common\Utilities\CustomAttributeTypeNameFormatter.cs"> + <Link>Utilities\CustomAttributeTypeNameFormatter.cs</Link> + </Compile> <Compile Include="..\..\Common\src\TypeSystem\Common\Utilities\CustomAttributeTypeNameParser.cs"> <Link>Utilities\CustomAttributeTypeNameParser.cs</Link> </Compile> diff --git a/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs b/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs index b6cd357b4..e366f0744 100644 --- a/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs +++ b/src/ILCompiler.TypeSystem/tests/TypeNameParsingTests.cs @@ -3,6 +3,7 @@ // See the LICENSE file in the project root for more information. using System; +using System.Collections.Generic; using Internal.TypeSystem; @@ -240,5 +241,59 @@ namespace TypeSystemTests Assert.Null(_testModule.GetTypeByCustomAttributeTypeName("TypeNameParsing.Simple+Nested+NonNamespaceQualifiedType", throwIfNotFound: false)); Assert.Null(_testModule.GetTypeByCustomAttributeTypeName("TypeNameParsing.Generic`1[TypeNameParsing.SimpleButNotThere]", throwIfNotFound: false)); } + + public IEnumerable<TypeDesc> GetTypesForRoundtripTest() + { + yield return _simpleType; + yield return _nestedType; + yield return _nestedTwiceType; + yield return _context.GetWellKnownType(WellKnownType.Int32); + yield return _veryGenericType; + yield return _simpleType.MakeArrayType(); + yield return _simpleType.MakeArrayType().MakeArrayType(); + yield return _simpleType.MakeArrayType(2).MakeArrayType(3); + yield return _context.GetWellKnownType(WellKnownType.Int32).MakeArrayType(); + yield return _structType.MakePointerType(); + yield return _context.GetWellKnownType(WellKnownType.Int32).MakePointerType().MakePointerType(); + yield return _genericType.MakeInstantiatedType(_simpleType); + yield return _veryGenericType.MakeInstantiatedType( + _simpleType, + _genericType.MakeInstantiatedType(_simpleType), + _structType + ); + yield return _genericType.MakeInstantiatedType(_context.GetWellKnownType(WellKnownType.Object)); + yield return _veryGenericType.MakeInstantiatedType( + _context.GetWellKnownType(WellKnownType.Object), + _simpleType, + _context.GetWellKnownType(WellKnownType.Int32) + ); + yield return ((MetadataType)_context.GetWellKnownType(WellKnownType.Nullable)).MakeInstantiatedType(_structType); + yield return _genericType.MakeInstantiatedType(_structType.MakePointerType().MakeArrayType()); + yield return _nestedGenericType.MakeInstantiatedType( + ((MetadataType)_context.GetWellKnownType(WellKnownType.Nullable)).MakeInstantiatedType(_context.GetWellKnownType(WellKnownType.Int32)), + _nestedType.MakeArrayType() + ); + } + + [Fact] + public void TestRoundtripping() + { + foreach (TypeDesc type in GetTypesForRoundtripTest()) + { + { + var fmt = new CustomAttributeTypeNameFormatter((IAssemblyDesc)_testModule); + string formatted = fmt.FormatName(type); + TypeDesc roundTripped = _testModule.GetTypeByCustomAttributeTypeName(formatted); + Assert.Equal(type, roundTripped); + } + + { + var fmt = new CustomAttributeTypeNameFormatter(); + string formatted = fmt.FormatName(type); + TypeDesc roundTripped = _testModule.GetTypeByCustomAttributeTypeName(formatted); + Assert.Equal(type, roundTripped); + } + } + } } } |