| 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;
 | 
| 21637 |     72 | 
 | 
|  |     73 | fun asseqi a b =
 | 
| 21940 |     74 |     if input (e a) = b then ()
 | 
| 21637 |     75 |     else error("PGIP test: expected two inputs to be equal, for input:\n" ^ a)
 | 
|  |     76 | 
 | 
|  |     77 | in
 | 
|  |     78 | 
 | 
|  |     79 | val _ = asseqi "<askpgip/>" (SOME (Askpgip()));
 | 
|  |     80 | val _ = asseqi "<askpgml/>" (SOME (Askpgml()));
 | 
|  |     81 | val _ = asseqi "<askconfig/>" (SOME (Askconfig()));
 | 
| 22083 |     82 | val _ = asseqi "<pgmlsymbolson/>" (SOME (Pgmlsymbolson()));
 | 
|  |     83 | val _ = asseqi "<pgmlsymbolsoff/>" (SOME (Pgmlsymbolsoff()));
 | 
|  |     84 | val _ = asseqi "<startquiet/>" (SOME (Startquiet()));
 | 
|  |     85 | val _ = asseqi "<stopquiet/>" (SOME (Stopquiet()));
 | 
| 22164 |     86 | val _ = asseqi "<askrefs thyname='foo' objtype='theory'/>" (SOME (Askrefs {url=NONE, thyname=SOME "foo",
 | 
|  |     87 | 									  objtype=SOME ObjTheory,name=NONE}));
 | 
| 21637 |     88 | val _ = asseqi "<otherelt/>" NONE;
 | 
|  |     89 | 
 | 
|  |     90 | end
 | 
|  |     91 | 
 | 
| 21867 |     92 | (** pgip_markup.ML **)
 | 
|  |     93 | local
 | 
|  |     94 | open PgipMarkup
 | 
|  |     95 | in
 | 
|  |     96 | val _ = ()
 | 
|  |     97 | end
 | 
|  |     98 | 
 | 
|  |     99 | 
 | 
| 21637 |    100 | (** pgip_output.ML **)
 | 
|  |    101 | local
 | 
|  |    102 | open PgipOutput
 | 
|  |    103 | in
 | 
|  |    104 | val _ = ()
 | 
|  |    105 | end
 | 
|  |    106 | 
 | 
| 21867 |    107 | 
 | 
|  |    108 | (** parsing.ML **)
 | 
|  |    109 | local
 | 
|  |    110 | open PgipMarkup
 | 
|  |    111 | open PgipParser
 | 
|  |    112 | fun asseqp a b =
 | 
| 21940 |    113 |     if pgip_parser a = b then ()
 | 
| 21867 |    114 |     else error("PGIP test: expected two parses to be equal, for input:\n" ^ a)
 | 
|  |    115 | 
 | 
|  |    116 | in
 | 
|  |    117 | val _ = 
 | 
|  |    118 |     asseqp "theory A imports Bthy Cthy Dthy begin"
 | 
|  |    119 |     [Opentheory
 | 
|  |    120 |          {text = "theory A imports Bthy Cthy Dthy begin",
 | 
|  |    121 |           thyname = "A",
 | 
|  |    122 |           parentnames = ["Bthy", "Cthy", "Dthy"]}];
 | 
|  |    123 | 
 | 
|  |    124 | val _ = 
 | 
|  |    125 |     asseqp "end" 
 | 
|  |    126 |    [Closetheory {text = "end"}];
 | 
|  |    127 | 
 | 
|  |    128 | end
 |