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