Skip to content

Add test cases for attribute specs that fail on grammar - #148

Merged
jgm merged 1 commit into
jgm:mainfrom
karlb:test-invalid-attribute-specs
Aug 17, 2026
Merged

jgm merged 1 commit into
jgm:mainfrom
karlb:test-invalid-attribute-specs

Conversation

@karlb

@karlb karlb commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

The "Non-attributes" cases all fail for want of a closing brace, and the terminated specs that are rejected elsewhere -- {#a<b} above, and spans.test's [not a span]{#a<b} -- fail on an invalid character in a name. A spec that is terminated and whose characters are all legal, but whose contents aren't attributes, is a third way to fail: it leaves SCANNING_KEY or SCANNING_VALUE with no value to take. That path isn't covered.

A bare key has no = at all; key= has one with nothing after it. Note the emptiness is what a bare value can't be -- {key=""} is accepted and yields key="" -- so {key=} is the case that pins it.

The block form is here for the same reason as the {a=x + "# non-heading" case above it, plus one thing that case can't show: a spec holding a valid attribute alongside an invalid one applies neither, so .a is not a class and the heading below stays literal.

The "Non-attributes" cases all fail for want of a closing brace, and the
terminated specs that are rejected elsewhere -- {#a<b} above, and
spans.test's [not a span]{#a<b} -- fail on an invalid character in a
name. A spec that is terminated and whose characters are all legal, but
whose contents aren't attributes, is a third way to fail: it leaves
SCANNING_KEY or SCANNING_VALUE with no value to take. That path isn't
covered.

A bare key has no `=` at all; `key=` has one with nothing after it. Note
the emptiness is what a *bare* value can't be -- `{key=""}` is accepted
and yields key="" -- so `{key=}` is the case that pins it.

The block form is here for the same reason as the `{a=x` + "# non-heading"
case above it, plus one thing that case can't show: a spec holding a
valid attribute alongside an invalid one applies neither, so `.a` is not
a class and the heading below stays literal.

All three pass on main.
@jgm
jgm merged commit 25e0548 into jgm:main Aug 17, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants