summaryrefslogtreecommitdiff
path: root/libjava/testsuite/libjava.verify/verify.exp
blob: 4abdc18acff3d9e72879c61c99185e4a268bf9c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Tests for class verifier.

global gcj_verify_xfail
set {gcj_verify_xfail(gij verify of call.fail.Static)} 1
set {gcj_verify_xfail(gij verify of simple.fail.dupfield)} 1
set {gcj_verify_xfail(gij verify of simple.fail.dupinterface)} 1
set {gcj_verify_xfail(gij verify of simple.fail.dupmethod)} 1
set {gcj_verify_xfail(gij verify of subr.fail.jsr10)} 1
set {gcj_verify_xfail(gij verify of subr.fail.jsr8)} 1


proc gcj_verify_list_tests {srcdir} {
  set result {}
  if {[file exists $srcdir]} {
    set here [pwd]
    cd $srcdir
    foreach item [lsort [glob -nocomplain */*/*.class]] {
      lappend result [file rootname $item]
    }
    cd $here
  }
  return $result
}

proc gcj_verify_test_gij {gij srcdir test shouldfail} {
  global gcj_verify_xfail

  set testname "gij verify of $test"
  verbose "invoking gij $test  - shouldfail=$shouldfail"
  set result [libjava_load $gij [list --cp $srcdir $test] ""]
  set status [lindex $result 0]
  set output [lindex $result 1]

  if {$shouldfail} {
    # We match the few exceptions that are allowed.  This may need
    # updating from time to time.  We do this rather than check the
    # exit status because we want to catch the case where gij dies in
    # some inappropriate way.
    if {[string match *VerifyError* $output]
	|| [string match *AbstractMethodError* $output]
	|| [string match *IncompatibleClassChangeError* $output]} {
      set cmd pass
    } else {
      set cmd fail
    }
    if {[info exists gcj_verify_xfail($testname)]} {
      setup_xfail *-*-*
    }
  } else {
    if {$status == "pass"} {
      set cmd pass
    } else {
      set cmd fail
    }
  }
  $cmd $testname
}

proc gcj_verify_run {} {
  global INTERPRETER srcdir

  set gij [libjava_find_gij] 
  set interpret 1
  # libjava_find_gij will return "" if it couldn't find the
  # program; in this case we want to skip the test.
  if {$INTERPRETER != "yes" || $gij == ""} {
    set interpret 0
  }

  set testsdir $srcdir/libjava.verify/verify
  foreach test [gcj_verify_list_tests $testsdir] {
    set shouldfail [string match */fail/* $test]

    if {$interpret} {
      regsub -all -- / $test . gijname
      gcj_verify_test_gij $gij $testsdir $gijname $shouldfail
    }

    # FIXME: run gcj --syntax-only here.
  }
}

gcj_verify_run