| author | paulson | 
| Tue, 16 Oct 2007 16:18:36 +0200 | |
| changeset 25047 | f8712e98756a | 
| parent 24192 | 4eccd4bb8b64 | 
| child 25275 | 76d7f3fd4fb3 | 
| permissions | -rw-r--r-- | 
| 21637 | 1 | (* Title: Pure/ProofGeneral/pgip_tests.ML | 
| 2 | ID: $Id$ | |
| 3 | Author: David Aspinall | |
| 4 | ||
| 5 | A test suite for the PGIP abstraction code (in progress). | |
| 21940 | 6 | Run to provide some mild insurance against breakage in Isabelle here. | 
| 21637 | 7 | *) | 
| 8 | ||
| 9 | (** pgip_types.ML **) | |
| 10 | ||
| 11 | local | |
| 12 | fun asseq_p toS a b = | |
| 13 | if a=b then () | |
| 14 |     else error("PGIP test: expected these two values to be equal:\n" ^
 | |
| 15 | (toS a) ^"\n and: \n" ^ (toS b)) | |
| 16 | ||
| 17 | val asseqx = asseq_p XML.string_of_tree | |
| 18 | val asseqs = asseq_p I | |
| 19 | val asseqb = asseq_p (fn b=>if b then "true" else "false") | |
| 20 | ||
| 21 | val p = XML.tree_of_string (* parse *) | |
| 22 | ||
| 23 | open PgipTypes; | |
| 24 | in | |
| 25 | ||
| 26 | val _ = asseqx (pgiptype_to_xml Pgipnull) (p "<pgipnull/>"); | |
| 27 | val _ = asseqx (pgiptype_to_xml Pgipbool) (p "<pgipbool/>"); | |
| 28 | val _ = asseqx (pgiptype_to_xml (Pgipint (NONE,NONE))) (p "<pgipint/>"); | |
| 29 | val _ = asseqx (pgiptype_to_xml (Pgipint (SOME 5,SOME 7))) (p "<pgipint min='5' max='7'/>"); | |
| 30 | val _ = asseqx (pgiptype_to_xml (Pgipint (NONE,SOME 7))) (p "<pgipint max='7'/>"); | |
| 31 | val _ = asseqx (pgiptype_to_xml (Pgipint (SOME ~5,NONE))) (p "<pgipint min='-5'/>"); | |
| 32 | val _ = asseqx (pgiptype_to_xml Pgipstring) (p "<pgipstring/>"); | |
| 33 | val _ = asseqx (pgiptype_to_xml (Pgipconst "radio1")) (p "<pgipconst name='radio1'/>"); | |
| 34 | val _ = asseqx (pgiptype_to_xml (Pgipchoice [Pgipdtype (SOME "the best choice",Pgipbool)])) | |
| 35 | (p "<pgipchoice><pgipbool descr='the best choice'/></pgipchoice>"); | |
| 36 | ||
| 37 | val _ = asseqs (pgval_to_string (read_pgval Pgipbool "true")) "true"; | |
| 38 | val _ = asseqs (pgval_to_string (read_pgval Pgipbool "false")) "false"; | |
| 39 | val _ = asseqs (pgval_to_string (read_pgval (Pgipint(NONE,NONE)) "-37")) "-37"; | |
| 40 | val _ = asseqs (pgval_to_string (read_pgval Pgipnat "45")) "45"; | |
| 41 | val _ = asseqs (pgval_to_string (read_pgval Pgipstring "stringvalue")) "stringvalue"; | |
| 42 | ||
| 43 | local | |
| 44 | val choices = Pgipchoice [Pgipdtype (NONE,Pgipbool), Pgipdtype (NONE,Pgipnat), | |
| 45 | Pgipdtype (NONE,Pgipnull), Pgipdtype (NONE,Pgipconst "foo")] | |
| 46 | in | |
| 47 | val _ = asseqs (pgval_to_string (read_pgval choices "45")) "45"; | |
| 48 | val _ = asseqs (pgval_to_string (read_pgval choices "foo")) "foo"; | |
| 49 | val _ = asseqs (pgval_to_string (read_pgval choices "true")) "true"; | |
| 50 | val _ = asseqs (pgval_to_string (read_pgval choices "")) ""; | |
| 51 | val _ = (asseqs (pgval_to_string (read_pgval choices "-37")) "-37"; | |
| 52 | error "pgip_tests: should fail") handle PGIP _ => () | |
| 53 | end | |
| 54 | ||
| 55 | val _ = asseqx (haspref {name="provewithgusto",descr=SOME "use energetic proofs",
 | |
| 56 | default=SOME "true", pgiptype=Pgipbool}) | |
| 57 | (p "<haspref name='provewithgusto' descr='use energetic proofs' default='true'><pgipbool/></haspref>"); | |
| 58 | end | |
| 59 | ||
| 60 | ||
| 61 | (** pgip_input.ML **) | |
| 62 | local | |
| 63 | ||
| 64 | val p = XML.tree_of_string (* parse *) | |
| 65 | ||
| 66 | fun e str = case p str of | |
| 67 | (XML.Elem args) => args | |
| 68 | 	      | _ => error("Expected to get an XML Element")
 | |
| 69 | ||
| 70 | open PgipInput; | |
| 22164 | 71 | open PgipTypes; | 
| 22407 | 72 | open PgipIsabelle; | 
| 21637 | 73 | |
| 74 | fun asseqi a b = | |
| 21940 | 75 | if input (e a) = b then () | 
| 21637 | 76 |     else error("PGIP test: expected two inputs to be equal, for input:\n" ^ a)
 | 
| 77 | ||
| 78 | in | |
| 79 | ||
| 80 | val _ = asseqi "<askpgip/>" (SOME (Askpgip())); | |
| 81 | val _ = asseqi "<askpgml/>" (SOME (Askpgml())); | |
| 82 | val _ = asseqi "<askconfig/>" (SOME (Askconfig())); | |
| 23436 
343e84195e2c
Remove dedicated flag setting elements in favour of setproverflag.
 aspinall parents: 
22407diff
changeset | 83 | (* FIXME: new tests: | 
| 22083 | 84 | val _ = asseqi "<pgmlsymbolson/>" (SOME (Pgmlsymbolson())); | 
| 85 | val _ = asseqi "<pgmlsymbolsoff/>" (SOME (Pgmlsymbolsoff())); | |
| 86 | val _ = asseqi "<startquiet/>" (SOME (Startquiet())); | |
| 87 | val _ = asseqi "<stopquiet/>" (SOME (Stopquiet())); | |
| 23436 
343e84195e2c
Remove dedicated flag setting elements in favour of setproverflag.
 aspinall parents: 
22407diff
changeset | 88 | *) | 
| 22164 | 89 | val _ = asseqi "<askrefs thyname='foo' objtype='theory'/>" (SOME (Askrefs {url=NONE, thyname=SOME "foo",
 | 
| 90 | objtype=SOME ObjTheory,name=NONE})); | |
| 21637 | 91 | val _ = asseqi "<otherelt/>" NONE; | 
| 92 | ||
| 93 | end | |
| 94 | ||
| 21867 | 95 | (** pgip_markup.ML **) | 
| 96 | local | |
| 97 | open PgipMarkup | |
| 98 | in | |
| 99 | val _ = () | |
| 100 | end | |
| 101 | ||
| 102 | ||
| 21637 | 103 | (** pgip_output.ML **) | 
| 104 | local | |
| 105 | open PgipOutput | |
| 106 | in | |
| 107 | val _ = () | |
| 108 | end | |
| 109 | ||
| 21867 | 110 | |
| 111 | (** parsing.ML **) | |
| 112 | local | |
| 113 | open PgipMarkup | |
| 23798 | 114 | open OldPgipParser | 
| 22407 | 115 | open PgipIsabelle | 
| 116 | ||
| 21867 | 117 | fun asseqp a b = | 
| 21940 | 118 | if pgip_parser a = b then () | 
| 21867 | 119 |     else error("PGIP test: expected two parses to be equal, for input:\n" ^ a)
 | 
| 120 | ||
| 121 | in | |
| 122 | val _ = | |
| 123 | asseqp "theory A imports Bthy Cthy Dthy begin" | |
| 124 | [Opentheory | |
| 125 |          {text = "theory A imports Bthy Cthy Dthy begin",
 | |
| 24192 
4eccd4bb8b64
PGIP change: thyname is optional in opentheory, markup even in case of header parse failure
 aspinall parents: 
23798diff
changeset | 126 | thyname = SOME "A", | 
| 22407 | 127 | parentnames = ["Bthy", "Cthy", "Dthy"]}, | 
| 128 |      Openblock {metavarid=NONE,name=NONE,objtype=SOME ObjTheoryBody}];
 | |
| 21867 | 129 | |
| 130 | val _ = | |
| 131 | asseqp "end" | |
| 22407 | 132 |    [Closeblock {}, Closetheory {text = "end"}];
 | 
| 21867 | 133 | |
| 134 | end |