From 305c2c3539434ff3d1eb9bd954d3c1f252dd8d9c Mon Sep 17 00:00:00 2001 From: Chris Wilkinson Date: Mon, 25 Feb 2019 16:11:05 +0000 Subject: [PATCH 01/12] Begin recognising elements and attributes --- .gitignore | 5 + .travis.yml | 42 + composer.json | 42 + composer.lock | 3089 +++++++++++++++++ foo/article-meta/title-group.xml | 6 + foo/article-title/@xml:lang.xml | 5 + foo/article-title/inline.xml | 9 + foo/front/@id.xml | 12 + foo/front/@xml:base.xml | 12 + foo/front/ack.xml | 13 + foo/front/bio.xml | 13 + foo/front/def-list.xml | 13 + foo/front/fn-group.xml | 16 + foo/front/glossary.xml | 13 + foo/front/journal-meta.xml | 13 + foo/front/list.xml | 20 + foo/front/notes.xml | 17 + foo/front/title-group.xml | 15 + foo/title-group/@id.xml | 16 + foo/title-group/@xml:base.xml | 16 + foo/title-group/alt-title.xml | 17 + foo/title-group/article-title.xml | 15 + foo/title-group/fn-group.xml | 20 + foo/title-group/subtitle.xml | 17 + foo/title-group/trans-title-group.xml | 20 + foo/underline/inline.xml | 6 + phpcs.xml.dist | 20 + phpstan.neon.dist | 10 + phpunit.xml.dist | 13 + support.sch | 25 + tests/SchemaTest.php | 184 + tests/cases/abbrev-journal-title.xml | 6 + tests/cases/abbrev.xml | 6 + tests/cases/abstract.xml | 6 + tests/cases/access-date.xml | 6 + tests/cases/ack.xml | 6 + tests/cases/addr-line.xml | 6 + tests/cases/address.xml | 6 + tests/cases/aff-alternatives.xml | 9 + tests/cases/aff.xml | 6 + tests/cases/ali:free_to_read.xml | 6 + tests/cases/ali:license_ref.xml | 6 + tests/cases/alt-text.xml | 6 + tests/cases/alt-title.xml | 6 + tests/cases/alternatives.xml | 9 + tests/cases/annotation.xml | 9 + tests/cases/anonymous.xml | 6 + tests/cases/app-group.xml | 6 + tests/cases/app.xml | 6 + tests/cases/array.xml | 6 + tests/cases/article-categories.xml | 6 + tests/cases/article-id.xml | 6 + tests/cases/article-meta.xml | 6 + tests/cases/article-title.xml | 6 + tests/cases/article/@article-type.xml | 12 + tests/cases/article/@dtd-version.xml | 12 + tests/cases/article/@id.xml | 12 + tests/cases/article/@specific-use.xml | 12 + tests/cases/article/@xml:base.xml | 12 + tests/cases/article/@xml:lang.xml | 11 + tests/cases/attrib.xml | 6 + tests/cases/author-comment.xml | 9 + tests/cases/author-notes.xml | 9 + tests/cases/award-group.xml | 6 + tests/cases/award-id.xml | 6 + tests/cases/back.xml | 6 + tests/cases/bio.xml | 6 + tests/cases/body.xml | 6 + tests/cases/bold.xml | 6 + tests/cases/boxed-text.xml | 6 + tests/cases/break.xml | 6 + tests/cases/caption.xml | 6 + tests/cases/chapter-title.xml | 6 + tests/cases/chem-struct-wrap.xml | 9 + tests/cases/chem-struct.xml | 6 + tests/cases/citation-alternatives.xml | 9 + tests/cases/city.xml | 6 + tests/cases/code.xml | 6 + tests/cases/col.xml | 6 + tests/cases/colgroup.xml | 6 + tests/cases/collab-alternatives.xml | 9 + tests/cases/collab.xml | 6 + tests/cases/comment.xml | 6 + tests/cases/compound-kwd-part.xml | 6 + tests/cases/compound-kwd.xml | 9 + tests/cases/compound-subject-part.xml | 6 + tests/cases/compound-subject.xml | 9 + tests/cases/conf-acronym.xml | 6 + tests/cases/conf-date.xml | 6 + tests/cases/conf-loc.xml | 6 + tests/cases/conf-name.xml | 6 + tests/cases/conf-num.xml | 6 + tests/cases/conf-sponsor.xml | 6 + tests/cases/conf-theme.xml | 6 + tests/cases/conference.xml | 6 + tests/cases/contrib-group.xml | 9 + tests/cases/contrib-id.xml | 6 + tests/cases/contrib.xml | 6 + tests/cases/copyright-holder.xml | 6 + tests/cases/copyright-statement.xml | 6 + tests/cases/copyright-year.xml | 6 + tests/cases/corresp.xml | 6 + tests/cases/count.xml | 8 + tests/cases/country.xml | 6 + tests/cases/counts.xml | 6 + tests/cases/custom-meta-group.xml | 14 + tests/cases/custom-meta.xml | 11 + tests/cases/data-title.xml | 6 + tests/cases/date-in-citation.xml | 6 + tests/cases/date.xml | 6 + tests/cases/day.xml | 6 + tests/cases/def-head.xml | 6 + tests/cases/def-item.xml | 6 + tests/cases/def-list.xml | 6 + tests/cases/def.xml | 9 + tests/cases/degrees.xml | 6 + tests/cases/disp-formula-group.xml | 6 + tests/cases/disp-formula.xml | 6 + tests/cases/disp-quote.xml | 6 + tests/cases/edition.xml | 6 + tests/cases/element-citation.xml | 9 + tests/cases/elocation-id.xml | 6 + tests/cases/email.xml | 6 + tests/cases/equation-count.xml | 7 + tests/cases/era.xml | 6 + tests/cases/etal.xml | 6 + tests/cases/ext-link.xml | 6 + tests/cases/fax.xml | 6 + tests/cases/fig-count.xml | 7 + tests/cases/fig-group.xml | 6 + tests/cases/fig.xml | 6 + tests/cases/fixed-case.xml | 6 + tests/cases/floats-group.xml | 6 + tests/cases/fn-group.xml | 9 + tests/cases/fn.xml | 9 + tests/cases/fpage.xml | 6 + tests/cases/front-stub.xml | 6 + tests/cases/front.xml | 9 + tests/cases/funding-group.xml | 6 + tests/cases/funding-source.xml | 6 + tests/cases/funding-statement.xml | 6 + tests/cases/given-names.xml | 6 + tests/cases/glossary.xml | 6 + tests/cases/glyph-data.xml | 6 + tests/cases/glyph-ref.xml | 6 + tests/cases/gov.xml | 6 + tests/cases/graphic.xml | 7 + tests/cases/history.xml | 6 + tests/cases/hr.xml | 6 + tests/cases/inline-formula.xml | 6 + tests/cases/inline-graphic.xml | 7 + tests/cases/inline-supplementary-material.xml | 6 + tests/cases/institution-id.xml | 6 + tests/cases/institution-wrap.xml | 6 + tests/cases/institution.xml | 6 + tests/cases/isbn.xml | 6 + tests/cases/issn-l.xml | 6 + tests/cases/issn.xml | 6 + tests/cases/issue-id.xml | 6 + tests/cases/issue-part.xml | 6 + tests/cases/issue-sponsor.xml | 6 + tests/cases/issue-title.xml | 6 + tests/cases/issue.xml | 6 + tests/cases/italic.xml | 6 + tests/cases/journal-id.xml | 6 + tests/cases/journal-meta.xml | 6 + tests/cases/journal-subtitle.xml | 6 + tests/cases/journal-title-group.xml | 6 + tests/cases/journal-title.xml | 6 + tests/cases/kwd-group.xml | 6 + tests/cases/kwd.xml | 6 + tests/cases/label.xml | 6 + tests/cases/license-p.xml | 6 + tests/cases/license.xml | 9 + tests/cases/list-item.xml | 9 + tests/cases/list.xml | 9 + tests/cases/long-desc.xml | 6 + tests/cases/lpage.xml | 6 + tests/cases/media.xml | 7 + tests/cases/meta-name.xml | 6 + tests/cases/meta-value.xml | 6 + tests/cases/milestone-end.xml | 6 + tests/cases/milestone-start.xml | 6 + tests/cases/mixed-citation.xml | 6 + tests/cases/mml:math.xml | 6 + tests/cases/monospace.xml | 6 + tests/cases/month.xml | 6 + tests/cases/name-alternatives.xml | 9 + tests/cases/name.xml | 9 + tests/cases/named-content.xml | 7 + tests/cases/nested-kwd.xml | 9 + tests/cases/nlm-citation.xml | 6 + tests/cases/note.xml | 9 + tests/cases/notes.xml | 6 + tests/cases/object-id.xml | 6 + tests/cases/on-behalf-of.xml | 6 + tests/cases/open-access.xml | 9 + tests/cases/overline-end.xml | 8 + tests/cases/overline-start.xml | 7 + tests/cases/overline.xml | 6 + tests/cases/p.xml | 6 + tests/cases/page-count.xml | 7 + tests/cases/page-range.xml | 6 + tests/cases/part-title.xml | 6 + tests/cases/patent.xml | 6 + tests/cases/permissions.xml | 6 + tests/cases/person-group.xml | 6 + tests/cases/phone.xml | 6 + tests/cases/postal-code.xml | 6 + tests/cases/prefix.xml | 6 + tests/cases/preformat.xml | 6 + tests/cases/price.xml | 6 + tests/cases/principal-award-recipient.xml | 6 + tests/cases/principal-investigator.xml | 6 + tests/cases/private-char.xml | 6 + tests/cases/product.xml | 6 + tests/cases/pub-date.xml | 6 + tests/cases/pub-id.xml | 6 + tests/cases/publisher-loc.xml | 6 + tests/cases/publisher-name.xml | 6 + tests/cases/publisher.xml | 9 + tests/cases/rb.xml | 6 + tests/cases/ref-count.xml | 7 + tests/cases/ref-list.xml | 6 + tests/cases/ref.xml | 9 + tests/cases/related-article.xml | 7 + tests/cases/related-object.xml | 6 + tests/cases/response.xml | 9 + tests/cases/role.xml | 6 + tests/cases/roman.xml | 6 + tests/cases/rp.xml | 6 + tests/cases/rt.xml | 6 + tests/cases/ruby.xml | 11 + tests/cases/sans-serif.xml | 6 + tests/cases/sc.xml | 6 + tests/cases/season.xml | 6 + tests/cases/sec-meta.xml | 6 + tests/cases/sec.xml | 6 + tests/cases/self-uri.xml | 6 + tests/cases/series-text.xml | 6 + tests/cases/series-title.xml | 6 + tests/cases/series.xml | 6 + tests/cases/sig-block.xml | 6 + tests/cases/sig.xml | 6 + tests/cases/size.xml | 7 + tests/cases/source.xml | 6 + tests/cases/speaker.xml | 6 + tests/cases/speech.xml | 11 + tests/cases/state.xml | 6 + tests/cases/statement.xml | 9 + tests/cases/std-organization.xml | 6 + tests/cases/std.xml | 6 + tests/cases/strike.xml | 6 + tests/cases/string-conf.xml | 6 + tests/cases/string-date.xml | 6 + tests/cases/string-name.xml | 6 + tests/cases/styled-content.xml | 6 + tests/cases/sub-article.xml | 9 + tests/cases/sub.xml | 6 + tests/cases/subj-group.xml | 9 + tests/cases/subject.xml | 6 + tests/cases/subtitle.xml | 6 + tests/cases/suffix.xml | 6 + tests/cases/sup.xml | 6 + tests/cases/supplement.xml | 6 + tests/cases/supplementary-material.xml | 6 + tests/cases/surname.xml | 6 + tests/cases/table-count.xml | 7 + tests/cases/table-wrap-foot.xml | 9 + tests/cases/table-wrap-group.xml | 9 + tests/cases/table-wrap.xml | 6 + tests/cases/table.xml | 12 + tests/cases/target.xml | 7 + tests/cases/tbody.xml | 12 + tests/cases/td.xml | 6 + tests/cases/term-head.xml | 6 + tests/cases/term.xml | 6 + tests/cases/tex-math.xml | 6 + tests/cases/textual-form.xml | 6 + tests/cases/tfoot.xml | 12 + tests/cases/th.xml | 6 + tests/cases/thead.xml | 12 + tests/cases/time-stamp.xml | 6 + tests/cases/title-group.xml | 9 + tests/cases/title.xml | 6 + tests/cases/tr.xml | 9 + tests/cases/trans-abstract.xml | 6 + tests/cases/trans-source.xml | 6 + tests/cases/trans-subtitle.xml | 6 + tests/cases/trans-title-group.xml | 9 + tests/cases/trans-title.xml | 6 + tests/cases/underline-end.xml | 8 + tests/cases/underline-start.xml | 7 + tests/cases/underline.xml | 6 + tests/cases/unstructured-kwd-group.xml | 6 + tests/cases/uri.xml | 6 + tests/cases/verse-group.xml | 9 + tests/cases/verse-line.xml | 6 + tests/cases/version.xml | 6 + tests/cases/volume-id.xml | 6 + tests/cases/volume-issue-group.xml | 6 + tests/cases/volume-series.xml | 6 + tests/cases/volume.xml | 6 + tests/cases/word-count.xml | 7 + tests/cases/x.xml | 6 + tests/cases/xref.xml | 6 + tests/cases/year.xml | 6 + tests/jats.rng | 285 ++ 308 files changed, 5886 insertions(+) create mode 100644 .travis.yml create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 foo/article-meta/title-group.xml create mode 100644 foo/article-title/@xml:lang.xml create mode 100644 foo/article-title/inline.xml create mode 100644 foo/front/@id.xml create mode 100644 foo/front/@xml:base.xml create mode 100644 foo/front/ack.xml create mode 100644 foo/front/bio.xml create mode 100644 foo/front/def-list.xml create mode 100644 foo/front/fn-group.xml create mode 100644 foo/front/glossary.xml create mode 100644 foo/front/journal-meta.xml create mode 100644 foo/front/list.xml create mode 100644 foo/front/notes.xml create mode 100644 foo/front/title-group.xml create mode 100644 foo/title-group/@id.xml create mode 100644 foo/title-group/@xml:base.xml create mode 100644 foo/title-group/alt-title.xml create mode 100644 foo/title-group/article-title.xml create mode 100644 foo/title-group/fn-group.xml create mode 100644 foo/title-group/subtitle.xml create mode 100644 foo/title-group/trans-title-group.xml create mode 100644 foo/underline/inline.xml create mode 100644 phpcs.xml.dist create mode 100644 phpstan.neon.dist create mode 100644 phpunit.xml.dist create mode 100644 support.sch create mode 100644 tests/SchemaTest.php create mode 100644 tests/cases/abbrev-journal-title.xml create mode 100644 tests/cases/abbrev.xml create mode 100644 tests/cases/abstract.xml create mode 100644 tests/cases/access-date.xml create mode 100644 tests/cases/ack.xml create mode 100644 tests/cases/addr-line.xml create mode 100644 tests/cases/address.xml create mode 100644 tests/cases/aff-alternatives.xml create mode 100644 tests/cases/aff.xml create mode 100644 tests/cases/ali:free_to_read.xml create mode 100644 tests/cases/ali:license_ref.xml create mode 100644 tests/cases/alt-text.xml create mode 100644 tests/cases/alt-title.xml create mode 100644 tests/cases/alternatives.xml create mode 100644 tests/cases/annotation.xml create mode 100644 tests/cases/anonymous.xml create mode 100644 tests/cases/app-group.xml create mode 100644 tests/cases/app.xml create mode 100644 tests/cases/array.xml create mode 100644 tests/cases/article-categories.xml create mode 100644 tests/cases/article-id.xml create mode 100644 tests/cases/article-meta.xml create mode 100644 tests/cases/article-title.xml create mode 100644 tests/cases/article/@article-type.xml create mode 100644 tests/cases/article/@dtd-version.xml create mode 100644 tests/cases/article/@id.xml create mode 100644 tests/cases/article/@specific-use.xml create mode 100644 tests/cases/article/@xml:base.xml create mode 100644 tests/cases/article/@xml:lang.xml create mode 100644 tests/cases/attrib.xml create mode 100644 tests/cases/author-comment.xml create mode 100644 tests/cases/author-notes.xml create mode 100644 tests/cases/award-group.xml create mode 100644 tests/cases/award-id.xml create mode 100644 tests/cases/back.xml create mode 100644 tests/cases/bio.xml create mode 100644 tests/cases/body.xml create mode 100644 tests/cases/bold.xml create mode 100644 tests/cases/boxed-text.xml create mode 100644 tests/cases/break.xml create mode 100644 tests/cases/caption.xml create mode 100644 tests/cases/chapter-title.xml create mode 100644 tests/cases/chem-struct-wrap.xml create mode 100644 tests/cases/chem-struct.xml create mode 100644 tests/cases/citation-alternatives.xml create mode 100644 tests/cases/city.xml create mode 100644 tests/cases/code.xml create mode 100644 tests/cases/col.xml create mode 100644 tests/cases/colgroup.xml create mode 100644 tests/cases/collab-alternatives.xml create mode 100644 tests/cases/collab.xml create mode 100644 tests/cases/comment.xml create mode 100644 tests/cases/compound-kwd-part.xml create mode 100644 tests/cases/compound-kwd.xml create mode 100644 tests/cases/compound-subject-part.xml create mode 100644 tests/cases/compound-subject.xml create mode 100644 tests/cases/conf-acronym.xml create mode 100644 tests/cases/conf-date.xml create mode 100644 tests/cases/conf-loc.xml create mode 100644 tests/cases/conf-name.xml create mode 100644 tests/cases/conf-num.xml create mode 100644 tests/cases/conf-sponsor.xml create mode 100644 tests/cases/conf-theme.xml create mode 100644 tests/cases/conference.xml create mode 100644 tests/cases/contrib-group.xml create mode 100644 tests/cases/contrib-id.xml create mode 100644 tests/cases/contrib.xml create mode 100644 tests/cases/copyright-holder.xml create mode 100644 tests/cases/copyright-statement.xml create mode 100644 tests/cases/copyright-year.xml create mode 100644 tests/cases/corresp.xml create mode 100644 tests/cases/count.xml create mode 100644 tests/cases/country.xml create mode 100644 tests/cases/counts.xml create mode 100644 tests/cases/custom-meta-group.xml create mode 100644 tests/cases/custom-meta.xml create mode 100644 tests/cases/data-title.xml create mode 100644 tests/cases/date-in-citation.xml create mode 100644 tests/cases/date.xml create mode 100644 tests/cases/day.xml create mode 100644 tests/cases/def-head.xml create mode 100644 tests/cases/def-item.xml create mode 100644 tests/cases/def-list.xml create mode 100644 tests/cases/def.xml create mode 100644 tests/cases/degrees.xml create mode 100644 tests/cases/disp-formula-group.xml create mode 100644 tests/cases/disp-formula.xml create mode 100644 tests/cases/disp-quote.xml create mode 100644 tests/cases/edition.xml create mode 100644 tests/cases/element-citation.xml create mode 100644 tests/cases/elocation-id.xml create mode 100644 tests/cases/email.xml create mode 100644 tests/cases/equation-count.xml create mode 100644 tests/cases/era.xml create mode 100644 tests/cases/etal.xml create mode 100644 tests/cases/ext-link.xml create mode 100644 tests/cases/fax.xml create mode 100644 tests/cases/fig-count.xml create mode 100644 tests/cases/fig-group.xml create mode 100644 tests/cases/fig.xml create mode 100644 tests/cases/fixed-case.xml create mode 100644 tests/cases/floats-group.xml create mode 100644 tests/cases/fn-group.xml create mode 100644 tests/cases/fn.xml create mode 100644 tests/cases/fpage.xml create mode 100644 tests/cases/front-stub.xml create mode 100644 tests/cases/front.xml create mode 100644 tests/cases/funding-group.xml create mode 100644 tests/cases/funding-source.xml create mode 100644 tests/cases/funding-statement.xml create mode 100644 tests/cases/given-names.xml create mode 100644 tests/cases/glossary.xml create mode 100644 tests/cases/glyph-data.xml create mode 100644 tests/cases/glyph-ref.xml create mode 100644 tests/cases/gov.xml create mode 100644 tests/cases/graphic.xml create mode 100644 tests/cases/history.xml create mode 100644 tests/cases/hr.xml create mode 100644 tests/cases/inline-formula.xml create mode 100644 tests/cases/inline-graphic.xml create mode 100644 tests/cases/inline-supplementary-material.xml create mode 100644 tests/cases/institution-id.xml create mode 100644 tests/cases/institution-wrap.xml create mode 100644 tests/cases/institution.xml create mode 100644 tests/cases/isbn.xml create mode 100644 tests/cases/issn-l.xml create mode 100644 tests/cases/issn.xml create mode 100644 tests/cases/issue-id.xml create mode 100644 tests/cases/issue-part.xml create mode 100644 tests/cases/issue-sponsor.xml create mode 100644 tests/cases/issue-title.xml create mode 100644 tests/cases/issue.xml create mode 100644 tests/cases/italic.xml create mode 100644 tests/cases/journal-id.xml create mode 100644 tests/cases/journal-meta.xml create mode 100644 tests/cases/journal-subtitle.xml create mode 100644 tests/cases/journal-title-group.xml create mode 100644 tests/cases/journal-title.xml create mode 100644 tests/cases/kwd-group.xml create mode 100644 tests/cases/kwd.xml create mode 100644 tests/cases/label.xml create mode 100644 tests/cases/license-p.xml create mode 100644 tests/cases/license.xml create mode 100644 tests/cases/list-item.xml create mode 100644 tests/cases/list.xml create mode 100644 tests/cases/long-desc.xml create mode 100644 tests/cases/lpage.xml create mode 100644 tests/cases/media.xml create mode 100644 tests/cases/meta-name.xml create mode 100644 tests/cases/meta-value.xml create mode 100644 tests/cases/milestone-end.xml create mode 100644 tests/cases/milestone-start.xml create mode 100644 tests/cases/mixed-citation.xml create mode 100644 tests/cases/mml:math.xml create mode 100644 tests/cases/monospace.xml create mode 100644 tests/cases/month.xml create mode 100644 tests/cases/name-alternatives.xml create mode 100644 tests/cases/name.xml create mode 100644 tests/cases/named-content.xml create mode 100644 tests/cases/nested-kwd.xml create mode 100644 tests/cases/nlm-citation.xml create mode 100644 tests/cases/note.xml create mode 100644 tests/cases/notes.xml create mode 100644 tests/cases/object-id.xml create mode 100644 tests/cases/on-behalf-of.xml create mode 100644 tests/cases/open-access.xml create mode 100644 tests/cases/overline-end.xml create mode 100644 tests/cases/overline-start.xml create mode 100644 tests/cases/overline.xml create mode 100644 tests/cases/p.xml create mode 100644 tests/cases/page-count.xml create mode 100644 tests/cases/page-range.xml create mode 100644 tests/cases/part-title.xml create mode 100644 tests/cases/patent.xml create mode 100644 tests/cases/permissions.xml create mode 100644 tests/cases/person-group.xml create mode 100644 tests/cases/phone.xml create mode 100644 tests/cases/postal-code.xml create mode 100644 tests/cases/prefix.xml create mode 100644 tests/cases/preformat.xml create mode 100644 tests/cases/price.xml create mode 100644 tests/cases/principal-award-recipient.xml create mode 100644 tests/cases/principal-investigator.xml create mode 100644 tests/cases/private-char.xml create mode 100644 tests/cases/product.xml create mode 100644 tests/cases/pub-date.xml create mode 100644 tests/cases/pub-id.xml create mode 100644 tests/cases/publisher-loc.xml create mode 100644 tests/cases/publisher-name.xml create mode 100644 tests/cases/publisher.xml create mode 100644 tests/cases/rb.xml create mode 100644 tests/cases/ref-count.xml create mode 100644 tests/cases/ref-list.xml create mode 100644 tests/cases/ref.xml create mode 100644 tests/cases/related-article.xml create mode 100644 tests/cases/related-object.xml create mode 100644 tests/cases/response.xml create mode 100644 tests/cases/role.xml create mode 100644 tests/cases/roman.xml create mode 100644 tests/cases/rp.xml create mode 100644 tests/cases/rt.xml create mode 100644 tests/cases/ruby.xml create mode 100644 tests/cases/sans-serif.xml create mode 100644 tests/cases/sc.xml create mode 100644 tests/cases/season.xml create mode 100644 tests/cases/sec-meta.xml create mode 100644 tests/cases/sec.xml create mode 100644 tests/cases/self-uri.xml create mode 100644 tests/cases/series-text.xml create mode 100644 tests/cases/series-title.xml create mode 100644 tests/cases/series.xml create mode 100644 tests/cases/sig-block.xml create mode 100644 tests/cases/sig.xml create mode 100644 tests/cases/size.xml create mode 100644 tests/cases/source.xml create mode 100644 tests/cases/speaker.xml create mode 100644 tests/cases/speech.xml create mode 100644 tests/cases/state.xml create mode 100644 tests/cases/statement.xml create mode 100644 tests/cases/std-organization.xml create mode 100644 tests/cases/std.xml create mode 100644 tests/cases/strike.xml create mode 100644 tests/cases/string-conf.xml create mode 100644 tests/cases/string-date.xml create mode 100644 tests/cases/string-name.xml create mode 100644 tests/cases/styled-content.xml create mode 100644 tests/cases/sub-article.xml create mode 100644 tests/cases/sub.xml create mode 100644 tests/cases/subj-group.xml create mode 100644 tests/cases/subject.xml create mode 100644 tests/cases/subtitle.xml create mode 100644 tests/cases/suffix.xml create mode 100644 tests/cases/sup.xml create mode 100644 tests/cases/supplement.xml create mode 100644 tests/cases/supplementary-material.xml create mode 100644 tests/cases/surname.xml create mode 100644 tests/cases/table-count.xml create mode 100644 tests/cases/table-wrap-foot.xml create mode 100644 tests/cases/table-wrap-group.xml create mode 100644 tests/cases/table-wrap.xml create mode 100644 tests/cases/table.xml create mode 100644 tests/cases/target.xml create mode 100644 tests/cases/tbody.xml create mode 100644 tests/cases/td.xml create mode 100644 tests/cases/term-head.xml create mode 100644 tests/cases/term.xml create mode 100644 tests/cases/tex-math.xml create mode 100644 tests/cases/textual-form.xml create mode 100644 tests/cases/tfoot.xml create mode 100644 tests/cases/th.xml create mode 100644 tests/cases/thead.xml create mode 100644 tests/cases/time-stamp.xml create mode 100644 tests/cases/title-group.xml create mode 100644 tests/cases/title.xml create mode 100644 tests/cases/tr.xml create mode 100644 tests/cases/trans-abstract.xml create mode 100644 tests/cases/trans-source.xml create mode 100644 tests/cases/trans-subtitle.xml create mode 100644 tests/cases/trans-title-group.xml create mode 100644 tests/cases/trans-title.xml create mode 100644 tests/cases/underline-end.xml create mode 100644 tests/cases/underline-start.xml create mode 100644 tests/cases/underline.xml create mode 100644 tests/cases/unstructured-kwd-group.xml create mode 100644 tests/cases/uri.xml create mode 100644 tests/cases/verse-group.xml create mode 100644 tests/cases/verse-line.xml create mode 100644 tests/cases/version.xml create mode 100644 tests/cases/volume-id.xml create mode 100644 tests/cases/volume-issue-group.xml create mode 100644 tests/cases/volume-series.xml create mode 100644 tests/cases/volume.xml create mode 100644 tests/cases/word-count.xml create mode 100644 tests/cases/x.xml create mode 100644 tests/cases/xref.xml create mode 100644 tests/cases/year.xml create mode 100644 tests/jats.rng diff --git a/.gitignore b/.gitignore index e69de29..97b5c90 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,5 @@ +/.phpcs-cache +/phpcs.xml +/phpstan.neon +/phpunit.xml +/vendor/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..2da96da --- /dev/null +++ b/.travis.yml @@ -0,0 +1,42 @@ +language: php + +php: 7.3 + +before_install: + - phpenv config-rm xdebug.ini || true + +install: + - travis_retry composer install --classmap-authoritative --no-suggest --prefer-dist + +jobs: + include: + + - stage: Test + name: Tests + script: + - vendor/bin/phpunit + + - stage: Code Quality + name: Coding standards + script: + - vendor/bin/phpcs -p + + - stage: Code Quality + name: Static analysis + script: + - vendor/bin/phpstan analyse + +stages: + - Test + - name: Code Quality + if: type = pull_request + +cache: + directories: + - $HOME/.composer/cache/files + +if: | + branch = master OR \ + branch =~ /^(?:[0-9]|[1-9][0-9]*)\.(?:[0-9]|[1-9][0-9]*)$/ OR \ + tag IS present OR \ + type = pull_request diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..7c7b2fc --- /dev/null +++ b/composer.json @@ -0,0 +1,42 @@ +{ + "type": "project", + "license": "MIT", + "autoload-dev": { + "psr-4": { + "tests\\Libero\\JatsSupport\\": "tests/" + } + }, + "require-dev": { + "php": "^7.3", + "ext-dom": "*", + "ext-xsl": "*", + "fluentdom/fluentdom": "^7.1", + "jats/schema": "^1.1", + "libero/coding-standard": "^0.4.0", + "libero/xml-validator": "^0.2", + "lstrojny/functional-php": "^1.9", + "phpstan/phpstan": "^0.11.2", + "phpstan/phpstan-phpunit": "^0.11.0", + "phpunit/phpunit": "^8.0", + "symfony/finder": "^4.2" + }, + "config": { + "platform": { + "php": "7.3.0" + }, + "sort-packages": true + }, + "repositories": [ + { + "type": "package", + "package": { + "name": "jats/schema", + "version": "1.1", + "dist": { + "url": "ftp://ftp.ncbi.nih.gov/pub/jats/archiving/1.1/rng/JATS-Archiving-1-1-MathML3-DTD-RNG.zip", + "type": "zip" + } + } + } + ] +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..1fb8c17 --- /dev/null +++ b/composer.lock @@ -0,0 +1,3089 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "9dae43f9435941b815561c13c7ee4acd", + "packages": [], + "packages-dev": [ + { + "name": "composer/xdebug-handler", + "version": "1.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "d17708133b6c276d6e42ef887a877866b909d892" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/d17708133b6c276d6e42ef887a877866b909d892", + "reference": "d17708133b6c276d6e42ef887a877866b909d892", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "time": "2019-01-28T20:25:53+00:00" + }, + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.5.0", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "e749410375ff6fb7a040a68878c656c2e610b132" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/e749410375ff6fb7a040a68878c656c2e610b132", + "reference": "e749410375ff6fb7a040a68878c656c2e610b132", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0", + "php": "^5.3|^7", + "squizlabs/php_codesniffer": "^2|^3" + }, + "require-dev": { + "composer/composer": "*", + "phpcompatibility/php-compatibility": "^9.0", + "sensiolabs/security-checker": "^4.1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "time": "2018-10-26T13:21:45+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "reference": "185b8868aa9bf7159f5f953ed5afb2d7fcdc3bda", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "^6.2.3", + "squizlabs/php_codesniffer": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2017-07-22T11:58:36+00:00" + }, + { + "name": "fluentdom/fluentdom", + "version": "7.1.0", + "source": { + "type": "git", + "url": "https://github.com/ThomasWeinert/FluentDOM.git", + "reference": "91038715a02e50255a289c0532acd6adbfc30bde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ThomasWeinert/FluentDOM/zipball/91038715a02e50255a289c0532acd6adbfc30bde", + "reference": "91038715a02e50255a289c0532acd6adbfc30bde", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "php": ">=7.0" + }, + "suggest": { + "ext-json": "JSON support, needed for several loaders/serializers", + "ext-xmlreader": "XMLReader, XML pull parser, read large XMLs", + "ext-xmlwriter": "XMLWriter, Write large XMLs", + "fluentdom/css-selector": "Allows to use css selectors." + }, + "type": "library", + "autoload": { + "files": [ + "src/FluentDOM.php" + ], + "psr-4": { + "FluentDOM\\": "src/FluentDOM" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "FluentDOM Contributors", + "homepage": "https://github.com/FluentDOM/FluentDOM/contributors" + } + ], + "description": "A fluent api for the php dom extension.", + "homepage": "http://fluentdom.org", + "keywords": [ + "XMLReader", + "XMLWriter", + "Xpath", + "dom", + "jquery", + "xml" + ], + "time": "2018-11-11T13:47:41+00:00" + }, + { + "name": "jats/schema", + "version": "1.1.0", + "dist": { + "type": "zip", + "url": "ftp://ftp.ncbi.nih.gov/pub/jats/archiving/1.1/rng/JATS-Archiving-1-1-MathML3-DTD-RNG.zip" + }, + "type": "library" + }, + { + "name": "jean85/pretty-package-versions", + "version": "1.2", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/75c7effcf3f77501d0e0caa75111aff4daa0dd48", + "reference": "75c7effcf3f77501d0e0caa75111aff4daa0dd48", + "shasum": "" + }, + "require": { + "ocramius/package-versions": "^1.2.0", + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Jean85\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" + } + ], + "description": "A wrapper for ocramius/package-versions to get pretty versions strings", + "keywords": [ + "composer", + "package", + "release", + "versions" + ], + "time": "2018-06-13T13:22:40+00:00" + }, + { + "name": "libero/coding-standard", + "version": "v0.4.0", + "source": { + "type": "git", + "url": "https://github.com/libero/php-coding-standard.git", + "reference": "0db1bcfa476391bdfe2f69027a62239be1fdc2f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libero/php-coding-standard/zipball/0db1bcfa476391bdfe2f69027a62239be1fdc2f6", + "reference": "0db1bcfa476391bdfe2f69027a62239be1fdc2f6", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.4 || ^0.5", + "php": "^7.2", + "slevomat/coding-standard": "^5.0", + "squizlabs/php_codesniffer": "^3.4" + }, + "require-dev": { + "ext-mbstring": "*", + "ext-tokenizer": "*", + "lstrojny/functional-php": "^1.8", + "phpstan/phpstan": "^0.10", + "phpstan/phpstan-phpunit": "^0.10", + "phpunit/phpunit": "^7.3", + "symfony/finder": "^4.1" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Libero\\CodingStandard\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Libero PHP coding standard", + "time": "2019-02-19T09:51:33+00:00" + }, + { + "name": "libero/xml-validator", + "version": "v0.2.0", + "source": { + "type": "git", + "url": "https://github.com/libero/xml-validator.git", + "reference": "a9e70e2019f3ba027f0daf77a260c3e9b72db54c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/libero/xml-validator/zipball/a9e70e2019f3ba027f0daf77a260c3e9b72db54c", + "reference": "a9e70e2019f3ba027f0daf77a260c3e9b72db54c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^7.2" + }, + "require-dev": { + "ext-xsl": "*", + "libero/coding-standard": "^0.2", + "phpstan/phpstan": "^0.10", + "phpstan/phpstan-phpunit": "^0.10", + "phpunit/phpunit": "^7.2", + "symfony/filesystem": "^4.0" + }, + "suggest": { + "ext-xsl": "To use SchematronValidator" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Libero\\XmlValidator\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "XML validator", + "time": "2018-11-08T09:27:18+00:00" + }, + { + "name": "lstrojny/functional-php", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/lstrojny/functional-php.git", + "reference": "f5b3b4424dcddb406d3dcfcae0d1bc0060099a78" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/lstrojny/functional-php/zipball/f5b3b4424dcddb406d3dcfcae0d1bc0060099a78", + "reference": "f5b3b4424dcddb406d3dcfcae0d1bc0060099a78", + "shasum": "" + }, + "require": { + "php": "~7" + }, + "require-dev": { + "phpunit/phpunit": "~6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Functional\\": "src/Functional" + }, + "files": [ + "src/Functional/Average.php", + "src/Functional/ButLast.php", + "src/Functional/Capture.php", + "src/Functional/ConstFunction.php", + "src/Functional/CompareOn.php", + "src/Functional/CompareObjectHashOn.php", + "src/Functional/Compose.php", + "src/Functional/Concat.php", + "src/Functional/Contains.php", + "src/Functional/Curry.php", + "src/Functional/CurryN.php", + "src/Functional/Difference.php", + "src/Functional/DropFirst.php", + "src/Functional/DropLast.php", + "src/Functional/Each.php", + "src/Functional/Equal.php", + "src/Functional/ErrorToException.php", + "src/Functional/Every.php", + "src/Functional/False.php", + "src/Functional/Falsy.php", + "src/Functional/Filter.php", + "src/Functional/First.php", + "src/Functional/FirstIndexOf.php", + "src/Functional/FlatMap.php", + "src/Functional/Flatten.php", + "src/Functional/Flip.php", + "src/Functional/GreaterThan.php", + "src/Functional/GreaterThanOrEqual.php", + "src/Functional/Group.php", + "src/Functional/Head.php", + "src/Functional/Id.php", + "src/Functional/IfElse.php", + "src/Functional/Identical.php", + "src/Functional/IndexesOf.php", + "src/Functional/Intersperse.php", + "src/Functional/Invoke.php", + "src/Functional/InvokeFirst.php", + "src/Functional/InvokeIf.php", + "src/Functional/InvokeLast.php", + "src/Functional/Invoker.php", + "src/Functional/Last.php", + "src/Functional/LastIndexOf.php", + "src/Functional/LessThan.php", + "src/Functional/LessThanOrEqual.php", + "src/Functional/LexicographicCompare.php", + "src/Functional/Map.php", + "src/Functional/Match.php", + "src/Functional/Maximum.php", + "src/Functional/Memoize.php", + "src/Functional/Minimum.php", + "src/Functional/None.php", + "src/Functional/Not.php", + "src/Functional/PartialAny.php", + "src/Functional/PartialLeft.php", + "src/Functional/PartialMethod.php", + "src/Functional/PartialRight.php", + "src/Functional/Partition.php", + "src/Functional/Pick.php", + "src/Functional/Pluck.php", + "src/Functional/Poll.php", + "src/Functional/Product.php", + "src/Functional/Ratio.php", + "src/Functional/ReduceLeft.php", + "src/Functional/ReduceRight.php", + "src/Functional/Reindex.php", + "src/Functional/Reject.php", + "src/Functional/Retry.php", + "src/Functional/Select.php", + "src/Functional/SelectKeys.php", + "src/Functional/SequenceConstant.php", + "src/Functional/SequenceExponential.php", + "src/Functional/SequenceLinear.php", + "src/Functional/Some.php", + "src/Functional/Sort.php", + "src/Functional/Sum.php", + "src/Functional/SuppressError.php", + "src/Functional/Tap.php", + "src/Functional/Tail.php", + "src/Functional/TailRecursion.php", + "src/Functional/True.php", + "src/Functional/Truthy.php", + "src/Functional/Unique.php", + "src/Functional/With.php", + "src/Functional/Zip.php", + "src/Functional/ZipAll.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Strojny", + "email": "lstrojny@php.net", + "homepage": "http://usrportage.de" + }, + { + "name": "Max Beutel", + "email": "nash12@gmail.com" + } + ], + "description": "Functional primitives for PHP", + "keywords": [ + "functional" + ], + "time": "2018-12-03T16:47:05+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "reference": "3e01bdad3e18354c3dce54466b7fbe33a9f9f7f8", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "replace": { + "myclabs/deep-copy": "self.version" + }, + "require-dev": { + "doctrine/collections": "^1.0", + "doctrine/common": "^2.6", + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + }, + "files": [ + "src/DeepCopy/deep_copy.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "time": "2018-06-11T23:09:50+00:00" + }, + { + "name": "nette/bootstrap", + "version": "v2.4.6", + "source": { + "type": "git", + "url": "https://github.com/nette/bootstrap.git", + "reference": "268816e3f1bb7426c3a4ceec2bd38a036b532543" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/bootstrap/zipball/268816e3f1bb7426c3a4ceec2bd38a036b532543", + "reference": "268816e3f1bb7426c3a4ceec2bd38a036b532543", + "shasum": "" + }, + "require": { + "nette/di": "~2.4.7", + "nette/utils": "~2.4", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "latte/latte": "~2.2", + "nette/application": "~2.3", + "nette/caching": "~2.3", + "nette/database": "~2.3", + "nette/forms": "~2.3", + "nette/http": "~2.4.0", + "nette/mail": "~2.3", + "nette/robot-loader": "^2.4.2 || ^3.0", + "nette/safe-stream": "~2.2", + "nette/security": "~2.3", + "nette/tester": "~2.0", + "tracy/tracy": "^2.4.1" + }, + "suggest": { + "nette/robot-loader": "to use Configurator::createRobotLoader()", + "tracy/tracy": "to use Configurator::enableTracy()" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🅱 Nette Bootstrap: the simple way to configure and bootstrap your Nette application.", + "homepage": "https://nette.org", + "keywords": [ + "bootstrapping", + "configurator", + "nette" + ], + "time": "2018-05-17T12:52:20+00:00" + }, + { + "name": "nette/di", + "version": "v2.4.15", + "source": { + "type": "git", + "url": "https://github.com/nette/di.git", + "reference": "d0561b8f77e8ef2ed6d83328860e16c81a5a8649" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/di/zipball/d0561b8f77e8ef2ed6d83328860e16c81a5a8649", + "reference": "d0561b8f77e8ef2ed6d83328860e16c81a5a8649", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/neon": "^2.3.3 || ~3.0.0", + "nette/php-generator": "^2.6.1 || ^3.0.0", + "nette/utils": "^2.5.0 || ~3.0.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/bootstrap": "<2.4", + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "💎 Nette Dependency Injection Container: Flexible, compiled and full-featured DIC with perfectly usable autowiring and support for all new PHP 7.1 features.", + "homepage": "https://nette.org", + "keywords": [ + "compiled", + "di", + "dic", + "factory", + "ioc", + "nette", + "static" + ], + "time": "2019-01-30T13:26:05+00:00" + }, + { + "name": "nette/finder", + "version": "v2.4.2", + "source": { + "type": "git", + "url": "https://github.com/nette/finder.git", + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/finder/zipball/ee951a656cb8ac622e5dd33474a01fd2470505a0", + "reference": "ee951a656cb8ac622e5dd33474a01fd2470505a0", + "shasum": "" + }, + "require": { + "nette/utils": "~2.4", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🔍 Nette Finder: find files and directories with an intuitive API.", + "homepage": "https://nette.org", + "keywords": [ + "filesystem", + "glob", + "iterator", + "nette" + ], + "time": "2018-06-28T11:49:23+00:00" + }, + { + "name": "nette/neon", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/neon.git", + "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/neon/zipball/cbff32059cbdd8720deccf9e9eace6ee516f02eb", + "reference": "cbff32059cbdd8720deccf9e9eace6ee516f02eb", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-json": "*", + "php": ">=7.0" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🍸 Nette NEON: encodes and decodes NEON file format.", + "homepage": "http://ne-on.org", + "keywords": [ + "export", + "import", + "neon", + "nette", + "yaml" + ], + "time": "2019-02-05T21:30:40+00:00" + }, + { + "name": "nette/php-generator", + "version": "v3.2.1", + "source": { + "type": "git", + "url": "https://github.com/nette/php-generator.git", + "reference": "9de4e093a130f7a1bd175198799ebc0efbac6924" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/php-generator/zipball/9de4e093a130f7a1bd175198799ebc0efbac6924", + "reference": "9de4e093a130f7a1bd175198799ebc0efbac6924", + "shasum": "" + }, + "require": { + "nette/utils": "^2.4.2 || ~3.0.0", + "php": ">=7.1" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🐘 Nette PHP Generator: generates neat PHP code for you. Supports new PHP 7.3 features.", + "homepage": "https://nette.org", + "keywords": [ + "code", + "nette", + "php", + "scaffolding" + ], + "time": "2018-11-27T19:00:14+00:00" + }, + { + "name": "nette/robot-loader", + "version": "v3.1.0", + "source": { + "type": "git", + "url": "https://github.com/nette/robot-loader.git", + "reference": "fc76c70e740b10f091e502b2e393d0be912f38d4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/robot-loader/zipball/fc76c70e740b10f091e502b2e393d0be912f38d4", + "reference": "fc76c70e740b10f091e502b2e393d0be912f38d4", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "nette/finder": "^2.3 || ^3.0", + "nette/utils": "^2.4 || ^3.0", + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "^2.0", + "tracy/tracy": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🍀 Nette RobotLoader: high performance and comfortable autoloader that will search and autoload classes within your application.", + "homepage": "https://nette.org", + "keywords": [ + "autoload", + "class", + "interface", + "nette", + "trait" + ], + "time": "2018-08-13T14:19:06+00:00" + }, + { + "name": "nette/utils", + "version": "v2.5.3", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/17b9f76f2abd0c943adfb556e56f2165460b15ce", + "reference": "17b9f76f2abd0c943adfb556e56f2165460b15ce", + "shasum": "" + }, + "require": { + "php": ">=5.6.0" + }, + "conflict": { + "nette/nette": "<2.2" + }, + "require-dev": { + "nette/tester": "~2.0", + "tracy/tracy": "^2.3" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize() and toAscii()", + "ext-intl": "for script transliteration in Strings::webalize() and toAscii()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.5-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ], + "files": [ + "src/loader.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0", + "GPL-3.0" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "time": "2018-09-18T10:22:16+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.2.1", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/5221f49a608808c1e4d436df32884cbc1b821ac0", + "reference": "5221f49a608808c1e4d436df32884cbc1b821ac0", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.5 || ^7.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "time": "2019-02-16T20:54:15+00:00" + }, + { + "name": "ocramius/package-versions", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Ocramius/PackageVersions.git", + "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Ocramius/PackageVersions/zipball/a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", + "reference": "a4d4b60d0e60da2487bd21a2c6ac089f85570dbb", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0.0", + "php": "^7.1.0" + }, + "require-dev": { + "composer/composer": "^1.6.3", + "doctrine/coding-standard": "^5.0.1", + "ext-zip": "*", + "infection/infection": "^0.7.1", + "phpunit/phpunit": "^7.0.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PackageVersions\\Installer", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "PackageVersions\\": "src/PackageVersions" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com" + } + ], + "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)", + "time": "2019-02-21T12:16:21+00:00" + }, + { + "name": "phar-io/manifest", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "reference": "7761fcacf03b4d4f16e7ccb606d4879ca431fcf4", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "phar-io/version": "^2.0", + "php": "^5.6 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", + "time": "2018-07-08T19:23:20+00:00" + }, + { + "name": "phar-io/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "reference": "45a2ec53a73c70ce41d55cedef9063630abaf1b6", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "time": "2018-07-08T19:19:57+00:00" + }, + { + "name": "phpdocumentor/reflection-common", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2017-09-11T18:02:19+00:00" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "4.3.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/94fd0001232e47129dd3504189fa1c7225010d08", + "reference": "94fd0001232e47129dd3504189fa1c7225010d08", + "shasum": "" + }, + "require": { + "php": "^7.0", + "phpdocumentor/reflection-common": "^1.0.0", + "phpdocumentor/type-resolver": "^0.4.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "doctrine/instantiator": "~1.0.5", + "mockery/mockery": "^1.0", + "phpunit/phpunit": "^6.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2017-11-30T07:14:17+00:00" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.4.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7", + "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7", + "shasum": "" + }, + "require": { + "php": "^5.5 || ^7.0", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2017-07-14T14:27:02+00:00" + }, + { + "name": "phpspec/prophecy", + "version": "1.8.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "reference": "4ba436b55987b4bf311cb7c6ba82aa528aac0a06", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0", + "sebastian/comparator": "^1.1|^2.0|^3.0", + "sebastian/recursion-context": "^1.0|^2.0|^3.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.5|^3.2", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.8.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2018-08-05T17:53:17+00:00" + }, + { + "name": "phpstan/phpdoc-parser", + "version": "0.3.1", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "2cc49f47c69b023eaf05b48e6529389893b13d74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/2cc49f47c69b023eaf05b48e6529389893b13d74", + "reference": "2cc49f47c69b023eaf05b48e6529389893b13d74", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "require-dev": { + "consistence/coding-standard": "^2.0.0", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/phpstan": "^0.10", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^3.3.0", + "symfony/process": "^3.4 || ^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.3-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "time": "2019-01-14T12:26:23+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "0.11.2", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "8e185a74004920419ee97bf9dc62e6a175e8dca5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8e185a74004920419ee97bf9dc62e6a175e8dca5", + "reference": "8e185a74004920419ee97bf9dc62e6a175e8dca5", + "shasum": "" + }, + "require": { + "composer/xdebug-handler": "^1.3.0", + "jean85/pretty-package-versions": "^1.0.3", + "nette/bootstrap": "^2.4 || ^3.0", + "nette/di": "^2.4.7 || ^3.0", + "nette/robot-loader": "^3.0.1", + "nette/utils": "^2.4.5 || ^3.0", + "nikic/php-parser": "^4.0.2", + "php": "~7.1", + "phpstan/phpdoc-parser": "^0.3", + "symfony/console": "~3.2 || ~4.0", + "symfony/finder": "~3.2 || ~4.0" + }, + "conflict": { + "symfony/console": "3.4.16 || 4.1.5" + }, + "require-dev": { + "brianium/paratest": "^2.0", + "consistence/coding-standard": "^3.5", + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", + "ext-intl": "*", + "ext-mysqli": "*", + "ext-soap": "*", + "ext-zip": "*", + "jakub-onderka/php-parallel-lint": "^1.0", + "localheinz/composer-normalize": "^1.1.0", + "phing/phing": "^2.16.0", + "phpstan/phpstan-deprecation-rules": "^0.11", + "phpstan/phpstan-php-parser": "^0.11", + "phpstan/phpstan-phpunit": "^0.11", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0", + "slevomat/coding-standard": "^4.7.2", + "squizlabs/php_codesniffer": "^3.3.2" + }, + "bin": [ + "bin/phpstan" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.11-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": [ + "src/", + "build/PHPStan" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "time": "2019-02-12T14:54:38+00:00" + }, + { + "name": "phpstan/phpstan-phpunit", + "version": "0.11", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-phpunit.git", + "reference": "70c22d44b96a21a4952fc13021a5a63cc83f5c81" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/70c22d44b96a21a4952fc13021a5a63cc83f5c81", + "reference": "70c22d44b96a21a4952fc13021a5a63cc83f5c81", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.0", + "php": "~7.1", + "phpstan/phpdoc-parser": "^0.3", + "phpstan/phpstan": "^0.11" + }, + "conflict": { + "phpunit/phpunit": "<7.0" + }, + "require-dev": { + "consistence/coding-standard": "^3.0.1", + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.4", + "jakub-onderka/php-parallel-lint": "^1.0", + "phing/phing": "^2.16.0", + "phpstan/phpstan-strict-rules": "^0.11", + "phpunit/phpunit": "^7.0", + "satooshi/php-coveralls": "^1.0", + "slevomat/coding-standard": "^4.5.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.11-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPUnit extensions and rules for PHPStan", + "time": "2018-12-22T14:05:04+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "7.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "cfca9c5f7f2694ca0c7749ffb142927d9f05250f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cfca9c5f7f2694ca0c7749ffb142927d9f05250f", + "reference": "cfca9c5f7f2694ca0c7749ffb142927d9f05250f", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-xmlwriter": "*", + "php": "^7.2", + "phpunit/php-file-iterator": "^2.0.2", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-token-stream": "^3.0.1", + "sebastian/code-unit-reverse-lookup": "^1.0.1", + "sebastian/environment": "^4.1", + "sebastian/version": "^2.0.1", + "theseer/tokenizer": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-xdebug": "^2.6.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2019-02-15T13:40:27+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "050bedf145a257b1ff02746c31894800e5122946" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/050bedf145a257b1ff02746c31894800e5122946", + "reference": "050bedf145a257b1ff02746c31894800e5122946", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2018-09-13T20:33:42+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21T13:50:34+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8b389aebe1b8b0578430bda0c7c95a829608e059", + "reference": "8b389aebe1b8b0578430bda0c7c95a829608e059", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2019-02-20T10:12:59+00:00" + }, + { + "name": "phpunit/php-token-stream", + "version": "3.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/c99e3be9d3e85f60646f152f9002d46ed7770d18", + "reference": "c99e3be9d3e85f60646f152f9002d46ed7770d18", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2018-10-30T05:52:18+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "8.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "a7af0201285445c9c73c4bdf869c486e36b41604" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a7af0201285445c9c73c4bdf869c486e36b41604", + "reference": "a7af0201285445c9c73c4bdf869c486e36b41604", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.1", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.7", + "phar-io/manifest": "^1.0.2", + "phar-io/version": "^2.0", + "php": "^7.2", + "phpspec/prophecy": "^1.7", + "phpunit/php-code-coverage": "^7.0", + "phpunit/php-file-iterator": "^2.0.1", + "phpunit/php-text-template": "^1.2.1", + "phpunit/php-timer": "^2.0", + "sebastian/comparator": "^3.0", + "sebastian/diff": "^3.0", + "sebastian/environment": "^4.1", + "sebastian/exporter": "^3.1", + "sebastian/global-state": "^3.0", + "sebastian/object-enumerator": "^3.0.3", + "sebastian/resource-operations": "^2.0", + "sebastian/version": "^2.0.1" + }, + "require-dev": { + "ext-pdo": "*" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*", + "phpunit/php-invoker": "^2.0" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "8.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2019-02-18T09:23:05+00:00" + }, + { + "name": "psr/log", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "Psr/Log/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2018-11-20T15:27:04+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "reference": "4419fcdb5eabb9caa61a27c7a1db532a6b55dd18", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7 || ^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "time": "2017-03-04T06:30:41+00:00" + }, + { + "name": "sebastian/comparator", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "reference": "5de4fc177adf9bce8df98d8d141a7559d7ccf6da", + "shasum": "" + }, + "require": { + "php": "^7.1", + "sebastian/diff": "^3.0", + "sebastian/exporter": "^3.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2018-07-12T15:12:46+00:00" + }, + { + "name": "sebastian/diff", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "reference": "720fcc7e9b5cf384ea68d9d930d480907a0c1a29", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5 || ^8.0", + "symfony/process": "^2 || ^3.3 || ^4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "time": "2019-02-04T06:01:07+00:00" + }, + { + "name": "sebastian/environment", + "version": "4.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/6fda8ce1974b62b14935adc02a9ed38252eca656", + "reference": "6fda8ce1974b62b14935adc02a9ed38252eca656", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "require-dev": { + "phpunit/phpunit": "^7.5" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2019-02-01T05:27:49+00:00" + }, + { + "name": "sebastian/exporter", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/234199f4528de6d12aaa58b612e98f7d36adb937", + "reference": "234199f4528de6d12aaa58b612e98f7d36adb937", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2017-04-03T13:19:02+00:00" + }, + { + "name": "sebastian/global-state", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "reference": "edf8a461cf1d4005f19fb0b6b8b95a9f7fa0adc4", + "shasum": "" + }, + "require": { + "php": "^7.2", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^8.0" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2019-02-01T05:30:01+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "reference": "7cfd9e65d11ffb5af41198476395774d4c8a84c5", + "shasum": "" + }, + "require": { + "php": "^7.0", + "sebastian/object-reflector": "^1.1.1", + "sebastian/recursion-context": "^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "time": "2017-08-03T12:35:26+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "773f97c67f28de00d397be301821b06708fca0be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/773f97c67f28de00d397be301821b06708fca0be", + "reference": "773f97c67f28de00d397be301821b06708fca0be", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "time": "2017-03-29T09:07:27+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "reference": "5b0cd723502bac3b006cbf3dbf7a1e3fcefe4fa8", + "shasum": "" + }, + "require": { + "php": "^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^6.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2017-03-03T06:23:57+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "reference": "4d7a795d35b889bf80a0cc04e08d77cedfa917a9", + "shasum": "" + }, + "require": { + "php": "^7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "time": "2018-10-04T04:07:39+00:00" + }, + { + "name": "sebastian/version", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019", + "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2016-10-03T07:35:21+00:00" + }, + { + "name": "slevomat/coding-standard", + "version": "5.0.0", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "fdab228c1800db9e65a62dde306bfa856d98fcc3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/fdab228c1800db9e65a62dde306bfa856d98fcc3", + "reference": "fdab228c1800db9e65a62dde306bfa856d98fcc3", + "shasum": "" + }, + "require": { + "php": "^7.1", + "phpstan/phpdoc-parser": "^0.3.1", + "squizlabs/php_codesniffer": "^3.4.0" + }, + "require-dev": { + "jakub-onderka/php-parallel-lint": "1.0.0", + "phing/phing": "2.16.1", + "phpstan/phpstan": "0.11.1", + "phpstan/phpstan-phpunit": "0.11", + "phpstan/phpstan-strict-rules": "0.11", + "phpunit/phpunit": "8.0.0" + }, + "type": "phpcodesniffer-standard", + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "time": "2019-02-03T20:31:35+00:00" + }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.4.0", + "source": { + "type": "git", + "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", + "reference": "379deb987e26c7cd103a7b387aea178baec96e48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/379deb987e26c7cd103a7b387aea178baec96e48", + "reference": "379deb987e26c7cd103a7b387aea178baec96e48", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + }, + "bin": [ + "bin/phpcs", + "bin/phpcbf" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "lead" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "http://www.squizlabs.com/php-codesniffer", + "keywords": [ + "phpcs", + "standards" + ], + "time": "2018-12-19T23:57:18+00:00" + }, + { + "name": "symfony/console", + "version": "v4.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4", + "reference": "1f0ad51dfde4da8a6070f06adc58b4e37cbb37a4", + "shasum": "" + }, + "require": { + "php": "^7.1.3", + "symfony/contracts": "^1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/dependency-injection": "<3.4", + "symfony/process": "<3.3" + }, + "provide": { + "psr/log-implementation": "1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/config": "~3.4|~4.0", + "symfony/dependency-injection": "~3.4|~4.0", + "symfony/event-dispatcher": "~3.4|~4.0", + "symfony/lock": "~3.4|~4.0", + "symfony/process": "~3.4|~4.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2019-01-25T14:35:16+00:00" + }, + { + "name": "symfony/contracts", + "version": "v1.0.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/contracts.git", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/contracts/zipball/1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "reference": "1aa7ab2429c3d594dd70689604b5cf7421254cdf", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "require-dev": { + "psr/cache": "^1.0", + "psr/container": "^1.0" + }, + "suggest": { + "psr/cache": "When using the Cache contracts", + "psr/container": "When using the Service contracts", + "symfony/cache-contracts-implementation": "", + "symfony/service-contracts-implementation": "", + "symfony/translation-contracts-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\": "" + }, + "exclude-from-classmap": [ + "**/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A set of abstractions extracted out of the Symfony components", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "time": "2018-12-05T08:06:11+00:00" + }, + { + "name": "symfony/finder", + "version": "v4.2.3", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "ef71816cbb264988bb57fe6a73f610888b9aa70c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/ef71816cbb264988bb57fe6a73f610888b9aa70c", + "reference": "ef71816cbb264988bb57fe6a73f610888b9aa70c", + "shasum": "" + }, + "require": { + "php": "^7.1.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2019-01-16T20:35:37+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19", + "reference": "e3d826245268269cd66f8326bd8bc066687b4a19", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "time": "2018-08-06T14:22:27+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "reference": "cb2f008f3f05af2893a87208fe6a6c4985483f8b", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", + "time": "2017-04-07T12:08:54+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9", + "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0", + "symfony/polyfill-ctype": "^1.8" + }, + "require-dev": { + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2018-12-25T11:19:39+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": { + "php": "^7.3", + "ext-dom": "*", + "ext-xsl": "*" + }, + "platform-overrides": { + "php": "7.3.0" + } +} diff --git a/foo/article-meta/title-group.xml b/foo/article-meta/title-group.xml new file mode 100644 index 0000000..1ba1261 --- /dev/null +++ b/foo/article-meta/title-group.xml @@ -0,0 +1,6 @@ + + + + is required in ." node="//article-meta"?> + + diff --git a/foo/article-title/@xml:lang.xml b/foo/article-title/@xml:lang.xml new file mode 100644 index 0000000..087bfdb --- /dev/null +++ b/foo/article-title/@xml:lang.xml @@ -0,0 +1,5 @@ + + + + +Article Title diff --git a/foo/article-title/inline.xml b/foo/article-title/inline.xml new file mode 100644 index 0000000..f5df766 --- /dev/null +++ b/foo/article-title/inline.xml @@ -0,0 +1,9 @@ + + + + + + Plain + Bold + Italic + diff --git a/foo/front/@id.xml b/foo/front/@id.xml new file mode 100644 index 0000000..a4f372a --- /dev/null +++ b/foo/front/@id.xml @@ -0,0 +1,12 @@ + + + + + + + + + Article Title + + + diff --git a/foo/front/@xml:base.xml b/foo/front/@xml:base.xml new file mode 100644 index 0000000..19e26ae --- /dev/null +++ b/foo/front/@xml:base.xml @@ -0,0 +1,12 @@ + + + + + + + + + Article Title + + + diff --git a/foo/front/ack.xml b/foo/front/ack.xml new file mode 100644 index 0000000..669e399 --- /dev/null +++ b/foo/front/ack.xml @@ -0,0 +1,13 @@ + + + + is ignored." node="//ack"?> + + + + + Article Title + + + + diff --git a/foo/front/bio.xml b/foo/front/bio.xml new file mode 100644 index 0000000..6fd4d28 --- /dev/null +++ b/foo/front/bio.xml @@ -0,0 +1,13 @@ + + + + is ignored." node="//bio"?> + + + + + Article Title + + + + diff --git a/foo/front/def-list.xml b/foo/front/def-list.xml new file mode 100644 index 0000000..f8f5f9e --- /dev/null +++ b/foo/front/def-list.xml @@ -0,0 +1,13 @@ + + + + is ignored." node="//def-list"?> + + + + + Article Title + + + + diff --git a/foo/front/fn-group.xml b/foo/front/fn-group.xml new file mode 100644 index 0000000..339cb9f --- /dev/null +++ b/foo/front/fn-group.xml @@ -0,0 +1,16 @@ + + + + is ignored." node="//fn-group"?> + is ignored." node="//x"?> + + + + + Article Title + + + + + + diff --git a/foo/front/glossary.xml b/foo/front/glossary.xml new file mode 100644 index 0000000..f5432bf --- /dev/null +++ b/foo/front/glossary.xml @@ -0,0 +1,13 @@ + + + + is ignored." node="//glossary"?> + + + + + Article Title + + + + diff --git a/foo/front/journal-meta.xml b/foo/front/journal-meta.xml new file mode 100644 index 0000000..069a484 --- /dev/null +++ b/foo/front/journal-meta.xml @@ -0,0 +1,13 @@ + + + + is ignored." node="//journal-meta"?> + + + + + + Article Title + + + diff --git a/foo/front/list.xml b/foo/front/list.xml new file mode 100644 index 0000000..81a443f --- /dev/null +++ b/foo/front/list.xml @@ -0,0 +1,20 @@ + + + + is ignored." node="//list"?> + is ignored." node="//x"?> + +
+ + + + + Article Title + + + + + + + +
diff --git a/foo/front/notes.xml b/foo/front/notes.xml new file mode 100644 index 0000000..d53938c --- /dev/null +++ b/foo/front/notes.xml @@ -0,0 +1,17 @@ + + + + is ignored." node="//notes"?> + +
+ + + + + Article Title + + + + + +
diff --git a/foo/front/title-group.xml b/foo/front/title-group.xml new file mode 100644 index 0000000..08f204c --- /dev/null +++ b/foo/front/title-group.xml @@ -0,0 +1,15 @@ + + + + +
+ + + + + Article Title + + + + +
diff --git a/foo/title-group/@id.xml b/foo/title-group/@id.xml new file mode 100644 index 0000000..0e3c28f --- /dev/null +++ b/foo/title-group/@id.xml @@ -0,0 +1,16 @@ + + + + + +
+ + + + + Article Title + + + + +
diff --git a/foo/title-group/@xml:base.xml b/foo/title-group/@xml:base.xml new file mode 100644 index 0000000..e99eeb6 --- /dev/null +++ b/foo/title-group/@xml:base.xml @@ -0,0 +1,16 @@ + + + + + +
+ + + + + Article Title + + + + +
diff --git a/foo/title-group/alt-title.xml b/foo/title-group/alt-title.xml new file mode 100644 index 0000000..1a88e30 --- /dev/null +++ b/foo/title-group/alt-title.xml @@ -0,0 +1,17 @@ + + + + is ignored." node="//alt-title"?> + +
+ + + + + Article Title + + + + + +
diff --git a/foo/title-group/article-title.xml b/foo/title-group/article-title.xml new file mode 100644 index 0000000..08f204c --- /dev/null +++ b/foo/title-group/article-title.xml @@ -0,0 +1,15 @@ + + + + +
+ + + + + Article Title + + + + +
diff --git a/foo/title-group/fn-group.xml b/foo/title-group/fn-group.xml new file mode 100644 index 0000000..7b02450 --- /dev/null +++ b/foo/title-group/fn-group.xml @@ -0,0 +1,20 @@ + + + + is ignored." node="//fn-group"?> + is ignored." node="//x"?> + +
+ + + + + Article Title + + + + + + + +
diff --git a/foo/title-group/subtitle.xml b/foo/title-group/subtitle.xml new file mode 100644 index 0000000..5cfafe1 --- /dev/null +++ b/foo/title-group/subtitle.xml @@ -0,0 +1,17 @@ + + + + is ignored." node="//subtitle"?> + +
+ + + + + Article Title + Subtitle + + + + +
diff --git a/foo/title-group/trans-title-group.xml b/foo/title-group/trans-title-group.xml new file mode 100644 index 0000000..1ff08f9 --- /dev/null +++ b/foo/title-group/trans-title-group.xml @@ -0,0 +1,20 @@ + + + + is ignored." node="//trans-title-group"?> + is ignored." node="//trans-title"?> + +
+ + + + + Article Title + + Translated Title + + + + + +
diff --git a/foo/underline/inline.xml b/foo/underline/inline.xml new file mode 100644 index 0000000..835c465 --- /dev/null +++ b/foo/underline/inline.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/underline"?> + + diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..1d6f947 --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,20 @@ + + + + + + + + + + + + + tests/ + + + */tests/* + + + diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 0000000..26ad94f --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,10 @@ +parameters: + ignoreErrors: + - '~expects array|Traversable, \(DOMNodeList&iterable\)|float|string given$~' + level: max + paths: + - tests + +includes: + - vendor/phpstan/phpstan-phpunit/extension.neon + - vendor/phpstan/phpstan-phpunit/rules.neon diff --git a/phpunit.xml.dist b/phpunit.xml.dist new file mode 100644 index 0000000..b48c1ba --- /dev/null +++ b/phpunit.xml.dist @@ -0,0 +1,13 @@ + + + + + + + tests + + + + diff --git a/support.sch b/support.sch new file mode 100644 index 0000000..40f160f --- /dev/null +++ b/support.sch @@ -0,0 +1,25 @@ + + + + + + + + @ is ignored. + + + + + + + + <> is ignored. + + + + + diff --git a/tests/SchemaTest.php b/tests/SchemaTest.php new file mode 100644 index 0000000..5fda33a --- /dev/null +++ b/tests/SchemaTest.php @@ -0,0 +1,184 @@ +expectNotToPerformAssertions(); + + try { + $validator->validate($input); + } catch (ValidationFailed $e) { + $this->fail( + "Document is not considered valid:\n". + implode( + PHP_EOL, + array_map( + function (Failure $failure) : string { + if (!$failure->getNode() instanceof DOMNode) { + if (!is_int($failure->getLine())) { + return $failure->getMessage(); + } + + return sprintf('%s (line %s)', $failure->getMessage(), $failure->getLine()); + } + + return sprintf('%s (%s)', $failure->getMessage(), $failure->getNode()->getNodePath()); + }, + $e->getFailures() + ) + ) + ); + } + + return; + } + + try { + $validator->validate($input); + $this->fail('Document is considered valid when it is not'); + } catch (ValidationFailed $e) { + $this->assertEquals($expected, $e->getFailures()); + } + } + + public function fileProvider() : iterable + { + $files = Finder::create()->files() + ->name('*.xml') + ->in(__DIR__.'/cases'); + + return $this->extractSchemas($files); + } + + private function extractSchemas(Finder $files) : iterable + { + foreach ($files as $file) { + $input = FluentDOM::load($file->getPathname(), 'text/xml', [Options::ALLOW_FILE => true]); + $input->registerNamespace('jats', 'http://jats.nlm.nih.gov'); + + yield $file->getRelativePathname() => [ + $input, + $this->findValidator($input, $file), + $this->findExpectedFailures($input, $file), + ]; + } + } + + private function findValidator(Document $dom, SplFileInfo $file) : XmlValidator + { + $validators = map( + $dom('/processing-instruction("xml-model")'), + function (ProcessingInstruction $instruction) use ($file) : XmlValidator { + $parsed = $this->parseProcessingInstruction($instruction, $file); + $schema = "{$file->getPath()}/{$parsed['href']}"; + if (!is_readable($schema)) { + throw new LogicException("Failed to read schema {$schema} in {$file->getRelativePathname()}"); + } + + switch ($parsed['schematypens']) { + case 'http://relaxng.org/ns/structure/1.0': + return new RelaxNgValidator($schema); + case 'http://www.w3.org/2001/XMLSchema': + return new XmlSchemaValidator($schema); + case 'http://purl.oclc.org/dsdl/schematron': + return new SchematronValidator($schema); + default: + throw new LogicException( + "Unknown schematypens {$parsed['schematypens']} in {$file->getRelativePathname()}" + ); + } + } + ); + + return 1 === count($validators) ? $validators[0] : new CompositeValidator(...$validators); + } + + private function parseProcessingInstruction(ProcessingInstruction $instruction, SplFileInfo $file) : array + { + $valid = preg_match_all( + '~([a-z]+)="(.*?)(?nodeValue, + $matches, + PREG_SET_ORDER + ); + + if (!$valid) { + throw new LogicException("Failed to parse processing instruction in {$file->getRelativePathname()}"); + } + + return array_reduce( + $matches, + function (array $carry, array $parts) { + $carry[$parts[1]] = str_replace('\"', '"', $parts[2]); + + return $carry; + }, + [] + ); + } + + private function findExpectedFailures(Document $dom, SplFileInfo $file) : array + { + return map( + $dom('/processing-instruction("expected-error")'), + function (ProcessingInstruction $instruction) use ($dom, $file) : Failure { + $parsed = $this->parseProcessingInstruction($instruction, $file); + + if (isset($parsed['node'])) { + $nodes = $dom->xpath()->evaluate($parsed['node'], null, true); + if (!$nodes instanceof DOMNodeList || !$node = $nodes->item(0)) { + throw new LogicException( + "Failed to match {$parsed['node']} in {$file->getRelativePathname()}" + ); + } + } + + return new Failure( + $parsed['message'], + isset($parsed['line']) ? (int) $parsed['line'] : null, + $node ?? null + ); + } + ); + } +} diff --git a/tests/cases/abbrev-journal-title.xml b/tests/cases/abbrev-journal-title.xml new file mode 100644 index 0000000..7c00216 --- /dev/null +++ b/tests/cases/abbrev-journal-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/abbrev-journal-title"?> + + \ No newline at end of file diff --git a/tests/cases/abbrev.xml b/tests/cases/abbrev.xml new file mode 100644 index 0000000..7f2d96e --- /dev/null +++ b/tests/cases/abbrev.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/abbrev"?> + + \ No newline at end of file diff --git a/tests/cases/abstract.xml b/tests/cases/abstract.xml new file mode 100644 index 0000000..333f952 --- /dev/null +++ b/tests/cases/abstract.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/abstract"?> + + \ No newline at end of file diff --git a/tests/cases/access-date.xml b/tests/cases/access-date.xml new file mode 100644 index 0000000..7e50f52 --- /dev/null +++ b/tests/cases/access-date.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/access-date"?> + + \ No newline at end of file diff --git a/tests/cases/ack.xml b/tests/cases/ack.xml new file mode 100644 index 0000000..c84e4ab --- /dev/null +++ b/tests/cases/ack.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/ack"?> + + \ No newline at end of file diff --git a/tests/cases/addr-line.xml b/tests/cases/addr-line.xml new file mode 100644 index 0000000..e2e2d3f --- /dev/null +++ b/tests/cases/addr-line.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/addr-line"?> + + \ No newline at end of file diff --git a/tests/cases/address.xml b/tests/cases/address.xml new file mode 100644 index 0000000..795de22 --- /dev/null +++ b/tests/cases/address.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/address"?> + +
\ No newline at end of file diff --git a/tests/cases/aff-alternatives.xml b/tests/cases/aff-alternatives.xml new file mode 100644 index 0000000..d7c150e --- /dev/null +++ b/tests/cases/aff-alternatives.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/aff-alternatives"?> + is ignored." node="//aff"?> + + + + diff --git a/tests/cases/aff.xml b/tests/cases/aff.xml new file mode 100644 index 0000000..8aedaee --- /dev/null +++ b/tests/cases/aff.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/aff"?> + + \ No newline at end of file diff --git a/tests/cases/ali:free_to_read.xml b/tests/cases/ali:free_to_read.xml new file mode 100644 index 0000000..74a3cb0 --- /dev/null +++ b/tests/cases/ali:free_to_read.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/ali:free_to_read"?> + + \ No newline at end of file diff --git a/tests/cases/ali:license_ref.xml b/tests/cases/ali:license_ref.xml new file mode 100644 index 0000000..82758fa --- /dev/null +++ b/tests/cases/ali:license_ref.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/ali:license_ref"?> + + \ No newline at end of file diff --git a/tests/cases/alt-text.xml b/tests/cases/alt-text.xml new file mode 100644 index 0000000..3a35826 --- /dev/null +++ b/tests/cases/alt-text.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/alt-text"?> + + \ No newline at end of file diff --git a/tests/cases/alt-title.xml b/tests/cases/alt-title.xml new file mode 100644 index 0000000..446ed58 --- /dev/null +++ b/tests/cases/alt-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/alt-title"?> + + \ No newline at end of file diff --git a/tests/cases/alternatives.xml b/tests/cases/alternatives.xml new file mode 100644 index 0000000..9a97e97 --- /dev/null +++ b/tests/cases/alternatives.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/alternatives"?> + is ignored." node="//array"?> + + + + diff --git a/tests/cases/annotation.xml b/tests/cases/annotation.xml new file mode 100644 index 0000000..19755e6 --- /dev/null +++ b/tests/cases/annotation.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/annotation"?> + is ignored." node="//p"?> + + +

+ diff --git a/tests/cases/anonymous.xml b/tests/cases/anonymous.xml new file mode 100644 index 0000000..2d447b6 --- /dev/null +++ b/tests/cases/anonymous.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/anonymous"?> + + \ No newline at end of file diff --git a/tests/cases/app-group.xml b/tests/cases/app-group.xml new file mode 100644 index 0000000..e633775 --- /dev/null +++ b/tests/cases/app-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/app-group"?> + + \ No newline at end of file diff --git a/tests/cases/app.xml b/tests/cases/app.xml new file mode 100644 index 0000000..b188e27 --- /dev/null +++ b/tests/cases/app.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/app"?> + + \ No newline at end of file diff --git a/tests/cases/array.xml b/tests/cases/array.xml new file mode 100644 index 0000000..d288e9d --- /dev/null +++ b/tests/cases/array.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/array"?> + + \ No newline at end of file diff --git a/tests/cases/article-categories.xml b/tests/cases/article-categories.xml new file mode 100644 index 0000000..aba36bc --- /dev/null +++ b/tests/cases/article-categories.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/article-categories"?> + + \ No newline at end of file diff --git a/tests/cases/article-id.xml b/tests/cases/article-id.xml new file mode 100644 index 0000000..e8fb835 --- /dev/null +++ b/tests/cases/article-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/article-id"?> + + \ No newline at end of file diff --git a/tests/cases/article-meta.xml b/tests/cases/article-meta.xml new file mode 100644 index 0000000..dfcdeff --- /dev/null +++ b/tests/cases/article-meta.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/article-meta"?> + + \ No newline at end of file diff --git a/tests/cases/article-title.xml b/tests/cases/article-title.xml new file mode 100644 index 0000000..f8b7e83 --- /dev/null +++ b/tests/cases/article-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/article-title"?> + + \ No newline at end of file diff --git a/tests/cases/article/@article-type.xml b/tests/cases/article/@article-type.xml new file mode 100644 index 0000000..aea5497 --- /dev/null +++ b/tests/cases/article/@article-type.xml @@ -0,0 +1,12 @@ + + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +

+ + + +
diff --git a/tests/cases/article/@dtd-version.xml b/tests/cases/article/@dtd-version.xml new file mode 100644 index 0000000..92d5a12 --- /dev/null +++ b/tests/cases/article/@dtd-version.xml @@ -0,0 +1,12 @@ + + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +
+ + + +
diff --git a/tests/cases/article/@id.xml b/tests/cases/article/@id.xml new file mode 100644 index 0000000..8a70997 --- /dev/null +++ b/tests/cases/article/@id.xml @@ -0,0 +1,12 @@ + + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +
+ + + +
diff --git a/tests/cases/article/@specific-use.xml b/tests/cases/article/@specific-use.xml new file mode 100644 index 0000000..9cc8309 --- /dev/null +++ b/tests/cases/article/@specific-use.xml @@ -0,0 +1,12 @@ + + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +
+ + + +
diff --git a/tests/cases/article/@xml:base.xml b/tests/cases/article/@xml:base.xml new file mode 100644 index 0000000..ebffb41 --- /dev/null +++ b/tests/cases/article/@xml:base.xml @@ -0,0 +1,12 @@ + + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +
+ + + +
diff --git a/tests/cases/article/@xml:lang.xml b/tests/cases/article/@xml:lang.xml new file mode 100644 index 0000000..f10a193 --- /dev/null +++ b/tests/cases/article/@xml:lang.xml @@ -0,0 +1,11 @@ + + + + is ignored." node="//front"?> + is ignored." node="//article-meta"?> + +
+ + + +
diff --git a/tests/cases/attrib.xml b/tests/cases/attrib.xml new file mode 100644 index 0000000..fea4781 --- /dev/null +++ b/tests/cases/attrib.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/attrib"?> + + \ No newline at end of file diff --git a/tests/cases/author-comment.xml b/tests/cases/author-comment.xml new file mode 100644 index 0000000..8c07f66 --- /dev/null +++ b/tests/cases/author-comment.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/author-comment"?> + is ignored." node="//p"?> + + +

+ diff --git a/tests/cases/author-notes.xml b/tests/cases/author-notes.xml new file mode 100644 index 0000000..cf4ae32 --- /dev/null +++ b/tests/cases/author-notes.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/author-notes"?> + is ignored." node="//x"?> + + + + diff --git a/tests/cases/award-group.xml b/tests/cases/award-group.xml new file mode 100644 index 0000000..60232bd --- /dev/null +++ b/tests/cases/award-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/award-group"?> + + \ No newline at end of file diff --git a/tests/cases/award-id.xml b/tests/cases/award-id.xml new file mode 100644 index 0000000..46c02bb --- /dev/null +++ b/tests/cases/award-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/award-id"?> + + \ No newline at end of file diff --git a/tests/cases/back.xml b/tests/cases/back.xml new file mode 100644 index 0000000..c141d30 --- /dev/null +++ b/tests/cases/back.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/back"?> + + \ No newline at end of file diff --git a/tests/cases/bio.xml b/tests/cases/bio.xml new file mode 100644 index 0000000..52cbc54 --- /dev/null +++ b/tests/cases/bio.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/bio"?> + + \ No newline at end of file diff --git a/tests/cases/body.xml b/tests/cases/body.xml new file mode 100644 index 0000000..64541be --- /dev/null +++ b/tests/cases/body.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/body"?> + + \ No newline at end of file diff --git a/tests/cases/bold.xml b/tests/cases/bold.xml new file mode 100644 index 0000000..2018601 --- /dev/null +++ b/tests/cases/bold.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/bold"?> + + \ No newline at end of file diff --git a/tests/cases/boxed-text.xml b/tests/cases/boxed-text.xml new file mode 100644 index 0000000..b37e36c --- /dev/null +++ b/tests/cases/boxed-text.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/boxed-text"?> + + \ No newline at end of file diff --git a/tests/cases/break.xml b/tests/cases/break.xml new file mode 100644 index 0000000..e119f22 --- /dev/null +++ b/tests/cases/break.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/break"?> + + \ No newline at end of file diff --git a/tests/cases/caption.xml b/tests/cases/caption.xml new file mode 100644 index 0000000..28fbf7f --- /dev/null +++ b/tests/cases/caption.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/caption"?> + + \ No newline at end of file diff --git a/tests/cases/chapter-title.xml b/tests/cases/chapter-title.xml new file mode 100644 index 0000000..348e4c5 --- /dev/null +++ b/tests/cases/chapter-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/chapter-title"?> + + \ No newline at end of file diff --git a/tests/cases/chem-struct-wrap.xml b/tests/cases/chem-struct-wrap.xml new file mode 100644 index 0000000..fac982b --- /dev/null +++ b/tests/cases/chem-struct-wrap.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/chem-struct-wrap"?> + is ignored." node="//textual-form"?> + + + + diff --git a/tests/cases/chem-struct.xml b/tests/cases/chem-struct.xml new file mode 100644 index 0000000..1b7bbd7 --- /dev/null +++ b/tests/cases/chem-struct.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/chem-struct"?> + + \ No newline at end of file diff --git a/tests/cases/citation-alternatives.xml b/tests/cases/citation-alternatives.xml new file mode 100644 index 0000000..42f7545 --- /dev/null +++ b/tests/cases/citation-alternatives.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/citation-alternatives"?> + is ignored." node="//mixed-citation"?> + + + + diff --git a/tests/cases/city.xml b/tests/cases/city.xml new file mode 100644 index 0000000..0b3d1d6 --- /dev/null +++ b/tests/cases/city.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/city"?> + + \ No newline at end of file diff --git a/tests/cases/code.xml b/tests/cases/code.xml new file mode 100644 index 0000000..2931b93 --- /dev/null +++ b/tests/cases/code.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/code"?> + + \ No newline at end of file diff --git a/tests/cases/col.xml b/tests/cases/col.xml new file mode 100644 index 0000000..ec9ff31 --- /dev/null +++ b/tests/cases/col.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/col"?> + + \ No newline at end of file diff --git a/tests/cases/colgroup.xml b/tests/cases/colgroup.xml new file mode 100644 index 0000000..539c441 --- /dev/null +++ b/tests/cases/colgroup.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/colgroup"?> + + \ No newline at end of file diff --git a/tests/cases/collab-alternatives.xml b/tests/cases/collab-alternatives.xml new file mode 100644 index 0000000..34cddbb --- /dev/null +++ b/tests/cases/collab-alternatives.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/collab-alternatives"?> + is ignored." node="//collab"?> + + + + diff --git a/tests/cases/collab.xml b/tests/cases/collab.xml new file mode 100644 index 0000000..6b34040 --- /dev/null +++ b/tests/cases/collab.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/collab"?> + + \ No newline at end of file diff --git a/tests/cases/comment.xml b/tests/cases/comment.xml new file mode 100644 index 0000000..999ead4 --- /dev/null +++ b/tests/cases/comment.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/comment"?> + + \ No newline at end of file diff --git a/tests/cases/compound-kwd-part.xml b/tests/cases/compound-kwd-part.xml new file mode 100644 index 0000000..ee40017 --- /dev/null +++ b/tests/cases/compound-kwd-part.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/compound-kwd-part"?> + + \ No newline at end of file diff --git a/tests/cases/compound-kwd.xml b/tests/cases/compound-kwd.xml new file mode 100644 index 0000000..20f9936 --- /dev/null +++ b/tests/cases/compound-kwd.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/compound-kwd"?> + is ignored." node="//compound-kwd-part"?> + + + + diff --git a/tests/cases/compound-subject-part.xml b/tests/cases/compound-subject-part.xml new file mode 100644 index 0000000..21d1a5d --- /dev/null +++ b/tests/cases/compound-subject-part.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/compound-subject-part"?> + + \ No newline at end of file diff --git a/tests/cases/compound-subject.xml b/tests/cases/compound-subject.xml new file mode 100644 index 0000000..2438480 --- /dev/null +++ b/tests/cases/compound-subject.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/compound-subject"?> + is ignored." node="//compound-subject-part"?> + + + + diff --git a/tests/cases/conf-acronym.xml b/tests/cases/conf-acronym.xml new file mode 100644 index 0000000..a2ba2d5 --- /dev/null +++ b/tests/cases/conf-acronym.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-acronym"?> + + \ No newline at end of file diff --git a/tests/cases/conf-date.xml b/tests/cases/conf-date.xml new file mode 100644 index 0000000..7e0e76c --- /dev/null +++ b/tests/cases/conf-date.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-date"?> + + \ No newline at end of file diff --git a/tests/cases/conf-loc.xml b/tests/cases/conf-loc.xml new file mode 100644 index 0000000..0f16624 --- /dev/null +++ b/tests/cases/conf-loc.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-loc"?> + + \ No newline at end of file diff --git a/tests/cases/conf-name.xml b/tests/cases/conf-name.xml new file mode 100644 index 0000000..a972dab --- /dev/null +++ b/tests/cases/conf-name.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-name"?> + + \ No newline at end of file diff --git a/tests/cases/conf-num.xml b/tests/cases/conf-num.xml new file mode 100644 index 0000000..4abc51f --- /dev/null +++ b/tests/cases/conf-num.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-num"?> + + \ No newline at end of file diff --git a/tests/cases/conf-sponsor.xml b/tests/cases/conf-sponsor.xml new file mode 100644 index 0000000..3dd2933 --- /dev/null +++ b/tests/cases/conf-sponsor.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-sponsor"?> + + \ No newline at end of file diff --git a/tests/cases/conf-theme.xml b/tests/cases/conf-theme.xml new file mode 100644 index 0000000..da6acd1 --- /dev/null +++ b/tests/cases/conf-theme.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conf-theme"?> + + \ No newline at end of file diff --git a/tests/cases/conference.xml b/tests/cases/conference.xml new file mode 100644 index 0000000..60c4b1b --- /dev/null +++ b/tests/cases/conference.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/conference"?> + + \ No newline at end of file diff --git a/tests/cases/contrib-group.xml b/tests/cases/contrib-group.xml new file mode 100644 index 0000000..25a5bda --- /dev/null +++ b/tests/cases/contrib-group.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/contrib-group"?> + is ignored." node="//x"?> + + + + diff --git a/tests/cases/contrib-id.xml b/tests/cases/contrib-id.xml new file mode 100644 index 0000000..2858bca --- /dev/null +++ b/tests/cases/contrib-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/contrib-id"?> + + \ No newline at end of file diff --git a/tests/cases/contrib.xml b/tests/cases/contrib.xml new file mode 100644 index 0000000..9aca343 --- /dev/null +++ b/tests/cases/contrib.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/contrib"?> + + \ No newline at end of file diff --git a/tests/cases/copyright-holder.xml b/tests/cases/copyright-holder.xml new file mode 100644 index 0000000..9134b57 --- /dev/null +++ b/tests/cases/copyright-holder.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/copyright-holder"?> + + \ No newline at end of file diff --git a/tests/cases/copyright-statement.xml b/tests/cases/copyright-statement.xml new file mode 100644 index 0000000..47d4abc --- /dev/null +++ b/tests/cases/copyright-statement.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/copyright-statement"?> + + \ No newline at end of file diff --git a/tests/cases/copyright-year.xml b/tests/cases/copyright-year.xml new file mode 100644 index 0000000..91acdd2 --- /dev/null +++ b/tests/cases/copyright-year.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/copyright-year"?> + + \ No newline at end of file diff --git a/tests/cases/corresp.xml b/tests/cases/corresp.xml new file mode 100644 index 0000000..030305c --- /dev/null +++ b/tests/cases/corresp.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/corresp"?> + + \ No newline at end of file diff --git a/tests/cases/count.xml b/tests/cases/count.xml new file mode 100644 index 0000000..c35d0b8 --- /dev/null +++ b/tests/cases/count.xml @@ -0,0 +1,8 @@ + + + + + + is ignored." node="/count"?> + + diff --git a/tests/cases/country.xml b/tests/cases/country.xml new file mode 100644 index 0000000..a53360e --- /dev/null +++ b/tests/cases/country.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/country"?> + + \ No newline at end of file diff --git a/tests/cases/counts.xml b/tests/cases/counts.xml new file mode 100644 index 0000000..3b5611b --- /dev/null +++ b/tests/cases/counts.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/counts"?> + + \ No newline at end of file diff --git a/tests/cases/custom-meta-group.xml b/tests/cases/custom-meta-group.xml new file mode 100644 index 0000000..75b1587 --- /dev/null +++ b/tests/cases/custom-meta-group.xml @@ -0,0 +1,14 @@ + + + + is ignored." node="/custom-meta-group"?> + is ignored." node="//custom-meta"?> + is ignored." node="//meta-name"?> + is ignored." node="//meta-value"?> + + + + + + + diff --git a/tests/cases/custom-meta.xml b/tests/cases/custom-meta.xml new file mode 100644 index 0000000..de94aa0 --- /dev/null +++ b/tests/cases/custom-meta.xml @@ -0,0 +1,11 @@ + + + + is ignored." node="/custom-meta"?> + is ignored." node="//meta-name"?> + is ignored." node="//meta-value"?> + + + + + diff --git a/tests/cases/data-title.xml b/tests/cases/data-title.xml new file mode 100644 index 0000000..1e8eaee --- /dev/null +++ b/tests/cases/data-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/data-title"?> + + \ No newline at end of file diff --git a/tests/cases/date-in-citation.xml b/tests/cases/date-in-citation.xml new file mode 100644 index 0000000..9eb3ce2 --- /dev/null +++ b/tests/cases/date-in-citation.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/date-in-citation"?> + + \ No newline at end of file diff --git a/tests/cases/date.xml b/tests/cases/date.xml new file mode 100644 index 0000000..f822672 --- /dev/null +++ b/tests/cases/date.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/date"?> + + \ No newline at end of file diff --git a/tests/cases/day.xml b/tests/cases/day.xml new file mode 100644 index 0000000..bbfd5fe --- /dev/null +++ b/tests/cases/day.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/day"?> + + \ No newline at end of file diff --git a/tests/cases/def-head.xml b/tests/cases/def-head.xml new file mode 100644 index 0000000..2e9bcea --- /dev/null +++ b/tests/cases/def-head.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/def-head"?> + + \ No newline at end of file diff --git a/tests/cases/def-item.xml b/tests/cases/def-item.xml new file mode 100644 index 0000000..1897055 --- /dev/null +++ b/tests/cases/def-item.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/def-item"?> + + \ No newline at end of file diff --git a/tests/cases/def-list.xml b/tests/cases/def-list.xml new file mode 100644 index 0000000..745790f --- /dev/null +++ b/tests/cases/def-list.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/def-list"?> + + \ No newline at end of file diff --git a/tests/cases/def.xml b/tests/cases/def.xml new file mode 100644 index 0000000..fb4e39e --- /dev/null +++ b/tests/cases/def.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/def"?> + is ignored." node="//p"?> + + +

+ diff --git a/tests/cases/degrees.xml b/tests/cases/degrees.xml new file mode 100644 index 0000000..7f71c40 --- /dev/null +++ b/tests/cases/degrees.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/degrees"?> + + \ No newline at end of file diff --git a/tests/cases/disp-formula-group.xml b/tests/cases/disp-formula-group.xml new file mode 100644 index 0000000..682ef9e --- /dev/null +++ b/tests/cases/disp-formula-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/disp-formula-group"?> + + \ No newline at end of file diff --git a/tests/cases/disp-formula.xml b/tests/cases/disp-formula.xml new file mode 100644 index 0000000..718fc2b --- /dev/null +++ b/tests/cases/disp-formula.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/disp-formula"?> + + \ No newline at end of file diff --git a/tests/cases/disp-quote.xml b/tests/cases/disp-quote.xml new file mode 100644 index 0000000..d3fcb56 --- /dev/null +++ b/tests/cases/disp-quote.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/disp-quote"?> + + \ No newline at end of file diff --git a/tests/cases/edition.xml b/tests/cases/edition.xml new file mode 100644 index 0000000..068807f --- /dev/null +++ b/tests/cases/edition.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/edition"?> + + \ No newline at end of file diff --git a/tests/cases/element-citation.xml b/tests/cases/element-citation.xml new file mode 100644 index 0000000..9d113ce --- /dev/null +++ b/tests/cases/element-citation.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/element-citation"?> + is ignored." node="//x"?> + + + + diff --git a/tests/cases/elocation-id.xml b/tests/cases/elocation-id.xml new file mode 100644 index 0000000..e7f398f --- /dev/null +++ b/tests/cases/elocation-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/elocation-id"?> + + \ No newline at end of file diff --git a/tests/cases/email.xml b/tests/cases/email.xml new file mode 100644 index 0000000..11a73a8 --- /dev/null +++ b/tests/cases/email.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/email"?> + + \ No newline at end of file diff --git a/tests/cases/equation-count.xml b/tests/cases/equation-count.xml new file mode 100644 index 0000000..7fd4bef --- /dev/null +++ b/tests/cases/equation-count.xml @@ -0,0 +1,7 @@ + + + + + is ignored." node="/equation-count"?> + + diff --git a/tests/cases/era.xml b/tests/cases/era.xml new file mode 100644 index 0000000..329c3f7 --- /dev/null +++ b/tests/cases/era.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/era"?> + + \ No newline at end of file diff --git a/tests/cases/etal.xml b/tests/cases/etal.xml new file mode 100644 index 0000000..983040b --- /dev/null +++ b/tests/cases/etal.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/etal"?> + + \ No newline at end of file diff --git a/tests/cases/ext-link.xml b/tests/cases/ext-link.xml new file mode 100644 index 0000000..4b936ce --- /dev/null +++ b/tests/cases/ext-link.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/ext-link"?> + + \ No newline at end of file diff --git a/tests/cases/fax.xml b/tests/cases/fax.xml new file mode 100644 index 0000000..1d96dcb --- /dev/null +++ b/tests/cases/fax.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/fax"?> + + \ No newline at end of file diff --git a/tests/cases/fig-count.xml b/tests/cases/fig-count.xml new file mode 100644 index 0000000..f33f3bb --- /dev/null +++ b/tests/cases/fig-count.xml @@ -0,0 +1,7 @@ + + + + + is ignored." node="/fig-count"?> + + diff --git a/tests/cases/fig-group.xml b/tests/cases/fig-group.xml new file mode 100644 index 0000000..0afd8e1 --- /dev/null +++ b/tests/cases/fig-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/fig-group"?> + + \ No newline at end of file diff --git a/tests/cases/fig.xml b/tests/cases/fig.xml new file mode 100644 index 0000000..76a130c --- /dev/null +++ b/tests/cases/fig.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/fig"?> + + \ No newline at end of file diff --git a/tests/cases/fixed-case.xml b/tests/cases/fixed-case.xml new file mode 100644 index 0000000..6aeeaad --- /dev/null +++ b/tests/cases/fixed-case.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/fixed-case"?> + + \ No newline at end of file diff --git a/tests/cases/floats-group.xml b/tests/cases/floats-group.xml new file mode 100644 index 0000000..ebcdccf --- /dev/null +++ b/tests/cases/floats-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/floats-group"?> + + \ No newline at end of file diff --git a/tests/cases/fn-group.xml b/tests/cases/fn-group.xml new file mode 100644 index 0000000..4ac9520 --- /dev/null +++ b/tests/cases/fn-group.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/fn-group"?> + is ignored." node="//x"?> + + + + diff --git a/tests/cases/fn.xml b/tests/cases/fn.xml new file mode 100644 index 0000000..2f41288 --- /dev/null +++ b/tests/cases/fn.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/fn"?> + is ignored." node="//p"?> + + +

+ diff --git a/tests/cases/fpage.xml b/tests/cases/fpage.xml new file mode 100644 index 0000000..abe1c50 --- /dev/null +++ b/tests/cases/fpage.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/fpage"?> + + \ No newline at end of file diff --git a/tests/cases/front-stub.xml b/tests/cases/front-stub.xml new file mode 100644 index 0000000..27b54f9 --- /dev/null +++ b/tests/cases/front-stub.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/front-stub"?> + + \ No newline at end of file diff --git a/tests/cases/front.xml b/tests/cases/front.xml new file mode 100644 index 0000000..03de1f7 --- /dev/null +++ b/tests/cases/front.xml @@ -0,0 +1,9 @@ + + + + is ignored." node="/front"?> + is ignored." node="//article-meta"?> + + + + diff --git a/tests/cases/funding-group.xml b/tests/cases/funding-group.xml new file mode 100644 index 0000000..5357bd3 --- /dev/null +++ b/tests/cases/funding-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/funding-group"?> + + \ No newline at end of file diff --git a/tests/cases/funding-source.xml b/tests/cases/funding-source.xml new file mode 100644 index 0000000..9587485 --- /dev/null +++ b/tests/cases/funding-source.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/funding-source"?> + + \ No newline at end of file diff --git a/tests/cases/funding-statement.xml b/tests/cases/funding-statement.xml new file mode 100644 index 0000000..614cdae --- /dev/null +++ b/tests/cases/funding-statement.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/funding-statement"?> + + \ No newline at end of file diff --git a/tests/cases/given-names.xml b/tests/cases/given-names.xml new file mode 100644 index 0000000..d7faa6c --- /dev/null +++ b/tests/cases/given-names.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/given-names"?> + + \ No newline at end of file diff --git a/tests/cases/glossary.xml b/tests/cases/glossary.xml new file mode 100644 index 0000000..4b7e8f6 --- /dev/null +++ b/tests/cases/glossary.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/glossary"?> + + \ No newline at end of file diff --git a/tests/cases/glyph-data.xml b/tests/cases/glyph-data.xml new file mode 100644 index 0000000..ee75a6b --- /dev/null +++ b/tests/cases/glyph-data.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/glyph-data"?> + + \ No newline at end of file diff --git a/tests/cases/glyph-ref.xml b/tests/cases/glyph-ref.xml new file mode 100644 index 0000000..21e731f --- /dev/null +++ b/tests/cases/glyph-ref.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/glyph-ref"?> + + \ No newline at end of file diff --git a/tests/cases/gov.xml b/tests/cases/gov.xml new file mode 100644 index 0000000..c3405a3 --- /dev/null +++ b/tests/cases/gov.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/gov"?> + + \ No newline at end of file diff --git a/tests/cases/graphic.xml b/tests/cases/graphic.xml new file mode 100644 index 0000000..bc8b397 --- /dev/null +++ b/tests/cases/graphic.xml @@ -0,0 +1,7 @@ + + + + + is ignored." node="/graphic"?> + + diff --git a/tests/cases/history.xml b/tests/cases/history.xml new file mode 100644 index 0000000..d898bca --- /dev/null +++ b/tests/cases/history.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/history"?> + + \ No newline at end of file diff --git a/tests/cases/hr.xml b/tests/cases/hr.xml new file mode 100644 index 0000000..5db1da0 --- /dev/null +++ b/tests/cases/hr.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/hr"?> + +


\ No newline at end of file diff --git a/tests/cases/inline-formula.xml b/tests/cases/inline-formula.xml new file mode 100644 index 0000000..db070b7 --- /dev/null +++ b/tests/cases/inline-formula.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/inline-formula"?> + + \ No newline at end of file diff --git a/tests/cases/inline-graphic.xml b/tests/cases/inline-graphic.xml new file mode 100644 index 0000000..5d077a5 --- /dev/null +++ b/tests/cases/inline-graphic.xml @@ -0,0 +1,7 @@ + + + + + is ignored." node="/inline-graphic"?> + + diff --git a/tests/cases/inline-supplementary-material.xml b/tests/cases/inline-supplementary-material.xml new file mode 100644 index 0000000..ebf857f --- /dev/null +++ b/tests/cases/inline-supplementary-material.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/inline-supplementary-material"?> + + \ No newline at end of file diff --git a/tests/cases/institution-id.xml b/tests/cases/institution-id.xml new file mode 100644 index 0000000..5af796e --- /dev/null +++ b/tests/cases/institution-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/institution-id"?> + + \ No newline at end of file diff --git a/tests/cases/institution-wrap.xml b/tests/cases/institution-wrap.xml new file mode 100644 index 0000000..1fe7de8 --- /dev/null +++ b/tests/cases/institution-wrap.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/institution-wrap"?> + + \ No newline at end of file diff --git a/tests/cases/institution.xml b/tests/cases/institution.xml new file mode 100644 index 0000000..8f6a52c --- /dev/null +++ b/tests/cases/institution.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/institution"?> + + \ No newline at end of file diff --git a/tests/cases/isbn.xml b/tests/cases/isbn.xml new file mode 100644 index 0000000..683a5a9 --- /dev/null +++ b/tests/cases/isbn.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/isbn"?> + + \ No newline at end of file diff --git a/tests/cases/issn-l.xml b/tests/cases/issn-l.xml new file mode 100644 index 0000000..ade4ea3 --- /dev/null +++ b/tests/cases/issn-l.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issn-l"?> + + \ No newline at end of file diff --git a/tests/cases/issn.xml b/tests/cases/issn.xml new file mode 100644 index 0000000..ac5c44b --- /dev/null +++ b/tests/cases/issn.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issn"?> + + \ No newline at end of file diff --git a/tests/cases/issue-id.xml b/tests/cases/issue-id.xml new file mode 100644 index 0000000..4554de1 --- /dev/null +++ b/tests/cases/issue-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issue-id"?> + + \ No newline at end of file diff --git a/tests/cases/issue-part.xml b/tests/cases/issue-part.xml new file mode 100644 index 0000000..be4cfee --- /dev/null +++ b/tests/cases/issue-part.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issue-part"?> + + \ No newline at end of file diff --git a/tests/cases/issue-sponsor.xml b/tests/cases/issue-sponsor.xml new file mode 100644 index 0000000..ffcc121 --- /dev/null +++ b/tests/cases/issue-sponsor.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issue-sponsor"?> + + \ No newline at end of file diff --git a/tests/cases/issue-title.xml b/tests/cases/issue-title.xml new file mode 100644 index 0000000..44c889d --- /dev/null +++ b/tests/cases/issue-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issue-title"?> + + \ No newline at end of file diff --git a/tests/cases/issue.xml b/tests/cases/issue.xml new file mode 100644 index 0000000..b3545ff --- /dev/null +++ b/tests/cases/issue.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/issue"?> + + \ No newline at end of file diff --git a/tests/cases/italic.xml b/tests/cases/italic.xml new file mode 100644 index 0000000..38c6658 --- /dev/null +++ b/tests/cases/italic.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/italic"?> + + \ No newline at end of file diff --git a/tests/cases/journal-id.xml b/tests/cases/journal-id.xml new file mode 100644 index 0000000..010052b --- /dev/null +++ b/tests/cases/journal-id.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/journal-id"?> + + \ No newline at end of file diff --git a/tests/cases/journal-meta.xml b/tests/cases/journal-meta.xml new file mode 100644 index 0000000..b22b2bf --- /dev/null +++ b/tests/cases/journal-meta.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/journal-meta"?> + + \ No newline at end of file diff --git a/tests/cases/journal-subtitle.xml b/tests/cases/journal-subtitle.xml new file mode 100644 index 0000000..6b68363 --- /dev/null +++ b/tests/cases/journal-subtitle.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/journal-subtitle"?> + + \ No newline at end of file diff --git a/tests/cases/journal-title-group.xml b/tests/cases/journal-title-group.xml new file mode 100644 index 0000000..3a2a45f --- /dev/null +++ b/tests/cases/journal-title-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/journal-title-group"?> + + \ No newline at end of file diff --git a/tests/cases/journal-title.xml b/tests/cases/journal-title.xml new file mode 100644 index 0000000..de0ccc8 --- /dev/null +++ b/tests/cases/journal-title.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/journal-title"?> + + \ No newline at end of file diff --git a/tests/cases/kwd-group.xml b/tests/cases/kwd-group.xml new file mode 100644 index 0000000..5c6a964 --- /dev/null +++ b/tests/cases/kwd-group.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/kwd-group"?> + + \ No newline at end of file diff --git a/tests/cases/kwd.xml b/tests/cases/kwd.xml new file mode 100644 index 0000000..1efb7fb --- /dev/null +++ b/tests/cases/kwd.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/kwd"?> + + \ No newline at end of file diff --git a/tests/cases/label.xml b/tests/cases/label.xml new file mode 100644 index 0000000..52f35de --- /dev/null +++ b/tests/cases/label.xml @@ -0,0 +1,6 @@ + + + + is ignored." node="/label"?> + +