2008-06-06 Rodrigo Kumpera <rkumpera@novell.com>
authorRodrigo Kumpera <kumpera@gmail.com>
Fri, 6 Jun 2008 13:46:35 +0000 (13:46 -0000)
committerRodrigo Kumpera <kumpera@gmail.com>
Fri, 6 Jun 2008 13:46:35 +0000 (13:46 -0000)
* make_ctor_test.sh: New test generator for
constructor related tests.

* make_tests.sh: Added tests using using
the new generator.

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

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

index fa6ee6421e1f5c3d1fb58d34a93d4b6a571e46a4..df868390f619bfbdc9bf4b931dacbfe732ce7bab 100644 (file)
@@ -1,3 +1,11 @@
+2008-06-06 Rodrigo Kumpera <rkumpera@novell.com>
+
+       * make_ctor_test.sh: New test generator for 
+       constructor related tests.
+
+       * make_tests.sh: Added tests using using
+       the new generator.
+
 2008-05-23 Rodrigo Kumpera <rkumpera@novell.com>
 
        * valid_contravariant_delegate_1.il
diff --git a/mono/tests/verifier/make_ctor_test.sh b/mono/tests/verifier/make_ctor_test.sh
new file mode 100755 (executable)
index 0000000..93fc77e
--- /dev/null
@@ -0,0 +1,126 @@
+#! /bin/sh
+
+TEST_NAME=$1
+TEST_VALIDITY=$2
+TEST_CODE=$3
+TEST_TARGET_TYPE=$4
+
+TARGET_TYPE="Test"
+TEST_OTHER_CODE="call instance void TestClass::'.ctor'()"
+
+if [ "$TEST_TARGET_TYPE" == "other" ]; then
+       TARGET_TYPE="TestSubClass"
+       TEST_OTHER_CODE=$TEST_CODE
+       TEST_CODE=""
+fi
+
+TEST_FILE=`echo ${TEST_VALIDITY}_${TEST_NAME} | sed -e 's/ /_/g' -e 's/\./_/g' -e 's/&/mp/g' -e 's/\[/_/g' -e 's/\]/_/g'`_generated.il
+echo $TEST_FILE
+sed -e "s/CODE/${TEST_CODE}/g" -e "s/OTHER/${TEST_OTHER_CODE}/g" -e "s/VALIDITY/${TEST_VALIDITY}/g" > $TEST_FILE <<//EOF
+
+.assembly extern mscorlib
+{
+  .ver 2:0:0:0
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
+}
+.assembly 'delegate_test'
+{
+  .hash algorithm 0x00008004
+  .ver  0:0:0:0
+}
+.module delegate_test.exe
+.class ansi beforefieldinit TestClass 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 
+       }
+
+       .method public hidebysig specialname  rtspecialname instance default void .ctor (object V_1)  cil managed 
+       {
+               .maxstack 8
+               ldarg.0
+               call instance void object::'.ctor'()
+               ret 
+       }
+}
+
+.module delegate_test.exe
+.class ansi beforefieldinit TestSubClass extends TestClass
+{
+       .method public hidebysig specialname  rtspecialname instance default void .ctor ()  cil managed 
+       {
+               .maxstack 8
+               ldarg.0
+               OTHER
+               
+               leave END
+END:
+               ret 
+       }
+}
+
+
+
+
+.class ansi beforefieldinit Test extends [mscorlib]System.Object
+{
+       .field int32 val
+       .field object obj
+
+       .method public hidebysig  specialname  rtspecialname instance default void .ctor ()  cil managed 
+       {
+               .maxstack 8
+               .locals init (Test V_0)
+               ldarg.0
+               CODE
+               
+               leave END
+END:
+               ret 
+       }
+
+       .method public hidebysig static default void StaticMethod (object A_0)  cil managed 
+       {
+               .maxstack 8
+               ret 
+       }
+
+
+       .method public hidebysig instance default void InstanceMethod ()  cil managed 
+       {
+               .maxstack 8
+               ret 
+       }
+
+}
+
+
+.class public auto ansi beforefieldinit Driver
+        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 
+       }
+
+       .method public static int32 Main ()
+       {
+               .entrypoint
+               .maxstack 2
+               .locals init ()
+               newobj instance void ${TARGET_TYPE}::.ctor()
+               pop
+               ldc.i4.0
+               ret 
+
+       }
+}
+//EOF
index 65aa8676ea6779eabb31420be7a610882cf21efa..78462ad0e062c2c423ed459af282dbd2ff1fe61a 100755 (executable)
@@ -5057,3 +5057,38 @@ done
 ./make_type_visibility_test.sh type_vis_gmethod_2 unverifiable "call void SimpleClass::Generic<[test_lib]NotExportedA>()"
 
 
+#Constructor tests
+
+./make_ctor_test.sh ctor_good_ops_1 valid "call instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_good_ops_2 valid "nop\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_good_ops_3 valid "dup\n\tldc.i4.0\n\tstfld int32 Test::val\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_good_ops_4 valid "dup\n\tldfld int32 Test::val\n\tpop\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_good_ops_5 valid "dup\n\tpop\n\tcall instance void object::'.ctor'()"
+
+./make_ctor_test.sh ctor_call_super_2x valid "call instance void object::'.ctor'()\n\tldarg.0\n\tcall instance void object::'.ctor'()"
+
+./make_ctor_test.sh ctor_pass_this_as_arg_1 unverifiable "ldarg.0\n\tcall instance void TestClass::'.ctor'(object)" "other"
+./make_ctor_test.sh ctor_pass_this_as_arg_2 unverifiable "dup\n\tcall instance void TestClass::'.ctor'(object)" "other"
+
+
+./make_ctor_test.sh ctor_no_super_call unverifiable "nop"
+./make_ctor_test.sh ctor_call_invalid_super unverifiable "call instance void TestClass::'.ctor'()"
+./make_call_test.sh ctor_call_outside_ctor unverifiable "call instance void ClassA::.ctor()" "newobj instance void ClassA::.ctor()"
+
+./make_ctor_test.sh ctor_use_non_this_ptr unverifiable "ldloc.0\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_store_this_on_field unverifiable "dup\n\tdup\n\tstfld object Test::obj\n\tcall instance void object::'.ctor'()"
+
+
+./make_ctor_test.sh ctor_use_uninit_this_1 unverifiable "dup\n\tcall void Test::StaticMethod(object)\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_use_uninit_this_2 unverifiable "dup\n\tcall instance void Test::InstanceMethod()\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_use_uninit_this_3 unverifiable "dup\n\tcastclass [mscorlib]System.String\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_use_uninit_this_4 unverifiable "dup\n\tunbox.any Test\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_use_uninit_this_5 unverifiable "dup\n\tcall instance void object::'.ctor'()\n\tcall instance void Test::InstanceMethod()"
+
+./make_ctor_test.sh ctor_bad_ops_1 unverifiable "dup\n\tstloc.0\n\tcall instance void object::'.ctor'()"
+./make_ctor_test.sh ctor_bad_ops_2 unverifiable "dup\n\tcall instance void object::'.ctor'()\n\tcall instance void Test::InstanceMethod()"
+
+#TODO try / catch inside constructor
+
+
+