Add test infrastructure and turtle test
.gitignore
| 10 | 10 | Makefile | |
| 11 | 11 | config.status | |
| 12 | 12 | pre-inst-env | |
| 13 | + | tests/*.scm |
Makefile.am
| 6 | 6 | turtle/parser.scm \ | |
| 7 | 7 | turtle/tordf.scm \ | |
| 8 | 8 | iri/iri.scm \ | |
| 9 | + | test-modules/testsuite.scm \ | |
| 10 | + | test-modules/online.scm \ | |
| 11 | + | test-modules/result.scm | |
| 9 | 12 | ||
| 10 | 13 | TEST_EXTENSIONS = .scm | |
| 11 | 14 | SCM_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh --color-tests yes --ignore-exit | |
| 12 | - | TESTS = | |
| 15 | + | TESTS = tests/turtle.scm | |
| 13 | 16 | EXTRA_DIST += $(TESTS) |
configure.ac
| 11 | 11 | GUILE_SITE_DIR | |
| 12 | 12 | ||
| 13 | 13 | AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env]) | |
| 14 | + | AC_CONFIG_FILES([tests/turtle.scm], [chmod +x tests/turtle.scm]) | |
| 14 | 15 | AC_CONFIG_FILES(Makefile) | |
| 15 | 16 | AC_REQUIRE_AUX_FILE([tap-driver.sh]) | |
| 16 | 17 | AC_PROG_AWK |
test-modules/online.scm unknown status 1
| 1 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
| 2 | + | ;;;; | |
| 3 | + | ;;;; This library is free software; you can redistribute it and/or | |
| 4 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
| 5 | + | ;;;; License as published by the Free Software Foundation; either | |
| 6 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
| 7 | + | ;;;; | |
| 8 | + | ;;;; This library is distributed in the hope that it will be useful, | |
| 9 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 10 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 11 | + | ;;;; Lesser General Public License for more details. | |
| 12 | + | ;;;; | |
| 13 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
| 14 | + | ;;;; License along with this library; if not, write to the Free Software | |
| 15 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 16 | + | ;;;; | |
| 17 | + | ||
| 18 | + | (define-module (test-modules online) | |
| 19 | + | #:use-module (ice-9 match) | |
| 20 | + | #:use-module (rnrs bytevectors) | |
| 21 | + | #:use-module (srfi srfi-1) | |
| 22 | + | #:use-module (test-modules result) | |
| 23 | + | #:use-module (rdf rdf) | |
| 24 | + | #:use-module (srfi srfi-1) | |
| 25 | + | #:use-module (turtle tordf) | |
| 26 | + | #:use-module (web client) | |
| 27 | + | #:use-module (web response) | |
| 28 | + | #:export (run-test-suite | |
| 29 | + | run-test-suites)) | |
| 30 | + | ||
| 31 | + | (define (get-objects triples predicate) | |
| 32 | + | (map | |
| 33 | + | rdf-triple-object | |
| 34 | + | (filter | |
| 35 | + | (lambda (t) | |
| 36 | + | (equal? (rdf-triple-predicate t) predicate)) | |
| 37 | + | triples))) | |
| 38 | + | ||
| 39 | + | (define (lexical->value value) | |
| 40 | + | (cond | |
| 41 | + | ((rdf-literal? value) | |
| 42 | + | (rdf-literal-lexical-form value)) | |
| 43 | + | ((blank-node? value) | |
| 44 | + | (string-append "_:" (number->string value))) | |
| 45 | + | (else value))) | |
| 46 | + | ||
| 47 | + | (define (execute-test test) | |
| 48 | + | (let* ((predicates (test-case-document test)) | |
| 49 | + | (type (car (get-objects predicates "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))) | |
| 50 | + | (type (substring type (string-length "http://www.w3.org/ns/rdftest#"))) | |
| 51 | + | (action (car (get-objects predicates "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#action")))) | |
| 52 | + | (turtle->rdf (get-test-doc action) action))) | |
| 53 | + | ||
| 54 | + | (define (run-test test) | |
| 55 | + | (let* ((predicates (test-case-document test)) | |
| 56 | + | (type (car (get-objects predicates "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"))) | |
| 57 | + | (type (substring type (string-length "http://www.w3.org/ns/rdftest#"))) | |
| 58 | + | (result | |
| 59 | + | (catch #t | |
| 60 | + | (lambda () | |
| 61 | + | (execute-test test)) | |
| 62 | + | (lambda (key . value) | |
| 63 | + | (cons key value))))) | |
| 64 | + | (cond | |
| 65 | + | ((member type '("TestTurtlePositiveSyntax" "TestTriGPositiveSyntax" | |
| 66 | + | "TestNTriplesPositiveSyntax" "TestNQuadsPositiveSyntax")) | |
| 67 | + | (match result | |
| 68 | + | (((? symbol? key) . value) | |
| 69 | + | (update-test-case test | |
| 70 | + | #:result 'fail | |
| 71 | + | #:reason (format #f "failed with ~a: ~a" key value))) | |
| 72 | + | (_ (update-test-case test #:result 'pass)))) | |
| 73 | + | ((member type '("TestTurtleNegativeSyntax" "TestTriGNegativeSyntax" | |
| 74 | + | "TestNTriplesNegativeSyntax" "TestNQuadsNegativeSyntax" | |
| 75 | + | "TestXMLNegativeSyntax")) | |
| 76 | + | (match result | |
| 77 | + | (((? symbol? key) . value) (update-test-case test #:result 'pass)) | |
| 78 | + | (_ (update-test-case test | |
| 79 | + | #:result 'fail | |
| 80 | + | #:reason "Expected failure but got success")))) | |
| 81 | + | (else | |
| 82 | + | (update-test-case test | |
| 83 | + | #:result 'skip | |
| 84 | + | #:reason (format #f "Unrecognized test type: ~a" type)))))) | |
| 85 | + | ||
| 86 | + | (define (run-tests tests expected-failures driver) | |
| 87 | + | "Run all the tests of the @var{tests} test suite, using identifiers starting | |
| 88 | + | from @var{id}. Return is undefined." | |
| 89 | + | (fold | |
| 90 | + | (lambda (test results) | |
| 91 | + | (let* ((result (run-test test)) | |
| 92 | + | (result | |
| 93 | + | (if (assoc-ref expected-failures (test-case-id test)) | |
| 94 | + | (update-test-case result | |
| 95 | + | #:result (cond | |
| 96 | + | ((equal? 'skip (test-case-result result)) | |
| 97 | + | 'skip) | |
| 98 | + | ((equal? 'fail (test-case-result result)) | |
| 99 | + | 'xfail) | |
| 100 | + | ((equal? 'pass (test-case-result result)) | |
| 101 | + | 'xpass)) | |
| 102 | + | #:reason (assoc-ref expected-failures (test-case-id test))) | |
| 103 | + | result))) | |
| 104 | + | ((test-driver-print driver) result) | |
| 105 | + | (cons result results))) | |
| 106 | + | '() | |
| 107 | + | tests)) | |
| 108 | + | ||
| 109 | + | (define (get-test-doc url) | |
| 110 | + | "Get a test suite object from the manifest at @var{url}." | |
| 111 | + | (call-with-values | |
| 112 | + | (lambda () | |
| 113 | + | (http-get url)) | |
| 114 | + | (lambda (hdr body) | |
| 115 | + | (if (equal? (response-code hdr) 200) | |
| 116 | + | (if (string? body) | |
| 117 | + | body | |
| 118 | + | (utf8->string body)) | |
| 119 | + | (throw 'error-fetching-test-manifest (response-code hdr)))))) | |
| 120 | + | ||
| 121 | + | (define* (get-test-plan url #:key (num 1)) | |
| 122 | + | (define document (get-test-doc url)) | |
| 123 | + | ||
| 124 | + | (define manifest (turtle->rdf document url)) | |
| 125 | + | ||
| 126 | + | (define tests | |
| 127 | + | (map | |
| 128 | + | rdf-triple-object | |
| 129 | + | (filter | |
| 130 | + | (lambda (triple) | |
| 131 | + | (and (equal? (rdf-triple-subject triple) url) | |
| 132 | + | (equal? (rdf-triple-predicate triple) | |
| 133 | + | (string-append "http://www.w3.org/2001/sw/DataAccess/" | |
| 134 | + | "tests/test-manifest#entries")))) | |
| 135 | + | manifest))) | |
| 136 | + | ||
| 137 | + | (cdr | |
| 138 | + | (fold | |
| 139 | + | (lambda (test result) | |
| 140 | + | (let* ((num (car result)) | |
| 141 | + | (result (cdr result)) | |
| 142 | + | (test-predicates (filter | |
| 143 | + | (lambda (t) | |
| 144 | + | (equal? (rdf-triple-subject t) test)) | |
| 145 | + | manifest)) | |
| 146 | + | (name (lexical->value (car (get-objects test-predicates "http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#name")))) | |
| 147 | + | (description (lexical->value (car (get-objects test-predicates "http://www.w3.org/2000/01/rdf-schema#comment"))))) | |
| 148 | + | (cons (+ 1 num) | |
| 149 | + | (cons (make-test-case test num name description | |
| 150 | + | (filter | |
| 151 | + | (lambda (t) | |
| 152 | + | (equal? (rdf-triple-subject t) test)) | |
| 153 | + | manifest) | |
| 154 | + | #f #f) | |
| 155 | + | result)))) | |
| 156 | + | `(,num . ()) | |
| 157 | + | tests))) | |
| 158 | + | ||
| 159 | + | (define (run-test-suite manifest expected-failures driver) | |
| 160 | + | "Run a test suite described by @var{manifest}." | |
| 161 | + | (let* ((plan (reverse (get-test-plan manifest)))) | |
| 162 | + | ((test-driver-init driver) plan) | |
| 163 | + | ((test-driver-finalize driver) (run-tests plan expected-failures driver)))) | |
| 164 | + | ||
| 165 | + | (define (run-test-suites manifests expected-failures driver) | |
| 166 | + | "Run multiple test suites described by @var{manifests}." | |
| 167 | + | (let* ((plan | |
| 168 | + | (fold | |
| 169 | + | (lambda (manifest plan) | |
| 170 | + | (append plan (reverse (get-test-plan | |
| 171 | + | manifest #:num (+ (length plan) 1))))) | |
| 172 | + | '() | |
| 173 | + | manifests))) | |
| 174 | + | ((test-driver-init driver) plan) | |
| 175 | + | ((test-driver-finalize driver) (run-tests plan expected-failures driver)))) |
test-modules/result.scm unknown status 1
| 1 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
| 2 | + | ;;;; | |
| 3 | + | ;;;; This library is free software; you can redistribute it and/or | |
| 4 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
| 5 | + | ;;;; License as published by the Free Software Foundation; either | |
| 6 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
| 7 | + | ;;;; | |
| 8 | + | ;;;; This library is distributed in the hope that it will be useful, | |
| 9 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 10 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 11 | + | ;;;; Lesser General Public License for more details. | |
| 12 | + | ;;;; | |
| 13 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
| 14 | + | ;;;; License along with this library; if not, write to the Free Software | |
| 15 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 16 | + | ;;;; | |
| 17 | + | ||
| 18 | + | (define-module (test-modules result) | |
| 19 | + | #:use-module (srfi srfi-9) | |
| 20 | + | #:use-module (srfi srfi-19) | |
| 21 | + | #:use-module (ice-9 match) | |
| 22 | + | #:export (make-test-case | |
| 23 | + | test-case? | |
| 24 | + | test-case-id | |
| 25 | + | test-case-num | |
| 26 | + | test-case-name | |
| 27 | + | test-case-document | |
| 28 | + | test-case-result | |
| 29 | + | test-case-reason | |
| 30 | + | update-test-case | |
| 31 | + | ||
| 32 | + | make-test-driver | |
| 33 | + | test-driver? | |
| 34 | + | test-driver-init | |
| 35 | + | test-driver-print | |
| 36 | + | test-driver-finalize | |
| 37 | + | ||
| 38 | + | tap-driver | |
| 39 | + | earl-driver)) | |
| 40 | + | ||
| 41 | + | ;; A test case is the result of running a test. It has an identifier, a name | |
| 42 | + | ;; and a description. Its result is a symbol, which can be 'skiped, 'pass, | |
| 43 | + | ;; 'fail, 'xpass, or 'xfail. The reason is a string or #f that explains the | |
| 44 | + | ;; result | |
| 45 | + | (define-record-type test-case | |
| 46 | + | (make-test-case id num name description document result reason) | |
| 47 | + | test-case? | |
| 48 | + | (id test-case-id) | |
| 49 | + | (num test-case-num) | |
| 50 | + | (name test-case-name) | |
| 51 | + | (description test-case-description) | |
| 52 | + | (document test-case-document) | |
| 53 | + | (result test-case-result) | |
| 54 | + | (reason test-case-reason)) | |
| 55 | + | ||
| 56 | + | (define* (update-test-case test-case #:key | |
| 57 | + | (id (test-case-id test-case)) | |
| 58 | + | (num (test-case-num test-case)) | |
| 59 | + | (name (test-case-name test-case)) | |
| 60 | + | (description (test-case-description test-case)) | |
| 61 | + | (document (test-case-document test-case)) | |
| 62 | + | (result (test-case-result test-case)) | |
| 63 | + | (reason (test-case-reason test-case))) | |
| 64 | + | (make-test-case id num name description document result reason)) | |
| 65 | + | ||
| 66 | + | ;; A test driver is called at the beginning, on each test result and at the | |
| 67 | + | ;; end of the tests. | |
| 68 | + | (define-record-type test-driver | |
| 69 | + | (make-test-driver init print finalize) | |
| 70 | + | test-driver? | |
| 71 | + | (init test-driver-init) ; list test-case -> () | |
| 72 | + | (print test-driver-print) ; test-case -> () | |
| 73 | + | (finalize test-driver-finalize)) ; list test-case -> () | |
| 74 | + | ||
| 75 | + | (define tap-driver | |
| 76 | + | (make-test-driver | |
| 77 | + | (lambda (cases) | |
| 78 | + | (format #t "1..~a~%" (length cases))) | |
| 79 | + | (match-lambda | |
| 80 | + | (($ test-case id num name description document result reason) | |
| 81 | + | (match result | |
| 82 | + | ('skip | |
| 83 | + | (format #t "ok ~a ~a # SKIP ~a~%" num name reason)) | |
| 84 | + | ('pass | |
| 85 | + | (format #t "ok ~a ~a~%" num name)) | |
| 86 | + | ('fail | |
| 87 | + | (format #t "not ok ~a ~a: ~a~%" num name reason)) | |
| 88 | + | ('xfail | |
| 89 | + | (format #t "not ok ~a ~a # TODO ~a~%" num name reason)) | |
| 90 | + | ('xpass | |
| 91 | + | (format #t "ok ~a ~a # TODO ~a~%" num name reason))) | |
| 92 | + | (force-output))) | |
| 93 | + | (const #t))) | |
| 94 | + | ||
| 95 | + | (define (earl-driver port) | |
| 96 | + | "A driver that creates a turtle file report using the earl vocabulary. It | |
| 97 | + | doesn't use any internal representation for RDF or Turtle, it only manipulates | |
| 98 | + | strings." | |
| 99 | + | (make-test-driver | |
| 100 | + | (lambda (cases) | |
| 101 | + | (format port "@prefix dc: <http://purl.org/dc/terms/> .~%") | |
| 102 | + | (format port "@prefix earl: <http://www.w3.org/ns/earl#> .~%") | |
| 103 | + | (format port "@prefix doap: <http://usefulinc.com/ns/doap#> .~%") | |
| 104 | + | (format port "@prefix foaf: <http://xmlns.com/foaf/0.1/> .~%") | |
| 105 | + | (format port "@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .~%") | |
| 106 | + | (format port "~%") | |
| 107 | + | (format port "<https://framagit.org/tyreunom/guile-jsonld> a doap:Project;~%") | |
| 108 | + | (format port " dc:creator <https://lepiller.eu/#me>;~%") | |
| 109 | + | (format port " doap:bug-database <https://framait.org/tyreunom/guile-jsonld/issues>;~%") | |
| 110 | + | (format port " doap:description \"Guile implementation of the JsonLD API defined by the W3C.\"@en;~%") | |
| 111 | + | (format port " doap:developer <https://lepiller.eu/#me>;~%") | |
| 112 | + | (format port " doap:homepage <https://framagit.org/tyreunom/guile-jsonld/>;~%") | |
| 113 | + | (format port " doap:implements <https://www.w3.org/TR/json-ld11/>,~%") | |
| 114 | + | (format port " <https://www.w3.org/TR/json-ld11-api/>;~%") | |
| 115 | + | (format port " doap:license <https://www.gnu.org/licenses/gpl-3.0.html>;~%") | |
| 116 | + | (format port " doap:name \"guile-jsonld\"^^xsd:string;~%") | |
| 117 | + | (format port " doap:platform \"GNU Guile\"^^xsd:string;~%") | |
| 118 | + | (format port " doap:shortdesc \"JSON-LD support for GNU Guile.\"@en;~%") | |
| 119 | + | (format port " doap:release [~%") | |
| 120 | + | (format port " doap:name \"guile-jsonld-1.0-pre1\";~%") | |
| 121 | + | (format port " doap:revision \"1.0-pre1\";~%") | |
| 122 | + | (format port " doap:created \"2020-03-29\"^^xsd:date;~%") | |
| 123 | + | (format port " ] .~%") | |
| 124 | + | (format port "~%") | |
| 125 | + | (format port "<https://lepiller.eu/#me> a earl:Assertor, foaf:Person;~%") | |
| 126 | + | (format port " foaf:homepage <https://lepiller.eu>;~%") | |
| 127 | + | (format port " foaf:mbox <mailto:julien@lepiller.eu>;~%") | |
| 128 | + | (format port " foaf:name \"Julien Lepiller\"^^xsd:string .~%") | |
| 129 | + | (format port "~%") | |
| 130 | + | (format port "<> foaf:primaryTopic <https://framagit.org/tyreunom/guile-jsonld>;~%") | |
| 131 | + | (format port " dc:issued \"~a\"^^xsd:dateTime;~%" | |
| 132 | + | (date->string (current-date) "~4")) | |
| 133 | + | (format port " foaf:maker <https://lepiller.eu/#me> .~%") | |
| 134 | + | (format port "~%") | |
| 135 | + | (format #t "~a test cases for report~%" (length cases))) | |
| 136 | + | (lambda (test-case) | |
| 137 | + | (format port "[ a earl:Assertion;~%") | |
| 138 | + | (format port " earl:assertedBy <https://lepiller.eu/#me>;~%") | |
| 139 | + | (format port " earl:subject <https://framagit.org/tyreunom/guile-jsonld>;~%") | |
| 140 | + | (format port " earl:test <~a>;~%" (test-case-id test-case)) | |
| 141 | + | (format port " earl:result [~%") | |
| 142 | + | (format port " a earl:TestResult;~%") | |
| 143 | + | (format port " earl:outcome earl:~a;~%" | |
| 144 | + | (match (test-case-result test-case) | |
| 145 | + | ('skip "inapplicable") | |
| 146 | + | ('pass "passed") | |
| 147 | + | ('fail "failed") | |
| 148 | + | ('xpass "cantTell") | |
| 149 | + | ('xfail "untested"))) | |
| 150 | + | (format port " dc:date \"~a\"^^xsd:dateTime~%" | |
| 151 | + | (date->string (current-date) "~4")) | |
| 152 | + | (format port " earl:mode earl:automatic ] .~%") | |
| 153 | + | (format port "~%") | |
| 154 | + | (format #t "Tested ~a: ~a~%" | |
| 155 | + | (test-case-num test-case) (test-case-result test-case))) | |
| 156 | + | (lambda _ | |
| 157 | + | (close-port port)))) |
test-modules/testsuite.scm unknown status 1
| 1 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
| 2 | + | ;;;; | |
| 3 | + | ;;;; This library is free software; you can redistribute it and/or | |
| 4 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
| 5 | + | ;;;; License as published by the Free Software Foundation; either | |
| 6 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
| 7 | + | ;;;; | |
| 8 | + | ;;;; This library is distributed in the hope that it will be useful, | |
| 9 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 10 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 11 | + | ;;;; Lesser General Public License for more details. | |
| 12 | + | ;;;; | |
| 13 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
| 14 | + | ;;;; License along with this library; if not, write to the Free Software | |
| 15 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 16 | + | ;;;; | |
| 17 | + | ||
| 18 | + | (define-module (test-modules testsuite) | |
| 19 | + | #:export (expected-failures)) | |
| 20 | + | ||
| 21 | + | (define expected-failures | |
| 22 | + | '()) |
tests/turtle.scm.in unknown status 1
| 1 | + | #!@abs_top_srcdir@/pre-inst-env guile | |
| 2 | + | !# | |
| 3 | + | ;;;; Copyright (C) 2020 Julien Lepiller <julien@lepiller.eu> | |
| 4 | + | ;;;; | |
| 5 | + | ;;;; This library is free software; you can redistribute it and/or | |
| 6 | + | ;;;; modify it under the terms of the GNU Lesser General Public | |
| 7 | + | ;;;; License as published by the Free Software Foundation; either | |
| 8 | + | ;;;; version 3 of the License, or (at your option) any later version. | |
| 9 | + | ;;;; | |
| 10 | + | ;;;; This library is distributed in the hope that it will be useful, | |
| 11 | + | ;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 12 | + | ;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| 13 | + | ;;;; Lesser General Public License for more details. | |
| 14 | + | ;;;; | |
| 15 | + | ;;;; You should have received a copy of the GNU Lesser General Public | |
| 16 | + | ;;;; License along with this library; if not, write to the Free Software | |
| 17 | + | ;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
| 18 | + | ;;;; | |
| 19 | + | ||
| 20 | + | (use-modules (test-modules online)) | |
| 21 | + | (use-modules (test-modules result)) | |
| 22 | + | (use-modules (test-modules testsuite)) | |
| 23 | + | ||
| 24 | + | (define turtle-test-manifest "https://www.w3.org/2013/TurtleTests/manifest.ttl") | |
| 25 | + | ||
| 26 | + | (run-test-suite turtle-test-manifest expected-failures tap-driver) |
tests/turtle.trs unknown status 1
| 1 | + | :global-test-result: FAIL | |
| 2 | + | :recheck: yes | |
| 3 | + | :copy-in-global-log: yes | |
| 4 | + | :test-result: PASS | |
| 5 | + | :test-result: FAIL | |
| 6 | + | :test-result: PASS | |
| 7 | + | :test-result: PASS | |
| 8 | + | :test-result: PASS | |
| 9 | + | :test-result: PASS | |
| 10 | + | :test-result: PASS | |
| 11 | + | :test-result: PASS | |
| 12 | + | :test-result: PASS | |
| 13 | + | :test-result: PASS | |
| 14 | + | :test-result: PASS | |
| 15 | + | :test-result: PASS | |
| 16 | + | :test-result: PASS | |
| 17 | + | :test-result: SKIP | |
| 18 | + | :test-result: SKIP | |
| 19 | + | :test-result: SKIP | |
| 20 | + | :test-result: SKIP | |
| 21 | + | :test-result: SKIP | |
| 22 | + | :test-result: SKIP | |
| 23 | + | :test-result: SKIP | |
| 24 | + | :test-result: SKIP | |
| 25 | + | :test-result: SKIP | |
| 26 | + | :test-result: SKIP | |
| 27 | + | :test-result: SKIP | |
| 28 | + | :test-result: SKIP | |
| 29 | + | :test-result: SKIP | |
| 30 | + | :test-result: SKIP | |
| 31 | + | :test-result: SKIP | |
| 32 | + | :test-result: SKIP | |
| 33 | + | :test-result: SKIP | |
| 34 | + | :test-result: SKIP | |
| 35 | + | :test-result: SKIP | |
| 36 | + | :test-result: SKIP | |
| 37 | + | :test-result: SKIP | |
| 38 | + | :test-result: SKIP | |
| 39 | + | :test-result: SKIP | |
| 40 | + | :test-result: SKIP | |
| 41 | + | :test-result: SKIP | |
| 42 | + | :test-result: SKIP | |
| 43 | + | :test-result: SKIP | |
| 44 | + | :test-result: SKIP | |
| 45 | + | :test-result: SKIP | |
| 46 | + | :test-result: SKIP | |
| 47 | + | :test-result: SKIP | |
| 48 | + | :test-result: SKIP | |
| 49 | + | :test-result: SKIP | |
| 50 | + | :test-result: PASS | |
| 51 | + | :test-result: PASS | |
| 52 | + | :test-result: PASS | |
| 53 | + | :test-result: PASS | |
| 54 | + | :test-result: PASS | |
| 55 | + | :test-result: PASS | |
| 56 | + | :test-result: PASS | |
| 57 | + | :test-result: PASS | |
| 58 | + | :test-result: PASS | |
| 59 | + | :test-result: PASS | |
| 60 | + | :test-result: PASS | |
| 61 | + | :test-result: PASS | |
| 62 | + | :test-result: PASS | |
| 63 | + | :test-result: PASS | |
| 64 | + | :test-result: PASS | |
| 65 | + | :test-result: PASS | |
| 66 | + | :test-result: PASS | |
| 67 | + | :test-result: PASS | |
| 68 | + | :test-result: PASS | |
| 69 | + | :test-result: PASS | |
| 70 | + | :test-result: PASS | |
| 71 | + | :test-result: PASS | |
| 72 | + | :test-result: PASS | |
| 73 | + | :test-result: PASS | |
| 74 | + | :test-result: PASS | |
| 75 | + | :test-result: PASS | |
| 76 | + | :test-result: PASS | |
| 77 | + | :test-result: PASS | |
| 78 | + | :test-result: PASS | |
| 79 | + | :test-result: PASS | |
| 80 | + | :test-result: PASS | |
| 81 | + | :test-result: PASS | |
| 82 | + | :test-result: PASS | |
| 83 | + | :test-result: PASS | |
| 84 | + | :test-result: PASS | |
| 85 | + | :test-result: PASS | |
| 86 | + | :test-result: PASS | |
| 87 | + | :test-result: PASS | |
| 88 | + | :test-result: PASS | |
| 89 | + | :test-result: PASS | |
| 90 | + | :test-result: PASS | |
| 91 | + | :test-result: PASS | |
| 92 | + | :test-result: PASS | |
| 93 | + | :test-result: PASS | |
| 94 | + | :test-result: PASS | |
| 95 | + | :test-result: PASS | |
| 96 | + | :test-result: PASS | |
| 97 | + | :test-result: PASS | |
| 98 | + | :test-result: PASS | |
| 99 | + | :test-result: PASS | |
| 100 | + | :test-result: PASS | |
| 101 | + | :test-result: PASS | |
| 102 | + | :test-result: PASS | |
| 103 | + | :test-result: PASS | |
| 104 | + | :test-result: PASS | |
| 105 | + | :test-result: PASS | |
| 106 | + | :test-result: PASS | |
| 107 | + | :test-result: PASS | |
| 108 | + | :test-result: PASS | |
| 109 | + | :test-result: PASS | |
| 110 | + | :test-result: PASS | |
| 111 | + | :test-result: PASS | |
| 112 | + | :test-result: PASS | |
| 113 | + | :test-result: PASS | |
| 114 | + | :test-result: PASS | |
| 115 | + | :test-result: PASS | |
| 116 | + | :test-result: PASS | |
| 117 | + | :test-result: PASS | |
| 118 | + | :test-result: FAIL | |
| 119 | + | :test-result: FAIL | |
| 120 | + | :test-result: FAIL | |
| 121 | + | :test-result: FAIL | |
| 122 | + | :test-result: FAIL | |
| 123 | + | :test-result: PASS | |
| 124 | + | :test-result: PASS | |
| 125 | + | :test-result: PASS | |
| 126 | + | :test-result: PASS | |
| 127 | + | :test-result: PASS | |
| 128 | + | :test-result: PASS | |
| 129 | + | :test-result: FAIL | |
| 130 | + | :test-result: FAIL | |
| 131 | + | :test-result: FAIL | |
| 132 | + | :test-result: FAIL | |
| 133 | + | :test-result: FAIL | |
| 134 | + | :test-result: FAIL | |
| 135 | + | :test-result: FAIL | |
| 136 | + | :test-result: FAIL | |
| 137 | + | :test-result: FAIL | |
| 138 | + | :test-result: FAIL | |
| 139 | + | :test-result: FAIL | |
| 140 | + | :test-result: FAIL | |
| 141 | + | :test-result: FAIL | |
| 142 | + | :test-result: FAIL | |
| 143 | + | :test-result: FAIL | |
| 144 | + | :test-result: FAIL | |
| 145 | + | :test-result: FAIL | |
| 146 | + | :test-result: FAIL | |
| 147 | + | :test-result: FAIL | |
| 148 | + | :test-result: PASS | |
| 149 | + | :test-result: FAIL | |
| 150 | + | :test-result: PASS | |
| 151 | + | :test-result: PASS | |
| 152 | + | :test-result: FAIL | |
| 153 | + | :test-result: FAIL | |
| 154 | + | :test-result: FAIL | |
| 155 | + | :test-result: FAIL | |
| 156 | + | :test-result: FAIL | |
| 157 | + | :test-result: PASS | |
| 158 | + | :test-result: PASS | |
| 159 | + | :test-result: PASS | |
| 160 | + | :test-result: FAIL | |
| 161 | + | :test-result: FAIL | |
| 162 | + | :test-result: FAIL | |
| 163 | + | :test-result: FAIL | |
| 164 | + | :test-result: FAIL | |
| 165 | + | :test-result: FAIL | |
| 166 | + | :test-result: FAIL | |
| 167 | + | :test-result: FAIL | |
| 168 | + | :test-result: FAIL | |
| 169 | + | :test-result: FAIL | |
| 170 | + | :test-result: PASS | |
| 171 | + | :test-result: FAIL | |
| 172 | + | :test-result: PASS | |
| 173 | + | :test-result: PASS | |
| 174 | + | :test-result: PASS | |
| 175 | + | :test-result: FAIL | |
| 176 | + | :test-result: PASS | |
| 177 | + | :test-result: PASS | |
| 178 | + | :test-result: PASS | |
| 179 | + | :test-result: PASS | |
| 180 | + | :test-result: PASS | |
| 181 | + | :test-result: PASS | |
| 182 | + | :test-result: PASS | |
| 183 | + | :test-result: PASS | |
| 184 | + | :test-result: PASS | |
| 185 | + | :test-result: PASS | |
| 186 | + | :test-result: PASS | |
| 187 | + | :test-result: PASS | |
| 188 | + | :test-result: PASS | |
| 189 | + | :test-result: PASS | |
| 190 | + | :test-result: PASS | |
| 191 | + | :test-result: SKIP | |
| 192 | + | :test-result: SKIP | |
| 193 | + | :test-result: PASS | |
| 194 | + | :test-result: SKIP | |
| 195 | + | :test-result: SKIP | |
| 196 | + | :test-result: SKIP | |
| 197 | + | :test-result: SKIP | |
| 198 | + | :test-result: SKIP | |
| 199 | + | :test-result: SKIP | |
| 200 | + | :test-result: SKIP | |
| 201 | + | :test-result: SKIP | |
| 202 | + | :test-result: SKIP | |
| 203 | + | :test-result: SKIP | |
| 204 | + | :test-result: SKIP | |
| 205 | + | :test-result: SKIP | |
| 206 | + | :test-result: SKIP | |
| 207 | + | :test-result: SKIP | |
| 208 | + | :test-result: SKIP | |
| 209 | + | :test-result: SKIP | |
| 210 | + | :test-result: SKIP | |
| 211 | + | :test-result: SKIP | |
| 212 | + | :test-result: SKIP | |
| 213 | + | :test-result: SKIP | |
| 214 | + | :test-result: SKIP | |
| 215 | + | :test-result: SKIP | |
| 216 | + | :test-result: SKIP | |
| 217 | + | :test-result: SKIP | |
| 218 | + | :test-result: SKIP | |
| 219 | + | :test-result: SKIP | |
| 220 | + | :test-result: SKIP | |
| 221 | + | :test-result: SKIP | |
| 222 | + | :test-result: SKIP | |
| 223 | + | :test-result: SKIP | |
| 224 | + | :test-result: SKIP | |
| 225 | + | :test-result: SKIP | |
| 226 | + | :test-result: SKIP | |
| 227 | + | :test-result: SKIP | |
| 228 | + | :test-result: SKIP | |
| 229 | + | :test-result: SKIP | |
| 230 | + | :test-result: SKIP | |
| 231 | + | :test-result: SKIP | |
| 232 | + | :test-result: SKIP | |
| 233 | + | :test-result: SKIP | |
| 234 | + | :test-result: SKIP | |
| 235 | + | :test-result: SKIP | |
| 236 | + | :test-result: SKIP | |
| 237 | + | :test-result: SKIP | |
| 238 | + | :test-result: SKIP | |
| 239 | + | :test-result: SKIP | |
| 240 | + | :test-result: SKIP | |
| 241 | + | :test-result: SKIP | |
| 242 | + | :test-result: SKIP | |
| 243 | + | :test-result: SKIP | |
| 244 | + | :test-result: SKIP | |
| 245 | + | :test-result: SKIP | |
| 246 | + | :test-result: SKIP | |
| 247 | + | :test-result: SKIP | |
| 248 | + | :test-result: SKIP | |
| 249 | + | :test-result: SKIP | |
| 250 | + | :test-result: SKIP | |
| 251 | + | :test-result: SKIP | |
| 252 | + | :test-result: SKIP | |
| 253 | + | :test-result: SKIP | |
| 254 | + | :test-result: SKIP | |
| 255 | + | :test-result: SKIP | |
| 256 | + | :test-result: SKIP | |
| 257 | + | :test-result: SKIP | |
| 258 | + | :test-result: SKIP | |
| 259 | + | :test-result: SKIP | |
| 260 | + | :test-result: SKIP | |
| 261 | + | :test-result: SKIP | |
| 262 | + | :test-result: SKIP | |
| 263 | + | :test-result: SKIP | |
| 264 | + | :test-result: SKIP | |
| 265 | + | :test-result: SKIP | |
| 266 | + | :test-result: SKIP | |
| 267 | + | :test-result: SKIP | |
| 268 | + | :test-result: SKIP | |
| 269 | + | :test-result: SKIP | |
| 270 | + | :test-result: SKIP | |
| 271 | + | :test-result: SKIP | |
| 272 | + | :test-result: SKIP | |
| 273 | + | :test-result: SKIP | |
| 274 | + | :test-result: SKIP | |
| 275 | + | :test-result: SKIP | |
| 276 | + | :test-result: SKIP | |
| 277 | + | :test-result: SKIP | |
| 278 | + | :test-result: SKIP | |
| 279 | + | :test-result: SKIP | |
| 280 | + | :test-result: SKIP | |
| 281 | + | :test-result: SKIP | |
| 282 | + | :test-result: SKIP | |
| 283 | + | :test-result: SKIP | |
| 284 | + | :test-result: SKIP | |
| 285 | + | :test-result: SKIP | |
| 286 | + | :test-result: SKIP | |
| 287 | + | :test-result: SKIP | |
| 288 | + | :test-result: SKIP | |
| 289 | + | :test-result: SKIP | |
| 290 | + | :test-result: SKIP | |
| 291 | + | :test-result: SKIP | |
| 292 | + | :test-result: SKIP | |
| 293 | + | :test-result: SKIP | |
| 294 | + | :test-result: SKIP |