Author: kumpera
Date: 2007-12-07 17:03:22 -0500 (Fri, 07 Dec 2007)
New Revision: 90965

Added:
   trunk/mono/mono/tests/verifier/make_cast_test.sh
Modified:
   trunk/mono/mono/tests/verifier/ChangeLog
   trunk/mono/mono/tests/verifier/make_tests.sh
Log:
        * make_test.sh: added tests for castclass and isinst
        * make_cast_test.sh: new test generator

2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>



Modified: trunk/mono/mono/tests/verifier/ChangeLog
===================================================================
--- trunk/mono/mono/tests/verifier/ChangeLog    2007-12-07 21:57:19 UTC (rev 
90964)
+++ trunk/mono/mono/tests/verifier/ChangeLog    2007-12-07 22:03:22 UTC (rev 
90965)
@@ -1,5 +1,10 @@
 2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
 
+       * make_test.sh: added tests for castclass and isinst
+       * make_cast_test.sh: new test generator
+
+2007-12-07 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
        * make_test.sh: added tests for stelem.X
        * make_stelem_test.sh: new test generator
 

Added: trunk/mono/mono/tests/verifier/make_cast_test.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_cast_test.sh    2007-12-07 21:57:19 UTC 
(rev 90964)
+++ trunk/mono/mono/tests/verifier/make_cast_test.sh    2007-12-07 22:03:22 UTC 
(rev 90965)
@@ -0,0 +1,83 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_LOCAL=$3
+TEST_LOAD=$4
+TEST_OP=$5
+
+
+
+TEST_NAME=${TEST_VALIDITY}_${TEST_NAME}
+TEST_FILE=${TEST_NAME}_generated.il
+echo $TEST_FILE
+sed -e "s/VALIDITY/${TEST_VALIDITY}/g" -e "s/LOCAL/${TEST_LOCAL}/g" -e 
"s/LOAD/${TEST_LOAD}/g" -e "s/OP/${TEST_OP}/g" > $TEST_FILE <<//EOF
+
+// VALIDITY CIL which breaks the ECMA-335 rules. 
+// this CIL should fail verification by a conforming CLI verifier.
+
+.assembly '${TEST_NAME}_generated'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+
+.class ClassA extends [mscorlib]System.Object
+{
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+        .maxstack 8
+        ldarg.0 
+        call instance void object::.ctor()
+        ret 
+    }
+}
+
+.class ClassSubA extends ClassA
+{
+    .method public hidebysig  specialname  rtspecialname 
+           instance default void .ctor ()  cil managed 
+    {
+        .maxstack 8
+        ldarg.0 
+        call instance void ClassA::.ctor()
+        ret 
+    }
+}
+
+.class public auto ansi sealed MyStruct
+       extends [mscorlib]System.ValueType
+{
+       .field public int32 foo
+}
+
+.method public static void foo() cil managed
+{
+       .maxstack 8
+       .locals init (LOCAL l_0 )
+       LOAD
+       OP // VALIDITY.
+       pop
+       ret
+}
+
+.method public static int32 Main() cil managed
+{
+       .maxstack 8
+       .entrypoint
+       .try {
+               call void foo ()
+               leave END
+       } catch [mscorlib]System.InvalidCastException {
+               pop 
+               leave END
+       } catch [mscorlib]System.NullReferenceException {
+               pop 
+               leave END
+
+        }
+END:   ldc.i4.0
+       ret
+}
+//EOF


Property changes on: trunk/mono/mono/tests/verifier/make_cast_test.sh
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/mono/mono/tests/verifier/make_tests.sh
===================================================================
--- trunk/mono/mono/tests/verifier/make_tests.sh        2007-12-07 21:57:19 UTC 
(rev 90964)
+++ trunk/mono/mono/tests/verifier/make_tests.sh        2007-12-07 22:03:22 UTC 
(rev 90965)
@@ -3083,9 +3083,55 @@
 
 
 
+#cast class and isins tests
 
+#empty stack
+./make_cast_test.sh cast_empty_stack invalid "int32" "nop" "castclass object"
+./make_cast_test.sh isinst_empty_stack invalid "int32"  "nop" "isinst object"
 
+#type
+I=1
+for OBJ in int32 int64 float32 float64 "int32\&" "valuetype MyStruct" "int32*" 
"typedref" "method int32 *(int32)"
+do
+       ./make_cast_test.sh cast_object_${I} unverifiable "$OBJ" "ldloc.0" 
"castclass object"
+       ./make_cast_test.sh isinst_object_${I} unverifiable "$OBJ" "ldloc.0" 
"isinst object"
+       I=`expr $I + 1`
+done
 
+for OBJ in "int32[]" "string"
+do
+       ./make_cast_test.sh cast_object_${I} valid "$OBJ" "ldloc.0" "castclass 
object"
+       ./make_cast_test.sh isinst_object_${I} valid "$OBJ" "ldloc.0" "isinst 
object"
+       I=`expr $I + 1`
+done
+#token
 
+I=1
+for TOKEN in int32 int64 float32 float64 "valuetype MyStruct" "int32*" 
"typedref" "int32[]" "string" "method int32 *(int32)"
+do
+       ./make_cast_test.sh cast_token_${I} valid "object" "ldloc.0" "castclass 
$TOKEN"
+       ./make_cast_test.sh isinst_token_${I} valid "object" "ldloc.0" "isinst 
$TOKEN"
+       I=`expr $I + 1`
+done
 
+for TOKEN in "int32\&"
+do
+       ./make_cast_test.sh cast_token_${I} invalid "object" "ldloc.0" 
"castclass $TOKEN"
+       ./make_cast_test.sh isinst_token_${I} invalid "object" "ldloc.0" 
"isinst $TOKEN"
+       I=`expr $I + 1`
+done
 
+#object
+
+I=1
+for LOAD in "ldloc.0" "ldnull" 
+do
+       ./make_cast_test.sh cast_good_obj_${I} valid "object" "$LOAD" 
"castclass object"
+       ./make_cast_test.sh isinst_good_obj_${I} valid "object" "$LOAD" "isinst 
object"
+       I=`expr $I + 1`
+done
+
+
+
+
+

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to