# BST-TIMEOUT: 300 . "$BST_LIB" # libtinyxml -- TinyXML 2.6.2, the ORIGINAL TinyXML and the predecessor of # tinyxml2, ported as -dev + -staticdev + -tests. The shipped payload is smaller # than any of its siblings on this image: ONE header, /usr/include/tinyxml.h, and # ONE archive, /usr/lib/libtinyxml.a. There is no pkg-config file, no cmake # package, no CLI and no on-target C++ compiler, so a shell test alone could only # assert that two files exist. Almost all of the weight here is therefore in # data/libtinyxml-probe -- a wasm32 binary cross-linked during the port against # the very libtinyxml.a that ships -- which parses data/libtinyxml-sample.xml, # walks it, drives the error channel, re-serialises it byte-exactly against the # x86-64 reference, and builds a document from nothing. # # WHY THIS IMAGE CARRIES BOTH TinyXMLs. 74-libtinyxml2 has been here since # BRINTOS-162. tinyxml2 is not a new version of this library -- it is a REWRITE # with a source-incompatible API (TiXmlDocument vs tinyxml2::XMLDocument, and a # different memory model), so a consumer written against one does not compile # against the other. TinyXML 2.6.2 is what a body of older C++ code expects, and # that is the whole reason it is here beside its successor: this is not an # accidental duplicate. It is numbered 74 beside 74-libtinyxml2 and 74-pugixml # for the same reason md4c sits at 76 beside cmark. # # WHAT THE PORT DECIDED, AND WHAT IT DID NOT HAVE TO. This arm's C++ driver # compiles with exceptions disabled -- there is no unwinder -- and unlike # pugixml (twelve throw sites, needing PUGIXML_NO_EXCEPTIONS) and jsoncpp (two, # needing JSON_USE_EXCEPTION=0) TinyXML needed NOTHING: it predates the exception # idiom and reports through error codes throughout, so all three translation # units compile under -fno-exceptions unmodified. That is measurable in the # shipped archive and is asserted below rather than assumed. # # What the port DID decide is the static arm, and it is a bigger change here than # on a cmake port. The stock meta-oe recipe inherits no build class at all: it # hand-writes a do_compile whose fourth step links `-shared # -Wl,-soname,libtinyxml.so.2.6.2`, and there is no variable that turns that off, # because the distro's static-only settings reach a recipe through configure and # this recipe has no configure. The bbappend replaces do_compile and do_install # outright. The consequence the suite checks is that the three .o files the stock # recipe names are what the archive holds -- and that tinystr.o, the FOURTH source # in the tarball, is NOT there. # # Style follows 74-pugixml: files are read once into shell variables and matched # with `case` globs, and the archive symbol table is one batched pass. ~150 # check_out spawns would cost more than the assertions on this runtime. inc=/usr/include/tinyxml.h lib=/usr/lib/libtinyxml.a hasfile() { if [ -s "$2" ]; then bst_ok "$1"; else bst_notok "$1" "absent or empty: $2"; fi; } has() { case "$3" in *"$2"*) bst_ok "$1" ;; *) bst_notok "$1" "not found: $2" ;; esac; } lacks() { case "$3" in *"$2"*) bst_notok "$1" "present but should not be: $2" ;; *) bst_ok "$1" ;; esac; } # --------------------------------------------------------------------------- # 1. The shipped payload -- and the three things that are deliberately NOT in it. hasfile libtinyxml/header-present "$inc" hasfile libtinyxml/archive-present "$lib" # tinystr.h is the header of the non-STL string class. Under TIXML_USE_STL it is # compiled out and nothing in the public interface refers to it, so the stock # recipe does not install it and neither do we. Shipping it would invite a # consumer to use a class this archive does not define -- which links, because # TiXmlString is header-inline in part, and then fails at the first out-of-line # member. Asserted as an absence because "we forgot to install it" and "we # deliberately did not" look identical from the file list. if [ -e /usr/include/tinystr.h ]; then bst_notok libtinyxml/no-tinystr-header "/usr/include/tinystr.h is installed" else bst_ok libtinyxml/no-tinystr-header fi # No .pc and no cmake package: upstream ships neither, and the stock recipe # generates neither. This is a REAL difference from its two siblings on this # image -- libtinyxml2 ships tinyxml2.pc and pugixml ships both a .pc and a # find_package() package -- so a consumer of libtinyxml has to name -ltinyxml by # hand. Pinned so that a later port which adds one has to say so, rather than # silently changing what a consumer's build system can discover. if [ -e /usr/lib/pkgconfig/tinyxml.pc ] || [ -e /usr/lib/pkgconfig/libtinyxml.pc ]; then bst_notok libtinyxml/no-pc "a pkg-config file is installed; upstream ships none" else bst_ok libtinyxml/no-pc fi if [ -d /usr/lib/cmake/tinyxml ] || [ -d /usr/lib/cmake/libtinyxml ]; then bst_notok libtinyxml/no-cmake-package "a cmake package is installed; upstream ships none" else bst_ok libtinyxml/no-cmake-package fi # Shape, not absence: this arm converts to shared libraries per recipe # (BRINTOS-1740), so a .so here is a conversion, not a policy breach. bst_lib_shape libtinyxml/no-shared "/usr/lib/libtinyxml*.so*" if [ -f /usr/lib/libtinyxml.la ]; then bst_notok libtinyxml/no-la "/usr/lib/libtinyxml.la is installed" else bst_ok libtinyxml/no-la fi # --------------------------------------------------------------------------- # 2. The header -- and the patch that changes the ABI of every class in it. # # meta-oe carries enforce-use-stl.patch, which defines TIXML_USE_STL INSIDE # tinyxml.h. That is not a build convenience: it selects std::string over # TiXmlString for every value, name and attribute in the library, so the header # and the archive must agree or every std::string-taking member is a link error. # Because the define is in the shipped header, a consumer inherits it whether or # not it defines anything itself -- which is the OPPOSITE of pugixml's situation, # where the exceptions-off mode reaches a cmake consumer and not a pkg-config # one. There is no channel to get wrong here, and that is worth pinning: a build # that dropped the patch would still compile, still install, and hand every # consumer a silently different ABI. hdr=$(cat "$inc" 2>/dev/null) has libtinyxml/header-guard "TINYXML_INCLUDED" "$hdr" has libtinyxml/header-major "TIXML_MAJOR_VERSION = 2" "$hdr" has libtinyxml/header-minor "TIXML_MINOR_VERSION = 6" "$hdr" has libtinyxml/header-patch "TIXML_PATCH_VERSION = 2" "$hdr" has libtinyxml/header-enforces-stl "define TIXML_USE_STL" "$hdr" has libtinyxml/header-safe-mode "define TIXML_SAFE" "$hdr" has libtinyxml/header-class-document "class TiXmlDocument" "$hdr" has libtinyxml/header-class-element "class TiXmlElement" "$hdr" has libtinyxml/header-class-printer "class TiXmlPrinter" "$hdr" has libtinyxml/header-class-handle "class TiXmlHandle" "$hdr" has libtinyxml/header-error-enum "TIXML_ERROR_STRING_COUNT" "$hdr" has libtinyxml/header-attr-rc-enum "TIXML_NO_ATTRIBUTE" "$hdr" # The exception idiom is absent from the header as well as the archive. This is # the claim that makes the port a one-line opt-in rather than a # no-exceptions-mode port: TinyXML has no `throw` to switch off. lacks libtinyxml/header-no-throw "throw(" "$hdr" # --------------------------------------------------------------------------- # 3. The archive, read once. check_out libtinyxml/archive-magic "!" head -c 8 "$lib" # Flattened to printable text rather than read with nm: there is no nm on this # image that understands a wasm32 object, and the octal tr range is the # formulation both greps and both trs agree on -- derived by 69-libb64.test and # reused since. GNU grep otherwise suppresses matches inside data it calls binary. # # THE SUBSHELL IS LOAD-BEARING AND IS NOT STYLE. Written bare, a top-level # `prog < ` makes dup2(2) return 513 -- the kernel's # -ERESTARTNOINTR park sentinel reaching userspace through glibc's errno return # path -- and ash treats a failed top-level redirect as fatal, so THE SUITE'S # SHELL EXITS and every case below here is silently never reached. The runner # then reports the cases it did see as a complete, all-green suite. A subshell # forks before the redirect, which is what makes it safe. See the packager # README, "Do not redirect stdin from the rootfs", and 86-nana.test. The sweep of # the suites still carrying the bare form is BRINTOS-1151. # BRINTOS-WORKAROUND: brintos/linux#73 remove -- drop the subshell when the # restart sentinel no longer reaches userspace on a top-level redirect. flat=${TMPDIR:-/tmp}/bst-libtinyxml-flat.$$ ( tr -c '\40-\176\n' ' ' < "$lib" > "$flat" ) 2>/dev/null if [ -s "$flat" ]; then bst_ok libtinyxml/archive-readable syms=$(cat "$flat") # THE MEMBER LIST IS THE PORT'S OWN DECISION, WRITTEN DOWN. The bbappend names # three sources explicitly rather than globbing *.cpp, because the tarball # holds FOUR and the fourth must not be compiled: tinystr.cpp defines # TiXmlString, which under TIXML_USE_STL nothing in the archive uses. A glob # would build it, the archive would carry symbols of an ABI no other member # speaks, and nothing else on this image would ever notice. # Asserted member-by-member, plus the count, rather than against one joined # string: `sort` collates by the locale, and glibc's en_US rules order # `tinyxmlerror.o` before `tinyxml.o` (punctuation is ignored) while busybox's # C-locale byte order does the opposite. A joined-string assertion therefore # passes on the host and fails on the target for a reason that has nothing to # do with the archive -- caught here on the port's own dry run. for m in tinyxml.o tinyxmlerror.o tinyxmlparser.o; do has "libtinyxml/archive-member-$m" "$m" "$syms" done nmemb=$(grep -oE '[A-Za-z0-9_]+\.o' "$flat" 2>/dev/null | sort -u | wc -l) check_eq libtinyxml/archive-member-count 3 "$(printf '%s' "$nmemb" | tr -d ' ')" lacks libtinyxml/archive-no-tinystr-member "tinystr.o" "$syms" # The parser, the DOM and the printer are all in there. has libtinyxml/sym-document "TiXmlDocument" "$syms" has libtinyxml/sym-element "TiXmlElement" "$syms" has libtinyxml/sym-attribute "TiXmlAttribute" "$syms" has libtinyxml/sym-text "TiXmlText" "$syms" has libtinyxml/sym-comment "TiXmlComment" "$syms" has libtinyxml/sym-declaration "TiXmlDeclaration" "$syms" has libtinyxml/sym-printer "TiXmlPrinter" "$syms" has libtinyxml/sym-handle "TiXmlHandle" "$syms" has libtinyxml/sym-loadfile "8LoadFile" "$syms" has libtinyxml/sym-errorrow "8ErrorRowEv" "$syms" # THE VTABLE AND TYPEINFO RECORDS OF THE TiXmlNode HIERARCHY. TinyXML's whole # API is virtual dispatch -- Parse, Clone, Accept and the To() casts are # all virtual on TiXmlNode -- so an archive whose vtables did not survive the # wasm32 link would still link a consumer that only ever calls a non-virtual # member, and would fail at the first Clone(). Each _ZTV is the vtable and each # _ZTI the typeinfo record the RTTI casts read; both are asserted per class # because a link that dropped one type's records specifically is exactly what a # partial LTO or a section-GC bug produces. has libtinyxml/vtable-base "_ZTV9TiXmlBase" "$syms" has libtinyxml/typeinfo-base "_ZTI9TiXmlBase" "$syms" has libtinyxml/vtable-node "_ZTV9TiXmlNode" "$syms" has libtinyxml/typeinfo-node "_ZTI9TiXmlNode" "$syms" has libtinyxml/vtable-element "_ZTV12TiXmlElement" "$syms" has libtinyxml/typeinfo-element "_ZTI12TiXmlElement" "$syms" has libtinyxml/vtable-document "_ZTV13TiXmlDocument" "$syms" has libtinyxml/typeinfo-document "_ZTI13TiXmlDocument" "$syms" has libtinyxml/vtable-text "_ZTV9TiXmlText" "$syms" has libtinyxml/typeinfo-text "_ZTI9TiXmlText" "$syms" has libtinyxml/vtable-comment "_ZTV12TiXmlComment" "$syms" has libtinyxml/typeinfo-comment "_ZTI12TiXmlComment" "$syms" has libtinyxml/vtable-unknown "_ZTV12TiXmlUnknown" "$syms" has libtinyxml/typeinfo-unknown "_ZTI12TiXmlUnknown" "$syms" has libtinyxml/vtable-declaration "_ZTV16TiXmlDeclaration" "$syms" has libtinyxml/typeinfo-declaration "_ZTI16TiXmlDeclaration" "$syms" has libtinyxml/vtable-attribute "_ZTV14TiXmlAttribute" "$syms" has libtinyxml/typeinfo-attribute "_ZTI14TiXmlAttribute" "$syms" has libtinyxml/vtable-visitor "_ZTV12TiXmlVisitor" "$syms" has libtinyxml/typeinfo-visitor "_ZTI12TiXmlVisitor" "$syms" has libtinyxml/vtable-printer "_ZTV12TiXmlPrinter" "$syms" has libtinyxml/typeinfo-printer "_ZTI12TiXmlPrinter" "$syms" # THE STL ARM, VISIBLE IN THE ARCHIVE. enforce-use-stl.patch makes every value # a std::string and enables the operators, so libc++'s own types # appear in this archive's symbol table. TiXmlString does NOT -- it is compiled # out of existence by the same define. Asserting both directions is what # separates "the patch applied" from "the header happens to mention it". has libtinyxml/sym-libcxx-string "NSt3__112basic_string" "$syms" has libtinyxml/sym-stl-istream "NSt3__113basic_istream" "$syms" has libtinyxml/sym-stl-ostream "NSt3__113basic_ostream" "$syms" lacks libtinyxml/sym-no-tixmlstring "TiXmlString" "$syms" # ...and the exception machinery is not there, which on THIS port is a # statement about the LIBRARY rather than about a build switch: pugixml and # jsoncpp each needed a mode selected to reach this state, and TinyXML reaches # it because it never throws. A __cxa_throw appearing here would mean the # source acquired one, not that a flag was dropped. lacks libtinyxml/sym-no-cxa-throw "__cxa_throw" "$syms" lacks libtinyxml/sym-no-cxa-allocate "__cxa_allocate_exception" "$syms" lacks libtinyxml/sym-no-bad-alloc "bad_alloc" "$syms" else bst_notok libtinyxml/archive-readable "could not flatten $lib" fi rm -f "$flat" # --------------------------------------------------------------------------- # 4. The probe -- the library actually running. # # Built by the libtinyxml recipe against the archive that same build produced and # shipped in libtinyxml-tests, so it cannot drift from the library it tests. It # is installed 0755 in libexecdir and needs no staging: it opens the sample # read-only and writes nothing, so the read-only rootfs at browser runtime is not # in its way. `require' rather than a hard failure -- an image that takes # libtinyxml-dev without libtinyxml-tests legitimately has nothing to run here, # and that is a coverage prompt (add the package), not a broken port. PT=/usr/libexec/libtinyxml-tests require "$PT/libtinyxml-probe" libtinyxml/probe-present hasfile libtinyxml/sample-present "$PT/libtinyxml-sample.xml" # Run ONCE and keep both the output and the status: on this runtime the wasm # module's start-up dominates the cost of the whole suite. out=$("$PT/libtinyxml-probe" "$PT" 2>&1); prc=$? bst_ok libtinyxml/probe-ran # The probe's own verdict, its exit status, and -- the case the per-case # assertions below cannot make -- that no case went MISSING. A probe that # silently stopped emitting half its cases would satisfy every `has` below, # because `has` can only see what was printed. 125 is the count this port shipped # with, measured on x86-64 and on target; a case ADDED to the probe without # updating this number is a red that says exactly that, which is the intent. has libtinyxml/probe-summary-clean "TX-summary failures 0" "$out" check_eq libtinyxml/probe-status 0 "$prc" nok=$(printf '%s\n' "$out" | grep -c ' OK$') check_eq libtinyxml/probe-case-count 125 "$nok" if printf '%s\n' "$out" | grep -q 'FAIL:'; then bst_notok libtinyxml/probe-no-fail-lines "$(printf '%s\n' "$out" | grep -m1 'FAIL:')" else bst_ok libtinyxml/probe-no-fail-lines fi # identity: the version constants and the two compile-time modes has libtinyxml/run-version-major "TX-version-major OK" "$out" has libtinyxml/run-version-minor "TX-version-minor OK" "$out" has libtinyxml/run-version-patch "TX-version-patch OK" "$out" has libtinyxml/run-safe-mode "TX-safe-mode OK" "$out" has libtinyxml/run-stl-string-size "TX-stl-string-size OK" "$out" # the bundled document: parsed, and the declaration + comment TinyXML keeps in the tree has libtinyxml/run-load-file "TX-load-file OK" "$out" has libtinyxml/run-load-file-no-error "TX-load-file-no-error OK" "$out" has libtinyxml/run-load-file-error-id "TX-load-file-error-id OK" "$out" has libtinyxml/run-doc-type "TX-doc-type OK" "$out" has libtinyxml/run-doc-first-child-type "TX-doc-first-child-type OK" "$out" has libtinyxml/run-decl-version "TX-decl-version OK" "$out" has libtinyxml/run-decl-encoding "TX-decl-encoding OK" "$out" has libtinyxml/run-decl-standalone "TX-decl-standalone OK" "$out" has libtinyxml/run-doc-second-child-type "TX-doc-second-child-type OK" "$out" has libtinyxml/run-comment-value "TX-comment-value OK" "$out" has libtinyxml/run-root-present "TX-root-present OK" "$out" has libtinyxml/run-root-name "TX-root-name OK" "$out" has libtinyxml/run-root-type "TX-root-type OK" "$out" # the tree, walked and counted has libtinyxml/run-element-count "TX-element-count OK" "$out" has libtinyxml/run-attribute-count "TX-attribute-count OK" "$out" # typed attributes, and the three-valued return code that IS this library's error channel for them has libtinyxml/run-attr-string "TX-attr-string OK" "$out" has libtinyxml/run-attr-query-int-rc "TX-attr-query-int-rc OK" "$out" has libtinyxml/run-attr-query-int "TX-attr-query-int OK" "$out" has libtinyxml/run-pkg-present "TX-pkg-present OK" "$out" has libtinyxml/run-attr-size "TX-attr-size OK" "$out" has libtinyxml/run-attr-query-double-rc "TX-attr-query-double-rc OK" "$out" has libtinyxml/run-attr-query-double "TX-attr-query-double OK" "$out" has libtinyxml/run-attr-missing-rc "TX-attr-missing-rc OK" "$out" has libtinyxml/run-attr-missing-untouched "TX-attr-missing-untouched OK" "$out" has libtinyxml/run-attr-wrong-type-rc "TX-attr-wrong-type-rc OK" "$out" has libtinyxml/run-attr-wrong-type-untouched "TX-attr-wrong-type-untouched OK" "$out" has libtinyxml/run-attr-missing-null "TX-attr-missing-null OK" "$out" has libtinyxml/run-attr-overload-ptr "TX-attr-overload-ptr OK" "$out" has libtinyxml/run-pkg2-present "TX-pkg2-present OK" "$out" has libtinyxml/run-attr-sibling-name "TX-attr-sibling-name OK" "$out" has libtinyxml/run-attr-bool-is-string "TX-attr-bool-is-string OK" "$out" # text, CDATA and the entities decoded at parse time has libtinyxml/run-text-get-text "TX-text-get-text OK" "$out" has libtinyxml/run-text-get-text-null-on-element "TX-text-get-text-null-on-element OK" "$out" has libtinyxml/run-text-get-text-null-on-empty "TX-text-get-text-null-on-empty OK" "$out" has libtinyxml/run-cdata-is-text-node "TX-cdata-is-text-node OK" "$out" has libtinyxml/run-cdata-flagged "TX-cdata-flagged OK" "$out" has libtinyxml/run-cdata-value "TX-cdata-value OK" "$out" has libtinyxml/run-plain-text-not-cdata "TX-plain-text-not-cdata OK" "$out" has libtinyxml/run-entity-decoded "TX-entity-decoded OK" "$out" has libtinyxml/run-utf8-entity-two-bytes "TX-utf8-entity-two-bytes OK" "$out" # TiXmlHandle -- the null-safe walk, both arms has libtinyxml/run-handle-walk "TX-handle-walk OK" "$out" has libtinyxml/run-handle-text "TX-handle-text OK" "$out" has libtinyxml/run-handle-missing-null "TX-handle-missing-null OK" "$out" has libtinyxml/run-handle-child-index "TX-handle-child-index OK" "$out" # the error channel: ten malformed documents, six DISTINCT ids, and the row/col the parser's own cursor computed has libtinyxml/run-bad-empty-doc-reported "TX-bad-empty-doc-reported OK" "$out" has libtinyxml/run-bad-empty-doc-id "TX-bad-empty-doc-id OK" "$out" has libtinyxml/run-bad-empty-doc-row "TX-bad-empty-doc-row OK" "$out" has libtinyxml/run-bad-empty-doc-col "TX-bad-empty-doc-col OK" "$out" has libtinyxml/run-bad-empty-doc-desc "TX-bad-empty-doc-desc OK" "$out" has libtinyxml/run-bad-leading-junk-reported "TX-bad-leading-junk-reported OK" "$out" has libtinyxml/run-bad-leading-junk-id "TX-bad-leading-junk-id OK" "$out" has libtinyxml/run-bad-leading-junk-row "TX-bad-leading-junk-row OK" "$out" has libtinyxml/run-bad-leading-junk-col "TX-bad-leading-junk-col OK" "$out" has libtinyxml/run-bad-leading-junk-desc "TX-bad-leading-junk-desc OK" "$out" has libtinyxml/run-bad-unclosed-nested-reported "TX-bad-unclosed-nested-reported OK" "$out" has libtinyxml/run-bad-unclosed-nested-id "TX-bad-unclosed-nested-id OK" "$out" has libtinyxml/run-bad-unclosed-nested-row "TX-bad-unclosed-nested-row OK" "$out" has libtinyxml/run-bad-unclosed-nested-col "TX-bad-unclosed-nested-col OK" "$out" has libtinyxml/run-bad-unclosed-nested-desc "TX-bad-unclosed-nested-desc OK" "$out" has libtinyxml/run-bad-mismatched-end-reported "TX-bad-mismatched-end-reported OK" "$out" has libtinyxml/run-bad-mismatched-end-id "TX-bad-mismatched-end-id OK" "$out" has libtinyxml/run-bad-mismatched-end-row "TX-bad-mismatched-end-row OK" "$out" has libtinyxml/run-bad-mismatched-end-col "TX-bad-mismatched-end-col OK" "$out" has libtinyxml/run-bad-mismatched-end-desc "TX-bad-mismatched-end-desc OK" "$out" has libtinyxml/run-bad-no-end-tag-reported "TX-bad-no-end-tag-reported OK" "$out" has libtinyxml/run-bad-no-end-tag-id "TX-bad-no-end-tag-id OK" "$out" has libtinyxml/run-bad-no-end-tag-row "TX-bad-no-end-tag-row OK" "$out" has libtinyxml/run-bad-no-end-tag-col "TX-bad-no-end-tag-col OK" "$out" has libtinyxml/run-bad-no-end-tag-desc "TX-bad-no-end-tag-desc OK" "$out" has libtinyxml/run-bad-bad-attr-reported "TX-bad-bad-attr-reported OK" "$out" has libtinyxml/run-bad-bad-attr-id "TX-bad-bad-attr-id OK" "$out" has libtinyxml/run-bad-bad-attr-row "TX-bad-bad-attr-row OK" "$out" has libtinyxml/run-bad-bad-attr-col "TX-bad-bad-attr-col OK" "$out" has libtinyxml/run-bad-bad-attr-desc "TX-bad-bad-attr-desc OK" "$out" has libtinyxml/run-bad-unquoted-attr-reported "TX-bad-unquoted-attr-reported OK" "$out" has libtinyxml/run-bad-unquoted-attr-id "TX-bad-unquoted-attr-id OK" "$out" has libtinyxml/run-bad-unquoted-attr-row "TX-bad-unquoted-attr-row OK" "$out" has libtinyxml/run-bad-unquoted-attr-col "TX-bad-unquoted-attr-col OK" "$out" has libtinyxml/run-bad-unquoted-attr-desc "TX-bad-unquoted-attr-desc OK" "$out" has libtinyxml/run-bad-bad-elem-name-reported "TX-bad-bad-elem-name-reported OK" "$out" has libtinyxml/run-bad-bad-elem-name-id "TX-bad-bad-elem-name-id OK" "$out" has libtinyxml/run-bad-bad-elem-name-row "TX-bad-bad-elem-name-row OK" "$out" has libtinyxml/run-bad-bad-elem-name-col "TX-bad-bad-elem-name-col OK" "$out" has libtinyxml/run-bad-bad-elem-name-desc "TX-bad-bad-elem-name-desc OK" "$out" has libtinyxml/run-bad-multiline-end-reported "TX-bad-multiline-end-reported OK" "$out" has libtinyxml/run-bad-multiline-end-id "TX-bad-multiline-end-id OK" "$out" has libtinyxml/run-bad-multiline-end-row "TX-bad-multiline-end-row OK" "$out" has libtinyxml/run-bad-multiline-end-col "TX-bad-multiline-end-col OK" "$out" has libtinyxml/run-bad-multiline-end-desc "TX-bad-multiline-end-desc OK" "$out" has libtinyxml/run-bad-multiline-attr-reported "TX-bad-multiline-attr-reported OK" "$out" has libtinyxml/run-bad-multiline-attr-id "TX-bad-multiline-attr-id OK" "$out" has libtinyxml/run-bad-multiline-attr-row "TX-bad-multiline-attr-row OK" "$out" has libtinyxml/run-bad-multiline-attr-col "TX-bad-multiline-attr-col OK" "$out" has libtinyxml/run-bad-multiline-attr-desc "TX-bad-multiline-attr-desc OK" "$out" # error state cleared after a failure, and the one error raised without parsing has libtinyxml/run-good-after-bad-no-error "TX-good-after-bad-no-error OK" "$out" has libtinyxml/run-good-after-bad-id "TX-good-after-bad-id OK" "$out" has libtinyxml/run-missing-file-false "TX-missing-file-false OK" "$out" has libtinyxml/run-missing-file-id "TX-missing-file-id OK" "$out" # what TinyXML does NOT reject -- pinned as characteristics, identical on x86-64 has libtinyxml/run-lax-two-roots-accepted "TX-lax-two-roots-accepted OK" "$out" has libtinyxml/run-lax-valueless-attr-accepted "TX-lax-valueless-attr-accepted OK" "$out" has libtinyxml/run-lax-bad-char-ref-accepted "TX-lax-bad-char-ref-accepted OK" "$out" has libtinyxml/run-lax-unterminated-decl-accepted "TX-lax-unterminated-decl-accepted OK" "$out" has libtinyxml/run-lax-angle-only-accepted "TX-lax-angle-only-accepted OK" "$out" has libtinyxml/run-lax-two-roots-first "TX-lax-two-roots-first OK" "$out" has libtinyxml/run-lax-two-roots-second-in-tree "TX-lax-two-roots-second-in-tree OK" "$out" # re-serialisation, byte-exact against the x86-64 reference, and the round trip has libtinyxml/run-print-size "TX-print-size OK" "$out" has libtinyxml/run-print-byte-exact "TX-print-byte-exact OK" "$out" has libtinyxml/run-roundtrip-parses "TX-roundtrip-parses OK" "$out" has libtinyxml/run-roundtrip-idempotent "TX-roundtrip-idempotent OK" "$out" has libtinyxml/run-print-compact-no-newlines "TX-print-compact-no-newlines OK" "$out" has libtinyxml/run-print-compact-smaller "TX-print-compact-smaller OK" "$out" has libtinyxml/run-amp-parses "TX-amp-parses OK" "$out" has libtinyxml/run-amp-reencoded "TX-amp-reencoded OK" "$out" # mutation: the document built, printed, pruned and deep-copied has libtinyxml/run-mutate-print "TX-mutate-print OK" "$out" has libtinyxml/run-mutate-removed "TX-mutate-removed OK" "$out" has libtinyxml/run-mutate-print-after-remove "TX-mutate-print-after-remove OK" "$out" has libtinyxml/run-clone-not-null "TX-clone-not-null OK" "$out" has libtinyxml/run-clone-name "TX-clone-name OK" "$out" has libtinyxml/run-clone-type "TX-clone-type OK" "$out" has libtinyxml/run-clone-is-deep "TX-clone-is-deep OK" "$out"