summaryrefslogtreecommitdiff
path: root/tests/src/baseservices/exceptions/generics/typeparameter004.cs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/src/baseservices/exceptions/generics/typeparameter004.cs')
-rw-r--r--tests/src/baseservices/exceptions/generics/typeparameter004.cs101
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>