{"tests": [ {"description": "contextmenu points to valid ID earlier", "input": "<menu id=a><span contextmenu=a>", "fail-if": "id-does-not-exist"}, {"description": "contextmenu points to valid ID later", "input": "<span contextmenu=a><menu id=a>", "fail-if": "id-does-not-exist"}, {"description": "contextmenu points to non-existent ID", "input": "<span contextmenu=a>", "fail-unless": "id-does-not-exist"}, {"description": "contextmenu points to ID on non-menu element", "input": "<span id=a><span contextmenu=a>", "fail-unless": "contextmenu-must-point-to-menu"}, {"description": "uppercase contextmenu points to ID on non-menu element", "input": "<span id=a><span CONTEXTMENU=a>", "fail-unless": "contextmenu-must-point-to-menu"}, {"description": "valid ID 'a'", "input": "<span contextmenu=a>", "fail-if": "invalid-attribute-value"}, {"description": "valid ID '1'", "input": "<span contextmenu=1>", "fail-if": "invalid-attribute-value"}, {"description": "wacky but valid ID", "input": "<span contextmenu='<html><head><title>a</title></head><body><p>b</p></body></html>'>", "fail-if": "invalid-attribute-value"}, {"description": "invalid blank ID", "input": "<span id>", "fail-unless": "attribute-value-can-not-be-blank"}, {"description": "invalid blank ID with quotes", "input": "<span contextmenu=''>", "fail-unless": "attribute-value-can-not-be-blank"}, {"description": "invalid ID because of leading space", "input": "<span contextmenu=' a'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing space", "input": "<span contextmenu='a '>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of space in value", "input": "<span contextmenu='a b'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of leading tab", "input": "<span contextmenu='\ta'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing tab", "input": "<span contextmenu='a\t'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of tab in value", "input": "<span contextmenu='a\tb'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of leading LF", "input": "<span contextmenu='\na'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing LF", "input": "<span contextmenu='a\n'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of LF in value", "input": "<span contextmenu='a\nb'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of leading LT", "input": "<span contextmenu='\u000Ba'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing LT", "input": "<span contextmenu='a\u000B'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of LT in value", "input": "<span contextmenu='a\u000Bb'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of leading FF", "input": "<span contextmenu='\u000Ca'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing FF", "input": "<span contextmenu='a\u000C'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of FF in value", "input": "<span contextmenu='a\u000Cb'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of leading CR", "input": "<span contextmenu='\ra'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of trailing CR", "input": "<span contextmenu='a\r'>", "fail-unless": "space-in-id"}, {"description": "invalid ID because of CR in value", "input": "<span contextmenu='a\rb'>", "fail-unless": "space-in-id"} ]}