xref: /trunk/test/aoo-test/tests/selftest/test_validate.py (revision 6e223505681eb073927a3bbffc2acd512d92ba3f)
12cb6d6f1SJim Jagielski################################################################
22cb6d6f1SJim Jagielski#
32cb6d6f1SJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
42cb6d6f1SJim Jagielski#  or more contributor license agreements.  See the NOTICE file
52cb6d6f1SJim Jagielski#  distributed with this work for additional information
62cb6d6f1SJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
72cb6d6f1SJim Jagielski#  to you under the Apache License, Version 2.0 (the
82cb6d6f1SJim Jagielski#  "License"); you may not use this file except in compliance
92cb6d6f1SJim Jagielski#  with the License.  You may obtain a copy of the License at
102cb6d6f1SJim Jagielski#
112cb6d6f1SJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
122cb6d6f1SJim Jagielski#
132cb6d6f1SJim Jagielski#  Unless required by applicable law or agreed to in writing,
142cb6d6f1SJim Jagielski#  software distributed under the License is distributed on an
152cb6d6f1SJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
162cb6d6f1SJim Jagielski#  KIND, either express or implied.  See the License for the
172cb6d6f1SJim Jagielski#  specific language governing permissions and limitations
182cb6d6f1SJim Jagielski#  under the License.
192cb6d6f1SJim Jagielski#
202cb6d6f1SJim Jagielski################################################################
212cb6d6f1SJim Jagielski
222cb6d6f1SJim Jagielski"""validate.check() on the negative controls: each row must hold, so a validator that stops flagging a control fails here."""
232cb6d6f1SJim Jagielskiimport pytest
242cb6d6f1SJim Jagielski
252cb6d6f1SJim Jagielskipytestmark = pytest.mark.selftest
262cb6d6f1SJim Jagielski
272cb6d6f1SJim JagielskiBOGUS = '"text:bogus"'
282cb6d6f1SJim Jagielski
292cb6d6f1SJim Jagielski
302cb6d6f1SJim Jagielskidef flags(E, versions, pkg, needle):
312cb6d6f1SJim Jagielski    return all(any(needle in m for m in E(v, pkg)) for v in versions)
322cb6d6f1SJim Jagielski
332cb6d6f1SJim Jagielski
342cb6d6f1SJim JagielskiROWS = [
352cb6d6f1SJim Jagielski    ("good.odt clean in 1.2 and 1.4", lambda E, d: not E("12", "good.odt") and not E("14", "good.odt")),
362cb6d6f1SJim Jagielski    ("bad.odt flags text:bogus in 1.2 and 1.4", lambda E, d: flags(E, ("12", "14"), "bad.odt", BOGUS)),
372cb6d6f1SJim Jagielski    ("wrongver.odt flags office:version in 1.2 and 1.4", lambda E, d: flags(E, ("12", "14"), "wrongver.odt", "office:version")),
382cb6d6f1SJim Jagielski    ("13: good.odt clean in 1.3 and 1.3 extended", lambda E, d: not E("13", "good.odt") and not E("13x", "good.odt")),
392cb6d6f1SJim Jagielski    ("13: bad.odt flags text:bogus in 1.3 and 1.3 extended", lambda E, d: flags(E, ("13", "13x"), "bad.odt", BOGUS)),
402cb6d6f1SJim Jagielski    ("13: wrongver.odt flags office:version in 1.3 and 1.3 extended", lambda E, d: flags(E, ("13", "13x"), "wrongver.odt", "office:version")),
412cb6d6f1SJim Jagielski    ("13: new13.odt (text:drop-down) invalid in 1.2, valid in 1.3 and 1.3 extended",
422cb6d6f1SJim Jagielski     lambda E, d: bool(E("12", "new13.odt")) and not E("13", "new13.odt") and not E("13x", "new13.odt")),
432cb6d6f1SJim Jagielski    ("13: extforeign.odt invalid as written, valid once foreign content is removed",
442cb6d6f1SJim Jagielski     lambda E, d: bool(E("13", "extforeign.odt")) and not E("13x", "extforeign.odt")),
452cb6d6f1SJim Jagielski    ("13: meta:creator-initials invalid in 1.2, valid in 1.3 and 1.3 extended; the note without it is clean in all",
462cb6d6f1SJim Jagielski     lambda E, d: any('"meta:creator-initials"' in m for m in E("12", "newinit.odt")) and not E("13", "newinit.odt") and not E("13x", "newinit.odt")
472cb6d6f1SJim Jagielski     and not any(E(v, "baseinit.odt") for v in ("12", "13", "13x"))),
482cb6d6f1SJim Jagielski    ("13: chart:coordinate-region invalid in 1.2, valid in 1.3 and 1.3 extended; the chart without it is clean in all",
492cb6d6f1SJim Jagielski     lambda E, d: any('"chart:coordinate-region"' in m for m in E("12", "newregion.odc")) and not E("13", "newregion.odc") and not E("13x", "newregion.odc")
502cb6d6f1SJim Jagielski     and not any(E(v, "baseregion.odc") for v in ("12", "13", "13x"))),
512cb6d6f1SJim Jagielski    ("13: style:scale-to-X/Y together with style:scale-to invalid in 1.3 and 1.3 extended",
522cb6d6f1SJim Jagielski     lambda E, d: flags(E, ("13", "13x"), "scaleboth.odt", '"style:scale-to"')),
532cb6d6f1SJim Jagielski    ("13: style:scale-to-X/Y alone and style:scale-to alone valid in 1.3 and 1.3 extended; X/Y invalid in 1.2",
542cb6d6f1SJim Jagielski     lambda E, d: not any(E(v, p) for v in ("13", "13x") for p in ("scalexy.odt", "scaleone.odt"))
552cb6d6f1SJim Jagielski     and any('"style:scale-to-X"' in m for m in E("12", "scalexy.odt")) and not E("12", "scaleone.odt")),
56*6e223505SJim Jagielski    ("14: good.odt clean in 1.4 and 1.4 extended; a 1.3 version is rewritten like a 1.2 one", lambda E, d: not E("14", "good.odt") and not E("14x", "good.odt")),
57*6e223505SJim Jagielski    ("14: bad.odt flags text:bogus in 1.4 and 1.4 extended", lambda E, d: flags(E, ("14", "14x"), "bad.odt", BOGUS)),
58*6e223505SJim Jagielski    ("14: wrongver.odt (1.1) flags office:version in 1.4 and 1.4 extended", lambda E, d: flags(E, ("14", "14x"), "wrongver.odt", "office:version")),
59*6e223505SJim Jagielski    ("14: extforeign.odt invalid as written, valid in 1.4 extended once foreign content is removed",
60*6e223505SJim Jagielski     lambda E, d: bool(E("14", "extforeign.odt")) and not E("14x", "extforeign.odt")),
61*6e223505SJim Jagielski    ("14: draw:decorative invalid in 1.2 and 1.3, valid in 1.4 and 1.4 extended; the same style without it is clean in all",
62*6e223505SJim Jagielski     lambda E, d: all(any('"draw:decorative"' in m for m in E(v, "newdeco.odt")) for v in ("12", "13"))
63*6e223505SJim Jagielski     and not E("14", "newdeco.odt") and not E("14x", "newdeco.odt") and not any(E(v, "basedeco.odt") for v in ("12", "13", "14", "14x"))),
64*6e223505SJim Jagielski    ("14: draw:handle with only the old combined attribute valid in 1.2 and 1.3, invalid in 1.4 and 1.4 extended",
65*6e223505SJim Jagielski     lambda E, d: not any(E(v, "handleold.odt") for v in ("12", "13")) and all(E(v, "handleold.odt") for v in ("14", "14x"))),
66*6e223505SJim Jagielski    ("14: draw:handle with the new position or polar pair valid in 1.4 and 1.4 extended, invalid in 1.2 and 1.3",
67*6e223505SJim Jagielski     lambda E, d: not any(E(v, p) for v in ("14", "14x") for p in ("handlenew.odt", "handlepolar.odt"))
68*6e223505SJim Jagielski     and all(E(v, p) for v in ("12", "13") for p in ("handlenew.odt", "handlepolar.odt"))),
692cb6d6f1SJim Jagielski    ("mathobj.odt MathML object skipped", lambda E, d: d["mathml_skipped"] == ["mathobj.odt/Object 1/content.xml"] and not E("12", "mathobj.odt")),
702cb6d6f1SJim Jagielski    ("no unparsed jing output", lambda E, d: not any(e[0] == "?" for v in d["errors"] for e in d["errors"][v])),
712cb6d6f1SJim Jagielski    ("extended: extforeign.odt invalid as written, valid once foreign content is removed",
722cb6d6f1SJim Jagielski     lambda E, d: bool(E("12", "extforeign.odt")) and not E("12x", "extforeign.odt")),
732cb6d6f1SJim Jagielski    ("extended: good.odt, goodid.odt clean", lambda E, d: not E("12x", "good.odt") and not E("12x", "goodid.odt")),
742cb6d6f1SJim Jagielski    ("extended: bad.odt (unknown element in an ODF namespace) still flagged", lambda E, d: any(BOGUS in m for m in E("12x", "bad.odt"))),
752cb6d6f1SJim Jagielski    ("extended: wrongver.odt (attribute in an ODF namespace) still flagged", lambda E, d: any("office:version" in m for m in E("12x", "wrongver.odt"))),
762cb6d6f1SJim Jagielski    ("extended: badns.odt (unbound prefix) still flagged", lambda E, d: any("not bound" in m for m in E("12x", "badns.odt"))),
772cb6d6f1SJim Jagielski]
782cb6d6f1SJim Jagielski
792cb6d6f1SJim Jagielski
802cb6d6f1SJim Jagielski@pytest.mark.parametrize("row", [pytest.param(r[1], id=r[0]) for r in ROWS])
812cb6d6f1SJim Jagielskidef test_validate_controls(row, errs, val):
822cb6d6f1SJim Jagielski    assert row(errs, val)
83