Reftest chains and cycles

(Bcc'd public-css-testsuite; given we previously decided to unify this
and we're soon merging into web-platform-tests, let's handle
everything on public-test-infra)

For background, see [0].

At the moment, we don't disallow cycles. Until recently, the
documentation recommended them (pretty sure my removing that was
accidental, given I think in principle the CSS WG still prefers them,
though see the below!).

Presently, web-platform-tests has none (okay, it has one self-loop!)
after we removed them a couple of months ago (there were only eight,
all by one author… and far more self-loops).

csswg-test has these[1] cycles; they mostly contain only two nodes,
except for the one self-loop. The majority of these are two related
refs pointing to each other, which seems reasonable enough; there's
also a bunch of tests that just point at each other[2], which is
entirely ineffectual (they'll either both pass or neither pass, after
all!). As such, I think we should ban cycles containing tests. (This
is strictly harsher than we need, but I don't think there's any
disadvantage to this, given we've never actually done what the
documentation recommended, and was never really feasible.)

I don't think I really need to say much about self-loops: they're
either tautologies or contradiction, depending on whether they're
match or mismatch refs, so they're totally useless and should be
disallowed.

See [3] for a list of all edges in the reftest graph that point at
somewhere that doesn't look like a reference (again, w-p-t has none of
these). Most of these are what we expect from the cycles, along with a
bunch of tests pointing at: support/reftest-border-image-5.png,
support/pass.xht, or blank.html. (We only consider files in /reftest/
or /reference/ to universally be references, not support, though that
does disqualify them from being tests.)

The only particularly notable thing in that is we have a test pointing
to another test as a reference:
/css-transforms-1/transform3d-perspective-origin-001.html points to
/css-transforms-1/transform3d-rotatex-perspective-001.html—but that
graph is largely non-sensical (see reachable.png, attached; remember
that multiple outgoing edges from a node are *alternates*, and as such
you can remove the edges to transform3d-rotatex-perspective-001.html
and transform3d-rotatex-ref.html without actually changing the pass
condition of the suite!).

Another interesting case we had until recently was having
at-charset-002, -003, etc. pointing at -001, which pointed to
-001-ref. Them pointing to -001 wasn't actually testing anything,
hence they now all point at -001-ref directly.

As such, the only cases we have of tests being references are pretty
nonsensical: we have a bunch which are all cycles (i.e., two
equivalent tests), and we have a test which partakes in a graph where
half the alternates are semantically equivalent. Is there any case
where someone actually wants to write a test that points to another
test which actually increases coverage of the testsuite? Notably,
test_a.html -> test_b.html -> ref_b.html provides identical coverage
to test_a.html -> ref_b.html and test_b.html -> ref_b.html (because we
can infer that test_a == test_b if both pass).

If not, I think we should require all resources at match/mismatch URLs
(of either a test or a ref) to be refs, which also means we don't need
any rules about filenames (except for enforcing this!) as tests are
just the source nodes in the graph.

Thoughts/opinions on any of the above, plz and thx.

/gsnedders

[0]: https://lists.w3.org/Archives/Public/public-test-infra/2015JanMar/0016.html
[1]: https://gist.github.com/gsnedders/b52b5c2ae48f9f70beabe858003b352c
[2]: https://github.com/w3c/csswg-test/issues/1127
[3]: https://gist.github.com/gsnedders/fad6a1fa677cc627817c2d3b772ae1d1

Received on Wednesday, 16 November 2016 14:48:11 UTC