2009-04-14 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / tests / metadata-verifier / cli-tables-tests.md
1 tables-header {
2         assembly simple-assembly.exe
3
4         #table schema major version
5         valid offset cli-metadata + read.uint ( stream-header ( 0 ) ) + 4  set-byte 2
6         valid offset tables-header + 4  set-byte 2
7
8         #major/minor versions   
9         invalid offset tables-header + 4 set-byte 22
10         invalid offset tables-header + 5 set-byte 1
11
12         #table schema size
13         invalid offset stream-header ( 0 ) + 4 set-uint 23
14
15         #heap sizes
16         invalid offset tables-header + 6 set-byte 0x8
17         invalid offset tables-header + 6 set-byte 0x10
18         invalid offset tables-header + 6 set-byte 0xF
19
20         #present tables
21         #ECMA-335 defines 39 tables, the empty slows are the following:
22         # MS Extensions: 0x3 0x5 0x7 0x13 0x16
23         # Unused: 0x1E 0x1F 0x2D-0x3F
24         # We don't care about the MS extensions.
25
26         invalid offset tables-header + 8 set-bit 0x3
27         invalid offset tables-header + 8 set-bit 0x5
28         invalid offset tables-header + 8 set-bit 0x7
29         invalid offset tables-header + 8 set-bit 0x13
30         invalid offset tables-header + 8 set-bit 0x16
31
32         invalid offset tables-header + 8 set-bit 0x1E
33         invalid offset tables-header + 8 set-bit 0x1F
34
35         invalid offset tables-header + 8 set-bit 0x2D
36         invalid offset tables-header + 8 set-bit 0x2F
37         invalid offset tables-header + 8 set-bit 0x30
38         invalid offset tables-header + 8 set-bit 0x35
39         invalid offset tables-header + 8 set-bit 0x38
40         invalid offset tables-header + 8 set-bit 0x3F
41
42         #simple-assembly.exe feature 6 tables (modules, typeref, typedef, method, assembly and assemblyref)
43         #This means that there must be 24 + 6 *4 bytes to hold the schemata + rows -> 48 bytes
44
45         #table schema size
46         invalid offset stream-header ( 0 ) + 4 set-uint 24
47         invalid offset stream-header ( 0 ) + 4 set-uint 33
48         invalid offset stream-header ( 0 ) + 4 set-uint 39
49         invalid offset stream-header ( 0 ) + 4 set-uint 44
50         invalid offset stream-header ( 0 ) + 4 set-uint 47
51
52         #total size of the tables
53         invalid offset stream-header ( 0 ) + 4 set-uint 60
54         invalid offset stream-header ( 0 ) + 4 set-uint 93
55 }
56
57 module-table {
58         assembly simple-assembly.exe
59
60         #generation
61         valid offset table-row ( 0 0 ) set-ushort 0
62         invalid offset table-row ( 0 0 ) set-ushort 9999
63
64         #rows
65         valid offset tables-header + 24 set-uint 1
66         invalid offset tables-header + 24 set-uint 0
67         invalid offset tables-header + 24 set-uint 2 , offset tables-header + 32 set-uint 1
68         
69         #name
70         #invalid string
71         invalid offset table-row ( 0 0 ) + 2 set-ushort 0x8888
72         #point to an empty string
73         invalid offset table-row ( 0 0 ) + 2 set-ushort 0
74
75         #mvid
76         invalid offset table-row ( 0 0 ) + 4 set-ushort 0x8888
77
78         #encId
79         invalid offset table-row ( 0 0 ) + 6 set-ushort 0x8888
80
81         #encBaseId
82         invalid offset table-row ( 0 0 ) + 8 set-ushort 0x8888
83 }
84
85
86 typeref-table {
87         assembly simple-assembly.exe
88
89         #Resolution Scope
90
91         #all table indexes are valid
92         #Invalid module
93         invalid offset table-row ( 1 0 ) set-ushort 0x8000
94
95         #Invalid moduleref
96         invalid offset table-row ( 1 0 ) set-ushort 0x8001
97
98         #Invalid assemblyref
99         invalid offset table-row ( 1 0 ) set-ushort 0x8002
100
101         #Invalid typeref
102         invalid offset table-row ( 1 0 ) set-ushort 0x8003
103
104         #Empty TypeName
105         invalid offset table-row ( 1 0 ) + 2 set-ushort 0
106
107         #Invalid TypeName
108         invalid offset table-row ( 1 0 ) + 2 set-ushort 0x8080
109
110         #Empty TypeNamespace
111         invalid offset table-row ( 1 0 ) + 4 set-ushort 0x8080
112 }
113
114 typedef-table {
115         assembly simple-assembly.exe
116
117         #rows
118         valid offset tables-header + 32 set-uint 2
119         invalid offset tables-header + 32 set-uint 0
120
121         #This part of the test suite only verifies structural properties, not type validation rules - like an interface that's not abstract.    
122
123         #Flags invalid bits: 9,11,14,15,19,21,24-31
124         invalid offset table-row ( 2 1 ) set-bit 9
125         invalid offset table-row ( 2 1 ) set-bit 11
126         invalid offset table-row ( 2 1 ) set-bit 14
127         invalid offset table-row ( 2 1 ) set-bit 15
128         invalid offset table-row ( 2 1 ) set-bit 19
129         invalid offset table-row ( 2 1 ) set-bit 21
130         invalid offset table-row ( 2 1 ) set-bit 24
131         invalid offset table-row ( 2 1 ) set-bit 25
132         invalid offset table-row ( 2 1 ) set-bit 26
133         invalid offset table-row ( 2 1 ) set-bit 27
134         invalid offset table-row ( 2 1 ) set-bit 28
135         invalid offset table-row ( 2 1 ) set-bit 29
136         invalid offset table-row ( 2 1 ) set-bit 30
137         invalid offset table-row ( 2 1 ) set-bit 31
138
139 }
140