* make_test.sh: added tests for castclass and isinst
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 7 Dec 2007 22:03:22 +0000 (22:03 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 7 Dec 2007 22:03:22 +0000 (22:03 -0000)
* make_cast_test.sh: new test generator

2007-12-07 Rodrigo Kumpera <rkumpera@novell.com>

svn path=/trunk/mono/; revision=90965

mono/tests/verifier/ChangeLog
mono/tests/verifier/make_cast_test.sh [new file with mode: 0755]
mono/tests/verifier/make_tests.sh

index 379b1ccae4ee377cb434a2f5095260c2d20c9381..97d962043d6caeb51cc47e51171c62ecf9ac0096 100644 (file)
@@ -1,3 +1,8 @@
+2007-12-07 Rodrigo Kumpera <rkumpera@novell.com>
+
+       * make_test.sh: added tests for castclass and isinst
+       * make_cast_test.sh: new test generator
+
 2007-12-07 Rodrigo Kumpera <rkumpera@novell.com>
 
        * make_test.sh: added tests for stelem.X
diff --git a/mono/tests/verifier/make_cast_test.sh b/mono/tests/verifier/make_cast_test.sh
new file mode 100755 (executable)
index 0000000..fd5a9e3
--- /dev/null
@@ -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
index 33469f89c75cc90c2dc45dab347ff24bfa52b80c..e321ff10ba3174eed461a823dfa0ca83c415773e 100755 (executable)
@@ -3083,7 +3083,53 @@ done
 
 
 
+#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