diff options
author | Jacob Bachmeyer <jcb62281+dev@gmail.com> | 2020-06-09 21:38:10 -0500 |
---|---|---|
committer | Jacob Bachmeyer <jcb62281+dev@gmail.com> | 2020-06-10 23:45:56 -0500 |
commit | 457888fc50922a6b505a315a1d92be15559a9024 (patch) | |
tree | 262beb4c34d9eafa442475d479146b8bd0beb3fe | |
parent | 648796241f9041c49c8965d562f3129c0bc880d2 (diff) | |
download | dejagnu-457888fc50922a6b505a315a1d92be15559a9024.zip dejagnu-457888fc50922a6b505a315a1d92be15559a9024.tar.gz dejagnu-457888fc50922a6b505a315a1d92be15559a9024.tar.bz2 |
Rewrite XML DTD
*ChangeLog:
* lib/framework.exp (insertdtd): Rewrite XML DTD.
(open_logs): Adjust XML output to conform to new DTD.
(record_test): Likewise.
(log_summary): Likewise.
(close_logs): Likewise.
(xml_log_start): Factor out from open_logs procedure.
* runtest.exp: Call new xml_log_start procedure.
-rw-r--r-- | lib/framework.exp | 168 | ||||
-rw-r--r-- | runtest.exp | 3 |
2 files changed, 127 insertions, 44 deletions
diff --git a/lib/framework.exp b/lib/framework.exp index d425d10..a267f51 100644 --- a/lib/framework.exp +++ b/lib/framework.exp @@ -33,34 +33,113 @@ proc mail_file { file to subject } { # Insert DTD for xml format checking. # proc insertdtd { } { - xml_output "<!DOCTYPE testsuite \[ -<!-- testsuite.dtd --> -<!ELEMENT testsuite (test | summary)+> -<!ELEMENT test (input, output, result, name, prms_id )> - <!ELEMENT input (#PCDATA)> - <!ELEMENT output (#PCDATA)> - <!ELEMENT result (#PCDATA)> - <!ELEMENT name (#PCDATA)> - <!ELEMENT prms_id (#PCDATA)> - <!ELEMENT summary (result, description, total)> - <!ELEMENT description (#PCDATA)> - <!ELEMENT total (#PCDATA)> + set BoardRole "build|host|target" + set TestResult \ + "PASS|FAIL|KPASS|KFAIL|XPASS|XFAIL|UNRESOLVED|UNSUPPORTED|UNTESTED" + xml_output "<!DOCTYPE dg:run \[ +<!-- runtest-log.dtd --> + <!ELEMENT dg:run (dg:platform, (dg:group)+)> + <!ATTLIST dg:run + xmlns:dg CDATA #FIXED\ + \"http://www.gnu.org/software/dejagnu/xmlns/runtest-log-1\" + dg:start CDATA #REQUIRED + dg:user CDATA #IMPLIED> + <!ELEMENT dg:platform (dg:board|dg:tool)+> + <!-- node involved in test run --> + <!ELEMENT dg:board (dg:role)*> + <!ATTLIST dg:board + dg:id ID #REQUIRED + dg:arch CDATA #REQUIRED + dg:name CDATA #REQUIRED> + <!ELEMENT dg:role EMPTY> + <!ATTLIST dg:role + dg:as ($BoardRole) #REQUIRED + dg:for IDREF #IMPLIED> + <!-- external tool used but not under test --> + <!ELEMENT dg:tool EMPTY> + <!ATTLIST dg:tool + dg:id ID #REQUIRED + dg:name CDATA #REQUIRED + dg:version CDATA #REQUIRED> + <!ELEMENT dg:group ((dg:group|dg:test)*, dg:summary?)> + <!ATTLIST dg:group + dg:name CDATA #REQUIRED> + <!ELEMENT dg:test (dg:name, dg:input?, dg:output?)> + <!ATTLIST dg:test + dg:result ($TestResult) #REQUIRED + dg:prms_id CDATA #IMPLIED + dg:bug_id CDATA #IMPLIED> + <!ELEMENT dg:name (#PCDATA)> + <!ATTLIST dg:name + xml:space (preserve) #FIXED 'preserve'> + <!ELEMENT dg:input (#PCDATA)> + <!ATTLIST dg:input + xml:space (preserve) #FIXED 'preserve'> + <!ELEMENT dg:output (#PCDATA)> + <!ATTLIST dg:output + xml:space (preserve) #FIXED 'preserve'> + <!-- summary per-group --> + <!ELEMENT dg:summary (dg:total)*> + <!ATTLIST dg:summary + dg:finish CDATA #REQUIRED> + <!ELEMENT dg:total EMPTY> + <!ATTLIST dg:total + dg:result ($TestResult) #REQUIRED + dg:count CDATA #REQUIRED> \]>" } +# Write the XML log header. +# +proc xml_log_start { } { + global build_triplet + global host_board + global host_triplet + global logname + global outdir + global target_triplet + global target_list + global tool + global xml + global xml_file + + set host_name "unix" + if { [info exists host_board] } { + set host_name $host_board + } + + xml_output "<dg:run\ + dg:start=\"[timestamp -format {%Y-%m-%d %H:%M:%S %Z}]\"\ + dg:user=\"$logname\">" + xml_output " <dg:platform>" + xml_output " <dg:board dg:id=\"host\"\ + dg:arch=\"$host_triplet\"\ + dg:name=\"$host_name\">" + xml_output " <dg:role dg:as=\"host\" /></dg:board>" + xml_output " <dg:board dg:id=\"build\"\ + dg:arch=\"$build_triplet\"\ + dg:name=\"unix\">" + xml_output " <dg:role dg:as=\"build\" /></dg:board>" + set i 0 + foreach target $target_list { + xml_output " <dg:board dg:id=\"target$i\"\ + dg:arch=\"$target_triplet\"\ + dg:name=\"$target\">" + incr i + } + xml_output " <dg:role dg:as=\"target\" /></dg:board>" + xml_output " </dg:platform>" + xml_output " <dg:group dg:name=\"$tool\">" +} + # Open the output logs. # proc open_logs { } { global outdir - global tool global sum_file - global xml_file - global xml - global build_triplet - global host_triplet - global target_triplet - global logname global tool + global xml + global xml_file if { $tool eq "" } { set tool testrun @@ -70,17 +149,8 @@ proc open_logs { } { if { $xml } { catch "file delete -force -- $outdir/$tool.xml" set xml_file [open [file join $outdir $tool.xml] w] - xml_output "<?xml version=\"1.1\"?>" + xml_output "<?xml version=\"1.0\"?>" insertdtd - xml_output "<testsuite>" - xml_output " <testrun>" - xml_output " <timestamp>[timestamp -format %c]</timestamp>" - xml_output " <host>$host_triplet </host>" - xml_output " <build>$build_triplet</build>" - xml_output " <target>$target_triplet</target>" - xml_output " <tool>$tool</tool>" - xml_output " <user>$logname</user>" - xml_output " </testrun>" } catch "file delete -force -- $outdir/$tool.log" log_file -a $outdir/$tool.log @@ -107,7 +177,8 @@ proc close_logs { } { } if { $xml } { - xml_output "</testsuite>" + xml_output " </dg:group>" + xml_output "</dg:run>" catch "close $xml_file" } @@ -441,16 +512,17 @@ proc log_summary { args } { clone_output "\n\t\t=== $tool Summary ===\n" } + if { $xml } { + xml_output " <dg:summary\ + dg:finish=\"[timestamp -format {%Y-%m-%d %H:%M:%S %Z}]\">" + } foreach x { PASS FAIL XPASS XFAIL KPASS KFAIL UNRESOLVED UNTESTED UNSUPPORTED } { set val $test_counts($x,$which) if { $val > 0 } { set mess "# of $test_counts($x,name)" if { $xml } { - xml_output " <summary>" - xml_output " [xml_tag result $x]" - xml_output " [xml_tag description $mess]" - xml_output " [xml_tag total $val]" - xml_output " </summary>" + xml_output " <dg:total dg:result=\"$x\"\ + dg:count=\"$val\" />" } if { [string length $mess] < 24 } { append mess "\t" @@ -458,6 +530,9 @@ proc log_summary { args } { clone_output "$mess\t$val" } } + if { $xml } { + xml_output " </dg:summary>" + } } # Setup a flag to control whether a failure is expected or not @@ -704,15 +779,20 @@ proc record_test { type message args } { #do nothing - leave as { "" "" } } - set output "" - set output "expect_out(buffer)" - xml_output " <test>" - xml_output " [xml_tag name $message]" - xml_output " [xml_tag output [string trimright [lindex $rio 1]]]" - xml_output " [xml_tag result $type]" - xml_output " [xml_tag prms_id $prms_id]" - xml_output " [xml_tag input [string trimright [lindex $rio 0]]]" - xml_output " </test>" + set prms_id_attr "" + if { $prms_id } { set prms_id_attr " dg:prms_id=\"$prms_id\"" } + + set istring [string trimright [lindex $rio 0]] + set ostring [string trimright [lindex $rio 1]] + xml_output " <dg:test dg:result=\"$type\"$prms_id_attr>" + xml_output " [xml_tag dg:name $message]" + if { [string length $istring] } { + xml_output " [xml_tag dg:input $istring]" + } + if { [string length $ostring] } { + xml_output " [xml_tag dg:output $ostring]" + } + xml_output " </dg:test>" } switch -- $type { diff --git a/runtest.exp b/runtest.exp index 6a53a56..a3919a2 100644 --- a/runtest.exp +++ b/runtest.exp @@ -1664,6 +1664,9 @@ set target_list [process_target_variants $target_list] set target_count [llength $target_list] +# Now we have the final target list for the XML log file. +if { $xml } { xml_log_start } + clone_output "Schedule of variations:" foreach current_target $target_list { clone_output " $current_target" |