@openpronoun/conformance 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +99 -0
- package/formatting.json +275 -0
- package/package.json +22 -0
- package/parsing.json +718 -0
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# @openpronoun/conformance
|
|
2
|
+
|
|
3
|
+
Language-agnostic conformance fixtures for the
|
|
4
|
+
[OpenPronoun Specification](https://openpronoun.org): the shared parsing and
|
|
5
|
+
formatting test cases. The canonical schema lives in
|
|
6
|
+
[`@openpronoun/schema`](../schema); fixtures here validate against it. Because the
|
|
7
|
+
fixtures are plain JSON, the reference TypeScript library and any community port
|
|
8
|
+
(Python, Java, Go, …) validate against the exact same expectations.
|
|
9
|
+
|
|
10
|
+
## Contents
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
packages/conformance/
|
|
14
|
+
├── package.json
|
|
15
|
+
├── README.md
|
|
16
|
+
├── parsing.json # input string -> expected PronounPreference
|
|
17
|
+
└── formatting.json # PronounPreference (+ options) -> expected display string
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The schema these validate against is published separately as
|
|
21
|
+
[`@openpronoun/schema`](../schema).
|
|
22
|
+
|
|
23
|
+
## Fixture format
|
|
24
|
+
|
|
25
|
+
Each fixture file is a JSON object:
|
|
26
|
+
|
|
27
|
+
```jsonc
|
|
28
|
+
{
|
|
29
|
+
"kind": "parsing" | "formatting",
|
|
30
|
+
"description": "...",
|
|
31
|
+
"cases": [ /* ... */ ]
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Parsing case** — `expected` is a `PronounPreference` that validates against the
|
|
36
|
+
`@openpronoun/schema` schema. An `expected` of `null` means "no preference" (the
|
|
37
|
+
field is absent), which is distinct from the special `none` preference.
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"category": "single-set",
|
|
42
|
+
"name": "single set, capitalized input",
|
|
43
|
+
"input": "She/Her",
|
|
44
|
+
"expected": [ { "subjective": "she", "objective": "her", "...": "..." } ]
|
|
45
|
+
}
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Formatting case** — `options.form` is one of `short`, `expanded`, or `detailed`.
|
|
49
|
+
`options.audience` (e.g. `"public"`) drives privacy behavior: sets with
|
|
50
|
+
`privacy >= 1` are omitted from a public audience.
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
{
|
|
54
|
+
"name": "single set, short",
|
|
55
|
+
"input": [ { "subjective": "she", "...": "..." } ],
|
|
56
|
+
"options": { "form": "short" },
|
|
57
|
+
"expected": "She/Her"
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## Conformance
|
|
62
|
+
|
|
63
|
+
- **Parser-conformant** implementations must, for every case in `parsing.json`,
|
|
64
|
+
produce output deep-equal to `expected`.
|
|
65
|
+
- **Display-conformant** implementations must, for every case in
|
|
66
|
+
`formatting.json`, produce a string equal to `expected`.
|
|
67
|
+
|
|
68
|
+
See [Conformance](https://openpronoun.org/specification/conformance/) for the full
|
|
69
|
+
requirement list.
|
|
70
|
+
|
|
71
|
+
## Minimal runner (Node.js)
|
|
72
|
+
|
|
73
|
+
A reference parser/formatter exposing `parse(input)` and
|
|
74
|
+
`format(preference, options)` can be checked against the fixtures with roughly:
|
|
75
|
+
|
|
76
|
+
```js
|
|
77
|
+
import assert from "node:assert";
|
|
78
|
+
import { readFileSync } from "node:fs";
|
|
79
|
+
import { parse, format } from "@openpronoun/core"; // your implementation
|
|
80
|
+
|
|
81
|
+
const parsing = JSON.parse(readFileSync(
|
|
82
|
+
new URL("./parsing.json", import.meta.url), "utf8"));
|
|
83
|
+
for (const c of parsing.cases) {
|
|
84
|
+
assert.deepStrictEqual(parse(c.input), c.expected, c.name);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const formatting = JSON.parse(readFileSync(
|
|
88
|
+
new URL("./formatting.json", import.meta.url), "utf8"));
|
|
89
|
+
for (const c of formatting.cases) {
|
|
90
|
+
assert.strictEqual(format(c.input, c.options), c.expected, c.name);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
console.log("All conformance fixtures passed.");
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
> Note: the `expected` values encode the spec's *recommended* canonical forms
|
|
97
|
+
> (e.g. capitalized `She/Her` short display, `No pronouns (use name)` for the
|
|
98
|
+
> `none` preference). Where the spec leaves a choice to the implementation, the
|
|
99
|
+
> fixtures pick one canonical convention so results are comparable across ports.
|
package/formatting.json
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "formatting",
|
|
3
|
+
"description": "Each case maps a PronounPreference plus display options to the expected display string. The 'form' option is one of: short, expanded.",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"name": "single set, short",
|
|
7
|
+
"input": [
|
|
8
|
+
{
|
|
9
|
+
"subjective": "she",
|
|
10
|
+
"objective": "her",
|
|
11
|
+
"possessive_adjective": "her",
|
|
12
|
+
"possessive_pronoun": "hers",
|
|
13
|
+
"reflexive": "herself"
|
|
14
|
+
}
|
|
15
|
+
],
|
|
16
|
+
"options": {
|
|
17
|
+
"form": "short"
|
|
18
|
+
},
|
|
19
|
+
"expected": "She/Her"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "single set, expanded",
|
|
23
|
+
"input": [
|
|
24
|
+
{
|
|
25
|
+
"subjective": "she",
|
|
26
|
+
"objective": "her",
|
|
27
|
+
"possessive_adjective": "her",
|
|
28
|
+
"possessive_pronoun": "hers",
|
|
29
|
+
"reflexive": "herself"
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"options": {
|
|
33
|
+
"form": "expanded"
|
|
34
|
+
},
|
|
35
|
+
"expected": "She/Her/Hers"
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"name": "they/them expanded keeps theirs",
|
|
39
|
+
"input": [
|
|
40
|
+
{
|
|
41
|
+
"subjective": "they",
|
|
42
|
+
"objective": "them",
|
|
43
|
+
"possessive_adjective": "their",
|
|
44
|
+
"possessive_pronoun": "theirs",
|
|
45
|
+
"reflexive": "themselves"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"options": {
|
|
49
|
+
"form": "expanded"
|
|
50
|
+
},
|
|
51
|
+
"expected": "They/Them/Theirs"
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "multiple sets, short, comma-separated",
|
|
55
|
+
"input": [
|
|
56
|
+
{
|
|
57
|
+
"subjective": "she",
|
|
58
|
+
"objective": "her",
|
|
59
|
+
"possessive_adjective": "her",
|
|
60
|
+
"possessive_pronoun": "hers",
|
|
61
|
+
"reflexive": "herself"
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"subjective": "they",
|
|
65
|
+
"objective": "them",
|
|
66
|
+
"possessive_adjective": "their",
|
|
67
|
+
"possessive_pronoun": "theirs",
|
|
68
|
+
"reflexive": "themselves"
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"options": {
|
|
72
|
+
"form": "short"
|
|
73
|
+
},
|
|
74
|
+
"expected": "She/Her, They/Them"
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"name": "ranking determines order",
|
|
78
|
+
"input": [
|
|
79
|
+
{
|
|
80
|
+
"subjective": "she",
|
|
81
|
+
"objective": "her",
|
|
82
|
+
"possessive_adjective": "her",
|
|
83
|
+
"possessive_pronoun": "hers",
|
|
84
|
+
"reflexive": "herself",
|
|
85
|
+
"ranking": 2
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"sub": "they",
|
|
89
|
+
"obj": "them",
|
|
90
|
+
"p_a": "their",
|
|
91
|
+
"p_pn": "theirs",
|
|
92
|
+
"ref": "themselves",
|
|
93
|
+
"rnk": 1
|
|
94
|
+
}
|
|
95
|
+
],
|
|
96
|
+
"options": {
|
|
97
|
+
"form": "short"
|
|
98
|
+
},
|
|
99
|
+
"expected": "They/Them, She/Her"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"name": "context rendered in parentheses",
|
|
103
|
+
"input": [
|
|
104
|
+
{
|
|
105
|
+
"subjective": "he",
|
|
106
|
+
"objective": "him",
|
|
107
|
+
"possessive_adjective": "his",
|
|
108
|
+
"possessive_pronoun": "his",
|
|
109
|
+
"reflexive": "himself",
|
|
110
|
+
"context": "in professional contexts"
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
"subjective": "they",
|
|
114
|
+
"objective": "them",
|
|
115
|
+
"possessive_adjective": "their",
|
|
116
|
+
"possessive_pronoun": "theirs",
|
|
117
|
+
"reflexive": "themselves"
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
"options": {
|
|
121
|
+
"form": "short"
|
|
122
|
+
},
|
|
123
|
+
"expected": "He/Him (in professional contexts), They/Them"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"name": "private set omitted from public display",
|
|
127
|
+
"input": [
|
|
128
|
+
{
|
|
129
|
+
"subjective": "she",
|
|
130
|
+
"objective": "her",
|
|
131
|
+
"possessive_adjective": "her",
|
|
132
|
+
"possessive_pronoun": "hers",
|
|
133
|
+
"reflexive": "herself",
|
|
134
|
+
"privacy": 0
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
"subjective": "they",
|
|
138
|
+
"objective": "them",
|
|
139
|
+
"possessive_adjective": "their",
|
|
140
|
+
"possessive_pronoun": "theirs",
|
|
141
|
+
"reflexive": "themselves",
|
|
142
|
+
"privacy": 1
|
|
143
|
+
}
|
|
144
|
+
],
|
|
145
|
+
"options": {
|
|
146
|
+
"form": "short",
|
|
147
|
+
"audience": "public"
|
|
148
|
+
},
|
|
149
|
+
"expected": "She/Her"
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
"name": "special: any",
|
|
153
|
+
"input": [
|
|
154
|
+
{
|
|
155
|
+
"type": "any"
|
|
156
|
+
}
|
|
157
|
+
],
|
|
158
|
+
"options": {
|
|
159
|
+
"form": "short"
|
|
160
|
+
},
|
|
161
|
+
"expected": "Any pronouns"
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "special: none",
|
|
165
|
+
"input": [
|
|
166
|
+
{
|
|
167
|
+
"type": "none"
|
|
168
|
+
}
|
|
169
|
+
],
|
|
170
|
+
"options": {
|
|
171
|
+
"form": "short"
|
|
172
|
+
},
|
|
173
|
+
"expected": "No pronouns (use name)"
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
"name": "special: ask",
|
|
177
|
+
"input": [
|
|
178
|
+
{
|
|
179
|
+
"type": "ask"
|
|
180
|
+
}
|
|
181
|
+
],
|
|
182
|
+
"options": {
|
|
183
|
+
"form": "short"
|
|
184
|
+
},
|
|
185
|
+
"expected": "Ask me my pronouns"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
"name": "special: unspecified",
|
|
189
|
+
"input": [
|
|
190
|
+
{
|
|
191
|
+
"type": "unspecified"
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"options": {
|
|
195
|
+
"form": "short"
|
|
196
|
+
},
|
|
197
|
+
"expected": "Unspecified"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"name": "excluded set omitted from short display",
|
|
201
|
+
"input": [
|
|
202
|
+
{
|
|
203
|
+
"subjective": "he",
|
|
204
|
+
"objective": "him",
|
|
205
|
+
"possessive_adjective": "his",
|
|
206
|
+
"possessive_pronoun": "his",
|
|
207
|
+
"reflexive": "himself"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"subjective": "she",
|
|
211
|
+
"objective": "her",
|
|
212
|
+
"possessive_adjective": "her",
|
|
213
|
+
"possessive_pronoun": "hers",
|
|
214
|
+
"reflexive": "herself"
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
"subjective": "they",
|
|
218
|
+
"objective": "them",
|
|
219
|
+
"possessive_adjective": "their",
|
|
220
|
+
"possessive_pronoun": "theirs",
|
|
221
|
+
"reflexive": "themselves",
|
|
222
|
+
"exclude": true
|
|
223
|
+
}
|
|
224
|
+
],
|
|
225
|
+
"options": {
|
|
226
|
+
"form": "short"
|
|
227
|
+
},
|
|
228
|
+
"expected": "He/Him, She/Her"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"name": "excluded set surfaced in detailed display",
|
|
232
|
+
"input": [
|
|
233
|
+
{
|
|
234
|
+
"subjective": "he",
|
|
235
|
+
"objective": "him",
|
|
236
|
+
"possessive_adjective": "his",
|
|
237
|
+
"possessive_pronoun": "his",
|
|
238
|
+
"reflexive": "himself"
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
"subjective": "she",
|
|
242
|
+
"objective": "her",
|
|
243
|
+
"possessive_adjective": "her",
|
|
244
|
+
"possessive_pronoun": "hers",
|
|
245
|
+
"reflexive": "herself"
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
"subjective": "they",
|
|
249
|
+
"objective": "them",
|
|
250
|
+
"possessive_adjective": "their",
|
|
251
|
+
"possessive_pronoun": "theirs",
|
|
252
|
+
"reflexive": "themselves",
|
|
253
|
+
"exclude": true
|
|
254
|
+
}
|
|
255
|
+
],
|
|
256
|
+
"options": {
|
|
257
|
+
"form": "detailed"
|
|
258
|
+
},
|
|
259
|
+
"expected": "He/Him, She/Her (not They/Them)"
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"name": "custom displayed verbatim",
|
|
263
|
+
"input": [
|
|
264
|
+
{
|
|
265
|
+
"type": "custom",
|
|
266
|
+
"display": "fae/faer"
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
"options": {
|
|
270
|
+
"form": "short"
|
|
271
|
+
},
|
|
272
|
+
"expected": "Fae/Faer"
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@openpronoun/conformance",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Shared parsing/formatting fixtures for the OpenPronoun specification.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"files": [
|
|
8
|
+
"parsing.json",
|
|
9
|
+
"formatting.json",
|
|
10
|
+
"README.md"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
"./parsing": "./parsing.json",
|
|
14
|
+
"./formatting": "./formatting.json"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@openpronoun/schema": "*"
|
|
18
|
+
},
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
21
|
+
}
|
|
22
|
+
}
|
package/parsing.json
ADDED
|
@@ -0,0 +1,718 @@
|
|
|
1
|
+
{
|
|
2
|
+
"kind": "parsing",
|
|
3
|
+
"description": "Each case maps an input string to the expected normalized PronounPreference output. Inputs are drawn from or modeled on real-world submissions. An expected value of null means 'no preference' (the field is absent), which is distinct from the special 'none' preference.",
|
|
4
|
+
"cases": [
|
|
5
|
+
{
|
|
6
|
+
"category": "single-set",
|
|
7
|
+
"name": "single set, capitalized input",
|
|
8
|
+
"input": "She/Her",
|
|
9
|
+
"expected": [
|
|
10
|
+
{
|
|
11
|
+
"subjective": "she",
|
|
12
|
+
"objective": "her",
|
|
13
|
+
"possessive_adjective": "her",
|
|
14
|
+
"possessive_pronoun": "hers",
|
|
15
|
+
"reflexive": "herself"
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"category": "single-set",
|
|
21
|
+
"name": "single set, lowercase",
|
|
22
|
+
"input": "he/him/his",
|
|
23
|
+
"expected": [
|
|
24
|
+
{
|
|
25
|
+
"subjective": "he",
|
|
26
|
+
"objective": "him",
|
|
27
|
+
"possessive_adjective": "his",
|
|
28
|
+
"possessive_pronoun": "his",
|
|
29
|
+
"reflexive": "himself"
|
|
30
|
+
}
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"category": "single-set",
|
|
35
|
+
"name": "partial set filled from dictionary",
|
|
36
|
+
"input": "they",
|
|
37
|
+
"expected": [
|
|
38
|
+
{
|
|
39
|
+
"subjective": "they",
|
|
40
|
+
"objective": "them",
|
|
41
|
+
"possessive_adjective": "their",
|
|
42
|
+
"possessive_pronoun": "theirs",
|
|
43
|
+
"reflexive": "themselves"
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"category": "single-set",
|
|
49
|
+
"name": "neopronoun set in dictionary",
|
|
50
|
+
"input": "Xe/Xem",
|
|
51
|
+
"expected": [
|
|
52
|
+
{
|
|
53
|
+
"subjective": "xe",
|
|
54
|
+
"objective": "xem",
|
|
55
|
+
"possessive_adjective": "xyr",
|
|
56
|
+
"possessive_pronoun": "xyrs",
|
|
57
|
+
"reflexive": "xemself"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"category": "multi-set-comma",
|
|
63
|
+
"name": "two sets, comma-separated",
|
|
64
|
+
"input": "she/her/hers, he/him/his",
|
|
65
|
+
"expected": [
|
|
66
|
+
{
|
|
67
|
+
"subjective": "she",
|
|
68
|
+
"objective": "her",
|
|
69
|
+
"possessive_adjective": "her",
|
|
70
|
+
"possessive_pronoun": "hers",
|
|
71
|
+
"reflexive": "herself"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"subjective": "he",
|
|
75
|
+
"objective": "him",
|
|
76
|
+
"possessive_adjective": "his",
|
|
77
|
+
"possessive_pronoun": "his",
|
|
78
|
+
"reflexive": "himself"
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"category": "multi-set-comma",
|
|
84
|
+
"name": "three sets, comma-separated (most common real shape)",
|
|
85
|
+
"input": "they/them/theirs, he/him/his, she/her/hers",
|
|
86
|
+
"expected": [
|
|
87
|
+
{
|
|
88
|
+
"subjective": "they",
|
|
89
|
+
"objective": "them",
|
|
90
|
+
"possessive_adjective": "their",
|
|
91
|
+
"possessive_pronoun": "theirs",
|
|
92
|
+
"reflexive": "themselves"
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
"subjective": "he",
|
|
96
|
+
"objective": "him",
|
|
97
|
+
"possessive_adjective": "his",
|
|
98
|
+
"possessive_pronoun": "his",
|
|
99
|
+
"reflexive": "himself"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"subjective": "she",
|
|
103
|
+
"objective": "her",
|
|
104
|
+
"possessive_adjective": "her",
|
|
105
|
+
"possessive_pronoun": "hers",
|
|
106
|
+
"reflexive": "herself"
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"category": "multi-set-and",
|
|
112
|
+
"name": "two sets separated by 'and'",
|
|
113
|
+
"input": "he/him and they/them",
|
|
114
|
+
"expected": [
|
|
115
|
+
{
|
|
116
|
+
"subjective": "he",
|
|
117
|
+
"objective": "him",
|
|
118
|
+
"possessive_adjective": "his",
|
|
119
|
+
"possessive_pronoun": "his",
|
|
120
|
+
"reflexive": "himself"
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"subjective": "they",
|
|
124
|
+
"objective": "them",
|
|
125
|
+
"possessive_adjective": "their",
|
|
126
|
+
"possessive_pronoun": "theirs",
|
|
127
|
+
"reflexive": "themselves"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"category": "multi-set-ampersand",
|
|
133
|
+
"name": "two sets separated by '&'",
|
|
134
|
+
"input": "he/him/his & she/her/hers",
|
|
135
|
+
"expected": [
|
|
136
|
+
{
|
|
137
|
+
"subjective": "he",
|
|
138
|
+
"objective": "him",
|
|
139
|
+
"possessive_adjective": "his",
|
|
140
|
+
"possessive_pronoun": "his",
|
|
141
|
+
"reflexive": "himself"
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"subjective": "she",
|
|
145
|
+
"objective": "her",
|
|
146
|
+
"possessive_adjective": "her",
|
|
147
|
+
"possessive_pronoun": "hers",
|
|
148
|
+
"reflexive": "herself"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"category": "multi-set-or",
|
|
154
|
+
"name": "two sets separated by 'or'",
|
|
155
|
+
"input": "she/her or he/him",
|
|
156
|
+
"expected": [
|
|
157
|
+
{
|
|
158
|
+
"subjective": "she",
|
|
159
|
+
"objective": "her",
|
|
160
|
+
"possessive_adjective": "her",
|
|
161
|
+
"possessive_pronoun": "hers",
|
|
162
|
+
"reflexive": "herself"
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
"subjective": "he",
|
|
166
|
+
"objective": "him",
|
|
167
|
+
"possessive_adjective": "his",
|
|
168
|
+
"possessive_pronoun": "his",
|
|
169
|
+
"reflexive": "himself"
|
|
170
|
+
}
|
|
171
|
+
]
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"category": "multi-set-or",
|
|
175
|
+
"name": "bare subjectives joined by 'or'",
|
|
176
|
+
"input": "he or they",
|
|
177
|
+
"expected": [
|
|
178
|
+
{
|
|
179
|
+
"subjective": "he",
|
|
180
|
+
"objective": "him",
|
|
181
|
+
"possessive_adjective": "his",
|
|
182
|
+
"possessive_pronoun": "his",
|
|
183
|
+
"reflexive": "himself"
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"subjective": "they",
|
|
187
|
+
"objective": "them",
|
|
188
|
+
"possessive_adjective": "their",
|
|
189
|
+
"possessive_pronoun": "theirs",
|
|
190
|
+
"reflexive": "themselves"
|
|
191
|
+
}
|
|
192
|
+
]
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
"category": "multi-set-space",
|
|
196
|
+
"name": "two sets separated by whitespace only",
|
|
197
|
+
"input": "he she",
|
|
198
|
+
"expected": [
|
|
199
|
+
{
|
|
200
|
+
"subjective": "he",
|
|
201
|
+
"objective": "him",
|
|
202
|
+
"possessive_adjective": "his",
|
|
203
|
+
"possessive_pronoun": "his",
|
|
204
|
+
"reflexive": "himself"
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
"subjective": "she",
|
|
208
|
+
"objective": "her",
|
|
209
|
+
"possessive_adjective": "her",
|
|
210
|
+
"possessive_pronoun": "hers",
|
|
211
|
+
"reflexive": "herself"
|
|
212
|
+
}
|
|
213
|
+
]
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"category": "multi-set-space",
|
|
217
|
+
"name": "two slash-sets separated by whitespace",
|
|
218
|
+
"input": "she/her they/them",
|
|
219
|
+
"expected": [
|
|
220
|
+
{
|
|
221
|
+
"subjective": "she",
|
|
222
|
+
"objective": "her",
|
|
223
|
+
"possessive_adjective": "her",
|
|
224
|
+
"possessive_pronoun": "hers",
|
|
225
|
+
"reflexive": "herself"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"subjective": "they",
|
|
229
|
+
"objective": "them",
|
|
230
|
+
"possessive_adjective": "their",
|
|
231
|
+
"possessive_pronoun": "theirs",
|
|
232
|
+
"reflexive": "themselves"
|
|
233
|
+
}
|
|
234
|
+
]
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
"category": "concatenation-split",
|
|
238
|
+
"name": "two sets jammed with slashes",
|
|
239
|
+
"input": "they/them/he/him",
|
|
240
|
+
"expected": [
|
|
241
|
+
{
|
|
242
|
+
"subjective": "they",
|
|
243
|
+
"objective": "them",
|
|
244
|
+
"possessive_adjective": "their",
|
|
245
|
+
"possessive_pronoun": "theirs",
|
|
246
|
+
"reflexive": "themselves"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
"subjective": "he",
|
|
250
|
+
"objective": "him",
|
|
251
|
+
"possessive_adjective": "his",
|
|
252
|
+
"possessive_pronoun": "his",
|
|
253
|
+
"reflexive": "himself"
|
|
254
|
+
}
|
|
255
|
+
]
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"category": "concatenation-split",
|
|
259
|
+
"name": "three bare subjectives via slashes",
|
|
260
|
+
"input": "he/she/they",
|
|
261
|
+
"expected": [
|
|
262
|
+
{
|
|
263
|
+
"subjective": "he",
|
|
264
|
+
"objective": "him",
|
|
265
|
+
"possessive_adjective": "his",
|
|
266
|
+
"possessive_pronoun": "his",
|
|
267
|
+
"reflexive": "himself"
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"subjective": "she",
|
|
271
|
+
"objective": "her",
|
|
272
|
+
"possessive_adjective": "her",
|
|
273
|
+
"possessive_pronoun": "hers",
|
|
274
|
+
"reflexive": "herself"
|
|
275
|
+
},
|
|
276
|
+
{
|
|
277
|
+
"subjective": "they",
|
|
278
|
+
"objective": "them",
|
|
279
|
+
"possessive_adjective": "their",
|
|
280
|
+
"possessive_pronoun": "theirs",
|
|
281
|
+
"reflexive": "themselves"
|
|
282
|
+
}
|
|
283
|
+
]
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
"category": "separator-backslash",
|
|
287
|
+
"name": "backslash used like slash",
|
|
288
|
+
"input": "they\\them",
|
|
289
|
+
"expected": [
|
|
290
|
+
{
|
|
291
|
+
"subjective": "they",
|
|
292
|
+
"objective": "them",
|
|
293
|
+
"possessive_adjective": "their",
|
|
294
|
+
"possessive_pronoun": "theirs",
|
|
295
|
+
"reflexive": "themselves"
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
"category": "whitespace-in-separator",
|
|
301
|
+
"name": "spaces around slashes",
|
|
302
|
+
"input": "they/ them/ theirs",
|
|
303
|
+
"expected": [
|
|
304
|
+
{
|
|
305
|
+
"subjective": "they",
|
|
306
|
+
"objective": "them",
|
|
307
|
+
"possessive_adjective": "their",
|
|
308
|
+
"possessive_pronoun": "theirs",
|
|
309
|
+
"reflexive": "themselves"
|
|
310
|
+
}
|
|
311
|
+
]
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
"category": "whitespace-in-separator",
|
|
315
|
+
"name": "spaced shorthand",
|
|
316
|
+
"input": "she / they",
|
|
317
|
+
"expected": [
|
|
318
|
+
{
|
|
319
|
+
"subjective": "she",
|
|
320
|
+
"objective": "her",
|
|
321
|
+
"possessive_adjective": "her",
|
|
322
|
+
"possessive_pronoun": "hers",
|
|
323
|
+
"reflexive": "herself"
|
|
324
|
+
},
|
|
325
|
+
{
|
|
326
|
+
"subjective": "they",
|
|
327
|
+
"objective": "them",
|
|
328
|
+
"possessive_adjective": "their",
|
|
329
|
+
"possessive_pronoun": "theirs",
|
|
330
|
+
"reflexive": "themselves"
|
|
331
|
+
}
|
|
332
|
+
]
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
"category": "leading-empty-element",
|
|
336
|
+
"name": "leading comma yields one set",
|
|
337
|
+
"input": ", He/him",
|
|
338
|
+
"expected": [
|
|
339
|
+
{
|
|
340
|
+
"subjective": "he",
|
|
341
|
+
"objective": "him",
|
|
342
|
+
"possessive_adjective": "his",
|
|
343
|
+
"possessive_pronoun": "his",
|
|
344
|
+
"reflexive": "himself"
|
|
345
|
+
}
|
|
346
|
+
]
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"category": "leading-empty-element",
|
|
350
|
+
"name": "leading comma with concatenated sets",
|
|
351
|
+
"input": ", He/She/They",
|
|
352
|
+
"expected": [
|
|
353
|
+
{
|
|
354
|
+
"subjective": "he",
|
|
355
|
+
"objective": "him",
|
|
356
|
+
"possessive_adjective": "his",
|
|
357
|
+
"possessive_pronoun": "his",
|
|
358
|
+
"reflexive": "himself"
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
"subjective": "she",
|
|
362
|
+
"objective": "her",
|
|
363
|
+
"possessive_adjective": "her",
|
|
364
|
+
"possessive_pronoun": "hers",
|
|
365
|
+
"reflexive": "herself"
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
"subjective": "they",
|
|
369
|
+
"objective": "them",
|
|
370
|
+
"possessive_adjective": "their",
|
|
371
|
+
"possessive_pronoun": "theirs",
|
|
372
|
+
"reflexive": "themselves"
|
|
373
|
+
}
|
|
374
|
+
]
|
|
375
|
+
},
|
|
376
|
+
{
|
|
377
|
+
"category": "context-parenthetical",
|
|
378
|
+
"name": "context captured from parentheses",
|
|
379
|
+
"input": "she/her (only in professional settings)",
|
|
380
|
+
"expected": [
|
|
381
|
+
{
|
|
382
|
+
"subjective": "she",
|
|
383
|
+
"objective": "her",
|
|
384
|
+
"possessive_adjective": "her",
|
|
385
|
+
"possessive_pronoun": "hers",
|
|
386
|
+
"reflexive": "herself",
|
|
387
|
+
"context": "only in professional settings"
|
|
388
|
+
}
|
|
389
|
+
]
|
|
390
|
+
},
|
|
391
|
+
{
|
|
392
|
+
"category": "special-any",
|
|
393
|
+
"name": "special: any keyword",
|
|
394
|
+
"input": "Any pronoun",
|
|
395
|
+
"expected": [
|
|
396
|
+
{
|
|
397
|
+
"type": "any"
|
|
398
|
+
}
|
|
399
|
+
]
|
|
400
|
+
},
|
|
401
|
+
{
|
|
402
|
+
"category": "special-any",
|
|
403
|
+
"name": "special: any via any/all",
|
|
404
|
+
"input": "any/all",
|
|
405
|
+
"expected": [
|
|
406
|
+
{
|
|
407
|
+
"type": "any"
|
|
408
|
+
}
|
|
409
|
+
]
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
"category": "special-any",
|
|
413
|
+
"name": "special: any via phrase",
|
|
414
|
+
"input": "whatever you feel comfortable",
|
|
415
|
+
"expected": [
|
|
416
|
+
{
|
|
417
|
+
"type": "any"
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
"category": "special-any",
|
|
423
|
+
"name": "special: any via 'i go by all'",
|
|
424
|
+
"input": "i go by all",
|
|
425
|
+
"expected": [
|
|
426
|
+
{
|
|
427
|
+
"type": "any"
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
},
|
|
431
|
+
{
|
|
432
|
+
"category": "special-any",
|
|
433
|
+
"name": "special: any with filler",
|
|
434
|
+
"input": "any and all pronouns",
|
|
435
|
+
"expected": [
|
|
436
|
+
{
|
|
437
|
+
"type": "any"
|
|
438
|
+
}
|
|
439
|
+
]
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"category": "special-none",
|
|
443
|
+
"name": "special: none via 'no pronouns'",
|
|
444
|
+
"input": "no pronouns",
|
|
445
|
+
"expected": [
|
|
446
|
+
{
|
|
447
|
+
"type": "none"
|
|
448
|
+
}
|
|
449
|
+
]
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"category": "special-none",
|
|
453
|
+
"name": "special: none with use-name note",
|
|
454
|
+
"input": "none, refer to me by name",
|
|
455
|
+
"expected": [
|
|
456
|
+
{
|
|
457
|
+
"type": "none"
|
|
458
|
+
}
|
|
459
|
+
]
|
|
460
|
+
},
|
|
461
|
+
{
|
|
462
|
+
"category": "special-none",
|
|
463
|
+
"name": "special: none via 'use my name'",
|
|
464
|
+
"input": "use my name",
|
|
465
|
+
"expected": [
|
|
466
|
+
{
|
|
467
|
+
"type": "none"
|
|
468
|
+
}
|
|
469
|
+
]
|
|
470
|
+
},
|
|
471
|
+
{
|
|
472
|
+
"category": "special-ask",
|
|
473
|
+
"name": "special: ask",
|
|
474
|
+
"input": "ask me",
|
|
475
|
+
"expected": [
|
|
476
|
+
{
|
|
477
|
+
"type": "ask"
|
|
478
|
+
}
|
|
479
|
+
]
|
|
480
|
+
},
|
|
481
|
+
{
|
|
482
|
+
"category": "special-unspecified",
|
|
483
|
+
"name": "special: unspecified via 'unsure'",
|
|
484
|
+
"input": "unsure",
|
|
485
|
+
"expected": [
|
|
486
|
+
{
|
|
487
|
+
"type": "unspecified"
|
|
488
|
+
}
|
|
489
|
+
]
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"category": "special-unspecified",
|
|
493
|
+
"name": "special: unspecified via decline",
|
|
494
|
+
"input": "prefer not to disclose",
|
|
495
|
+
"expected": [
|
|
496
|
+
{
|
|
497
|
+
"type": "unspecified"
|
|
498
|
+
}
|
|
499
|
+
]
|
|
500
|
+
},
|
|
501
|
+
{
|
|
502
|
+
"category": "special-unspecified",
|
|
503
|
+
"name": "special: unspecified via 'not sure yet'",
|
|
504
|
+
"input": "not sure yet",
|
|
505
|
+
"expected": [
|
|
506
|
+
{
|
|
507
|
+
"type": "unspecified"
|
|
508
|
+
}
|
|
509
|
+
]
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"category": "form-recovery",
|
|
513
|
+
"name": "objective forms recovered to two sets",
|
|
514
|
+
"input": "him/her",
|
|
515
|
+
"expected": [
|
|
516
|
+
{
|
|
517
|
+
"subjective": "he",
|
|
518
|
+
"objective": "him",
|
|
519
|
+
"possessive_adjective": "his",
|
|
520
|
+
"possessive_pronoun": "his",
|
|
521
|
+
"reflexive": "himself"
|
|
522
|
+
},
|
|
523
|
+
{
|
|
524
|
+
"subjective": "she",
|
|
525
|
+
"objective": "her",
|
|
526
|
+
"possessive_adjective": "her",
|
|
527
|
+
"possessive_pronoun": "hers",
|
|
528
|
+
"reflexive": "herself"
|
|
529
|
+
}
|
|
530
|
+
]
|
|
531
|
+
},
|
|
532
|
+
{
|
|
533
|
+
"category": "form-recovery",
|
|
534
|
+
"name": "duplicate set collapsed",
|
|
535
|
+
"input": "her/she",
|
|
536
|
+
"expected": [
|
|
537
|
+
{
|
|
538
|
+
"subjective": "she",
|
|
539
|
+
"objective": "her",
|
|
540
|
+
"possessive_adjective": "her",
|
|
541
|
+
"possessive_pronoun": "hers",
|
|
542
|
+
"reflexive": "herself"
|
|
543
|
+
}
|
|
544
|
+
]
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"category": "form-recovery",
|
|
548
|
+
"name": "scrambled comma-separated forms",
|
|
549
|
+
"input": "she,her,he,him",
|
|
550
|
+
"expected": [
|
|
551
|
+
{
|
|
552
|
+
"subjective": "she",
|
|
553
|
+
"objective": "her",
|
|
554
|
+
"possessive_adjective": "her",
|
|
555
|
+
"possessive_pronoun": "hers",
|
|
556
|
+
"reflexive": "herself"
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"subjective": "he",
|
|
560
|
+
"objective": "him",
|
|
561
|
+
"possessive_adjective": "his",
|
|
562
|
+
"possessive_pronoun": "his",
|
|
563
|
+
"reflexive": "himself"
|
|
564
|
+
}
|
|
565
|
+
]
|
|
566
|
+
},
|
|
567
|
+
{
|
|
568
|
+
"category": "filler-stripping",
|
|
569
|
+
"name": "trailing 'is fine' filler stripped",
|
|
570
|
+
"input": "he/him is fine",
|
|
571
|
+
"expected": [
|
|
572
|
+
{
|
|
573
|
+
"subjective": "he",
|
|
574
|
+
"objective": "him",
|
|
575
|
+
"possessive_adjective": "his",
|
|
576
|
+
"possessive_pronoun": "his",
|
|
577
|
+
"reflexive": "himself"
|
|
578
|
+
}
|
|
579
|
+
]
|
|
580
|
+
},
|
|
581
|
+
{
|
|
582
|
+
"category": "filler-stripping",
|
|
583
|
+
"name": "set plus 'also' filler across comma",
|
|
584
|
+
"input": "she/her/hers, he/him/his also",
|
|
585
|
+
"expected": [
|
|
586
|
+
{
|
|
587
|
+
"subjective": "she",
|
|
588
|
+
"objective": "her",
|
|
589
|
+
"possessive_adjective": "her",
|
|
590
|
+
"possessive_pronoun": "hers",
|
|
591
|
+
"reflexive": "herself"
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"subjective": "he",
|
|
595
|
+
"objective": "him",
|
|
596
|
+
"possessive_adjective": "his",
|
|
597
|
+
"possessive_pronoun": "his",
|
|
598
|
+
"reflexive": "himself"
|
|
599
|
+
}
|
|
600
|
+
]
|
|
601
|
+
},
|
|
602
|
+
{
|
|
603
|
+
"category": "filler-stripping",
|
|
604
|
+
"name": "'Any is fine' resolves to any",
|
|
605
|
+
"input": "Any is fine",
|
|
606
|
+
"expected": [
|
|
607
|
+
{
|
|
608
|
+
"type": "any"
|
|
609
|
+
}
|
|
610
|
+
]
|
|
611
|
+
},
|
|
612
|
+
{
|
|
613
|
+
"category": "exclusion",
|
|
614
|
+
"name": "positive sets plus excluded set",
|
|
615
|
+
"input": "he/him or she/her, just not they/them",
|
|
616
|
+
"expected": [
|
|
617
|
+
{
|
|
618
|
+
"subjective": "he",
|
|
619
|
+
"objective": "him",
|
|
620
|
+
"possessive_adjective": "his",
|
|
621
|
+
"possessive_pronoun": "his",
|
|
622
|
+
"reflexive": "himself"
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
"subjective": "she",
|
|
626
|
+
"objective": "her",
|
|
627
|
+
"possessive_adjective": "her",
|
|
628
|
+
"possessive_pronoun": "hers",
|
|
629
|
+
"reflexive": "herself"
|
|
630
|
+
},
|
|
631
|
+
{
|
|
632
|
+
"subjective": "they",
|
|
633
|
+
"objective": "them",
|
|
634
|
+
"possessive_adjective": "their",
|
|
635
|
+
"possessive_pronoun": "theirs",
|
|
636
|
+
"reflexive": "themselves",
|
|
637
|
+
"exclude": true
|
|
638
|
+
}
|
|
639
|
+
]
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
"category": "placeholder",
|
|
643
|
+
"name": "placeholder-only input yields no preference",
|
|
644
|
+
"input": "N/A",
|
|
645
|
+
"expected": null
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"category": "valid-plus-garbage",
|
|
649
|
+
"name": "recognized set plus unrecognized token",
|
|
650
|
+
"input": "they/them/theirs, Reading",
|
|
651
|
+
"expected": [
|
|
652
|
+
{
|
|
653
|
+
"subjective": "they",
|
|
654
|
+
"objective": "them",
|
|
655
|
+
"possessive_adjective": "their",
|
|
656
|
+
"possessive_pronoun": "theirs",
|
|
657
|
+
"reflexive": "themselves"
|
|
658
|
+
},
|
|
659
|
+
{
|
|
660
|
+
"type": "custom",
|
|
661
|
+
"display": "Reading"
|
|
662
|
+
}
|
|
663
|
+
]
|
|
664
|
+
},
|
|
665
|
+
{
|
|
666
|
+
"category": "valid-plus-garbage",
|
|
667
|
+
"name": "recognized set plus numeric noise",
|
|
668
|
+
"input": "she/her/hers, 12345",
|
|
669
|
+
"expected": [
|
|
670
|
+
{
|
|
671
|
+
"subjective": "she",
|
|
672
|
+
"objective": "her",
|
|
673
|
+
"possessive_adjective": "her",
|
|
674
|
+
"possessive_pronoun": "hers",
|
|
675
|
+
"reflexive": "herself"
|
|
676
|
+
},
|
|
677
|
+
{
|
|
678
|
+
"type": "custom",
|
|
679
|
+
"display": "12345"
|
|
680
|
+
}
|
|
681
|
+
]
|
|
682
|
+
},
|
|
683
|
+
{
|
|
684
|
+
"category": "unrecognized-custom",
|
|
685
|
+
"name": "unknown noun-self set preserved as custom",
|
|
686
|
+
"input": "fox/foxs",
|
|
687
|
+
"expected": [
|
|
688
|
+
{
|
|
689
|
+
"type": "custom",
|
|
690
|
+
"display": "fox/foxs"
|
|
691
|
+
}
|
|
692
|
+
]
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
"category": "unrecognized-custom",
|
|
696
|
+
"name": "non-pronoun text preserved as custom",
|
|
697
|
+
"input": "david",
|
|
698
|
+
"expected": [
|
|
699
|
+
{
|
|
700
|
+
"type": "custom",
|
|
701
|
+
"display": "david"
|
|
702
|
+
}
|
|
703
|
+
]
|
|
704
|
+
},
|
|
705
|
+
{
|
|
706
|
+
"category": "empty",
|
|
707
|
+
"name": "empty input yields no preference",
|
|
708
|
+
"input": "",
|
|
709
|
+
"expected": null
|
|
710
|
+
},
|
|
711
|
+
{
|
|
712
|
+
"category": "empty",
|
|
713
|
+
"name": "whitespace-only input yields no preference",
|
|
714
|
+
"input": " ",
|
|
715
|
+
"expected": null
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
}
|