diff options
Diffstat (limited to 'tests/src/baseservices/exceptions/generics/typeparameter004.cs')
-rw-r--r-- | tests/src/baseservices/exceptions/generics/typeparameter004.cs | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/src/baseservices/exceptions/generics/typeparameter004.cs b/tests/src/baseservices/exceptions/generics/typeparameter004.cs new file mode 100644 index 0000000000..6e214b1c4a --- /dev/null +++ b/tests/src/baseservices/exceptions/generics/typeparameter004.cs @@ -0,0 +1,101 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. +// <Area> Generics - Expressions - specific catch clauses </Area> +// <Title> +// catch type parameters bound by Exception or a subclass of it in the form catch(T) +// </Title> +// <RelatedBugs> </RelatedBugs> + +//<Expects Status=success></Expects> + +// <Code> + +using System; + +public struct ValX0 {} +public struct ValY0 {} +public struct ValX1<T> {} +public struct ValY1<T> {} +public struct ValX2<T,U> {} +public struct ValY2<T,U>{} +public struct ValX3<T,U,V>{} +public struct ValY3<T,U,V>{} +public class RefX0 {} +public class RefY0 {} +public class RefX1<T> {} +public class RefY1<T> {} +public class RefX2<T,U> {} +public class RefY2<T,U>{} +public class RefX3<T,U,V>{} +public class RefY3<T,U,V>{} + + +public class GenException<T> : Exception {} + +public struct Gen<Ex> where Ex : Exception +{ + public void ExceptionTest(Ex e) + { + try + { + throw e; + } + catch(Ex E) + { + Test.Eval(Object.ReferenceEquals(e,E)); + } + catch + { + Console.WriteLine("Caught Wrong Exception"); + Test.Eval(false); + } + } +} + +public class Test +{ + public static int counter = 0; + public static bool result = true; + public static void Eval(bool exp) + { + counter++; + if (!exp) + { + result = exp; + Console.WriteLine("Test Failed at location: " + counter); + } + + } + + public static int Main() + { + new Gen<Exception>().ExceptionTest(new Exception()); + new Gen<Exception>().ExceptionTest(new InvalidOperationException()); + new Gen<Exception>().ExceptionTest(new GenException<int>()); + new Gen<Exception>().ExceptionTest(new GenException<string>()); + new Gen<Exception>().ExceptionTest(new GenException<Guid>()); + new Gen<Exception>().ExceptionTest(new GenException<ValX3<ValX1<int[][,,,]>,ValX2<object[,,,][][],Guid[][][]>,ValX3<double[,,,,,,,,,,],Guid[][][][,,,,][,,,,][][][],string[][][][][][][][][][][]>>>()); + + new Gen<InvalidOperationException>().ExceptionTest(new InvalidOperationException()); + + new Gen<GenException<int>>().ExceptionTest(new GenException<int>()); + new Gen<GenException<string>>().ExceptionTest(new GenException<string>()); + new Gen<GenException<Guid>>().ExceptionTest(new GenException<Guid>()); + new Gen<GenException<ValX3<ValX1<int[][,,,]>,ValX2<object[,,,][][],Guid[][][]>,ValX3<double[,,,,,,,,,,],Guid[][][][,,,,][,,,,][][][],string[][][][][][][][][][][]>>>>().ExceptionTest(new GenException<ValX3<ValX1<int[][,,,]>,ValX2<object[,,,][][],Guid[][][]>,ValX3<double[,,,,,,,,,,],Guid[][][][,,,,][,,,,][][][],string[][][][][][][][][][][]>>>()); + + if (result) + { + Console.WriteLine("Test Passed"); + return 100; + } + else + { + Console.WriteLine("Test Failed"); + return 1; + } + } + +} + +// </Code> |