xref: /trunk/test/aoo-test/tests/odf/test_kinds.py (revision 85d6e4e58e50c1ed01601e2737a66d9715456246)
1*85d6e4e5SJim Jagielski################################################################
2*85d6e4e5SJim Jagielski#
3*85d6e4e5SJim Jagielski#  Licensed to the Apache Software Foundation (ASF) under one
4*85d6e4e5SJim Jagielski#  or more contributor license agreements.  See the NOTICE file
5*85d6e4e5SJim Jagielski#  distributed with this work for additional information
6*85d6e4e5SJim Jagielski#  regarding copyright ownership.  The ASF licenses this file
7*85d6e4e5SJim Jagielski#  to you under the Apache License, Version 2.0 (the
8*85d6e4e5SJim Jagielski#  "License"); you may not use this file except in compliance
9*85d6e4e5SJim Jagielski#  with the License.  You may obtain a copy of the License at
10*85d6e4e5SJim Jagielski#
11*85d6e4e5SJim Jagielski#    http://www.apache.org/licenses/LICENSE-2.0
12*85d6e4e5SJim Jagielski#
13*85d6e4e5SJim Jagielski#  Unless required by applicable law or agreed to in writing,
14*85d6e4e5SJim Jagielski#  software distributed under the License is distributed on an
15*85d6e4e5SJim Jagielski#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*85d6e4e5SJim Jagielski#  KIND, either express or implied.  See the License for the
17*85d6e4e5SJim Jagielski#  specific language governing permissions and limitations
18*85d6e4e5SJim Jagielski#  under the License.
19*85d6e4e5SJim Jagielski"""The extended save modes must not get worse: the error kinds against the ODF 1.2 and 1.3 schemas (and the same with foreign
20*85d6e4e5SJim Jagielskicontent removed) are compared with data/baseline/. Regenerate the baseline with --write-kinds after a change that is meant to
21*85d6e4e5SJim Jagielskichange them, and read the diff of data/baseline/ before committing it."""
22*85d6e4e5SJim Jagielskiimport pytest
23*85d6e4e5SJim Jagielski
24*85d6e4e5SJim Jagielskifrom aootest import documents, kinds
25*85d6e4e5SJim Jagielski
26*85d6e4e5SJim Jagielskipytestmark = pytest.mark.slow
27*85d6e4e5SJim Jagielski
28*85d6e4e5SJim Jagielski
29*85d6e4e5SJim Jagielski@pytest.mark.parametrize("mode,version", kinds.PAIRS)
30*85d6e4e5SJim Jagielskidef test_error_kinds_do_not_get_worse(odf_runs, need_mode, pytestconfig, mode, version):
31*85d6e4e5SJim Jagielski    need_mode(mode)
32*85d6e4e5SJim Jagielski    sources = kinds.stable(documents.from_config(pytestconfig))
33*85d6e4e5SJim Jagielski    run = odf_runs(mode)
34*85d6e4e5SJim Jagielski    saved = run.saved()
35*85d6e4e5SJim Jagielski    val = run.validation()["val"]
36*85d6e4e5SJim Jagielski    if val is None:
37*85d6e4e5SJim Jagielski        pytest.skip("needs java, jing and the ODF schemas (python -m aootest.fetch)")
38*85d6e4e5SJim Jagielski    covered = {documents.out_name(s) for s in sources if saved[s.id]["out"]}
39*85d6e4e5SJim Jagielski    now = kinds.kinds_of(val, version, covered)
40*85d6e4e5SJim Jagielski    if pytestconfig.getoption("--write-kinds"):
41*85d6e4e5SJim Jagielski        unsaved = [s.id for s in sources if not saved[s.id]["out"]]
42*85d6e4e5SJim Jagielski        kinds.write(mode, version, covered, now)
43*85d6e4e5SJim Jagielski        pytest.skip("baseline written: %s%s" % (kinds.path(mode, version).name, "; not saved, so not in it: " + ", ".join(unsaved) if unsaved else ""))
44*85d6e4e5SJim Jagielski    base = kinds.load(mode, version)
45*85d6e4e5SJim Jagielski    if base is None:
46*85d6e4e5SJim Jagielski        pytest.skip("no baseline for %s against ODF %s.%s (python3 -m pytest tests/odf/test_kinds.py --write-kinds)" % (mode, version[0], version[1:]))
47*85d6e4e5SJim Jagielski    lines, bad = kinds.judge(base, covered, now)
48*85d6e4e5SJim Jagielski    assert not bad, "\n".join(lines)
49