Add test infrastructure and turtle test

Julien LepillerTue Mar 31 04:36:16+0200 2020

d2c382b

Add test infrastructure and turtle test

.gitignore

1010
Makefile
1111
config.status
1212
pre-inst-env
13+
tests/*.scm

Makefile.am

66
  turtle/parser.scm \
77
  turtle/tordf.scm \
88
  iri/iri.scm \
9+
  test-modules/testsuite.scm \
10+
  test-modules/online.scm \
11+
  test-modules/result.scm
912
1013
TEST_EXTENSIONS = .scm
1114
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
1316
EXTRA_DIST += $(TESTS)

configure.ac

1111
GUILE_SITE_DIR
1212
1313
AC_CONFIG_FILES([pre-inst-env], [chmod +x pre-inst-env])
14+
AC_CONFIG_FILES([tests/turtle.scm], [chmod +x tests/turtle.scm])
1415
AC_CONFIG_FILES(Makefile)
1516
AC_REQUIRE_AUX_FILE([tap-driver.sh])
1617
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