1*2cb6d6f1SJim Jagielski################################################################ 2*2cb6d6f1SJim Jagielski# 3*2cb6d6f1SJim Jagielski# Licensed to the Apache Software Foundation (ASF) under one 4*2cb6d6f1SJim Jagielski# or more contributor license agreements. See the NOTICE file 5*2cb6d6f1SJim Jagielski# distributed with this work for additional information 6*2cb6d6f1SJim Jagielski# regarding copyright ownership. The ASF licenses this file 7*2cb6d6f1SJim Jagielski# to you under the Apache License, Version 2.0 (the 8*2cb6d6f1SJim Jagielski# "License"); you may not use this file except in compliance 9*2cb6d6f1SJim Jagielski# with the License. You may obtain a copy of the License at 10*2cb6d6f1SJim Jagielski# 11*2cb6d6f1SJim Jagielski# http://www.apache.org/licenses/LICENSE-2.0 12*2cb6d6f1SJim Jagielski# 13*2cb6d6f1SJim Jagielski# Unless required by applicable law or agreed to in writing, 14*2cb6d6f1SJim Jagielski# software distributed under the License is distributed on an 15*2cb6d6f1SJim Jagielski# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*2cb6d6f1SJim Jagielski# KIND, either express or implied. See the License for the 17*2cb6d6f1SJim Jagielski# specific language governing permissions and limitations 18*2cb6d6f1SJim Jagielski# under the License. 19*2cb6d6f1SJim Jagielski# 20*2cb6d6f1SJim Jagielski################################################################ 21*2cb6d6f1SJim Jagielski 22*2cb6d6f1SJim Jagielski"""idcheck.check() on the negative controls.""" 23*2cb6d6f1SJim Jagielskiimport pytest 24*2cb6d6f1SJim Jagielski 25*2cb6d6f1SJim Jagielskipytestmark = pytest.mark.selftest 26*2cb6d6f1SJim Jagielski 27*2cb6d6f1SJim Jagielski 28*2cb6d6f1SJim Jagielskidef ierrs(ids, pkg): 29*2cb6d6f1SJim Jagielski return [e[3] for e in ids["errors"] if e[0].startswith(pkg + "/")] 30*2cb6d6f1SJim Jagielski 31*2cb6d6f1SJim Jagielski 32*2cb6d6f1SJim JagielskiROWS = [ 33*2cb6d6f1SJim Jagielski ("good.odt, goodid.odt (normalized ids) clean", lambda I: not I("good.odt") and not I("goodid.odt")), 34*2cb6d6f1SJim Jagielski ("dupid.odt flags the duplicate after normalization", lambda I: any("duplicates" in m for m in I("dupid.odt"))), 35*2cb6d6f1SJim Jagielski ("badid.odt, badid2.odt flag non-NCName ids", lambda I: all(any("not an NCName" in m for m in I(p)) for p in ("badid.odt", "badid2.odt"))), 36*2cb6d6f1SJim Jagielski ("badns.odt flags the unbound prefix", lambda I: any("unbound prefix" in m for m in I("badns.odt"))), 37*2cb6d6f1SJim Jagielski ("badsig.odt flags a duplicate id in a signature file", lambda I: any("duplicates" in m for m in I("badsig.odt"))), 38*2cb6d6f1SJim Jagielski] 39*2cb6d6f1SJim Jagielski 40*2cb6d6f1SJim Jagielski 41*2cb6d6f1SJim Jagielski@pytest.mark.parametrize("row", [pytest.param(r[1], id=r[0]) for r in ROWS]) 42*2cb6d6f1SJim Jagielskidef test_idcheck_controls(row, ids): 43*2cb6d6f1SJim Jagielski assert row(lambda pkg: ierrs(ids, pkg)) 44*2cb6d6f1SJim Jagielski 45*2cb6d6f1SJim Jagielski 46*2cb6d6f1SJim Jagielskidef test_idcheck_no_errors_in_other_packages(ids): 47*2cb6d6f1SJim Jagielski assert {e[0].split("/")[0] for e in ids["errors"]} == {"dupid.odt", "badid.odt", "badid2.odt", "badns.odt", "badsig.odt"} 48