Compare commits

..

1 commit

Author SHA1 Message Date
Simon Brooke 0ae34c8ac1 Brought documentation up to date 2023-01-10 02:15:29 +00:00
35 changed files with 3894 additions and 1409 deletions

View file

@ -42,7 +42,7 @@ Note, though, that internationalisation files for languages other than British E
The following severity levels are understood: The following severity levels are understood:
0. `info` things which are not actuallys fault, but issues noted during 0. `info` things which are not actually faults, but issues noted during
validation; validation;
1. `minor` things which I consider to be faults, but which 1. `minor` things which I consider to be faults, but which
don't actually breach the spec; don't actually breach the spec;

View file

@ -2,95 +2,90 @@
{"dog_and_duck/quack/picky/constants.clj": {"dog_and_duck/quack/picky/constants.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null,
null, 1, null, null, null, null, 1, null, null, null, null, null, 1, null, null, null, null, null, 1, null, null, null, null, 1, null,
null, null, null, 1, null, 1, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, 1, null, 1, null, null,
null, null, null, null, null, 1, null, 1, null, 1, 1, 1, 1, 1, 1, null, null, 1, null, null, null, null, null, null, null, null, null,
null, 1, null, null, null, null, 1, null, null, null, null, 1, null, null, null, 1, null, 1, null, 1, 1, 1, 1, 1, 1, null, 1, null, null,
null, null, null], null, null, 1, null, null, null, null, 1, null, null, null, null, 1,
null, null, null, null, null, 1, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, 1, null, null,
null, 1, null],
"dog_and_duck/quack/picky/utils.clj": "dog_and_duck/quack/picky/utils.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, 1, null, null,
null, null, 7, null, 1, null, null, null, 0, null, 1, null, null, 7, null, 1, null, null, null, 1023, null, 1, null, null, null, true,
null, null, null, 0, 0, 0, 0, 0, null, 1, null, null, 0, 0, 0, null, null, 1, null, null, null, null, null, null, null, null, null, true,
null, null, null, true, null, null, 0, null, null, 1, null, null, 1023, 1023, true, true, true, 1023, 140, null, 1, null, null, true,
null, 4, null, 1, null, null, null, 0, 0, 0, 0, null, 1, null, null, 408, 352, null, null, null, null, 125, 122, 70, null, null, null,
null, 3, 3, true, 3, null, 1, null, null, null, true, true, 45, 45, true, null, null, 0, null, null, 1, null, null, null, 74, null, 1,
45, 70, 45, null, 0, 0, null, 0, 0, null, 1, null, null, null, null, null, null, null, 70, 70, true, 70, null, 1, null, null, null, 3, 3,
null, null, true, 162, 66, true, 6, null, null, null, 53, null, true, 3, null, 1, null, null, null, true, 0, null, 0, 0, 16, true,
null, 3, null, 1, null, null, null, null, null, null, null, null, 11, 11, 11, true, 21, null, 11, null, 0, 0, null, 0, 0, null, 1,
220, 220, 220, 220, null, 220, null, 220, null, 220, 220, true, null, null, null, null, null, null, true, 56, 47, true, 8, null,
null, 0, 0, null, 53, null, null, 2, 2, null, 1, null, null, null, null, null, 1, null, null, 1, null, 1, null, null, null, null, null,
true, null, 1, null, null, null, null, null, null, 0, 0, 0, 0, 0, 0, null, null, null, 99, 99, 99, 99, null, 99, null, 99, null, 99, 99,
0, 0, 0, null, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, null, true, null, 0, 0, null, 115, null, null, 2, 2, null, 1, null, null,
null, null, null, null, null, 0, 0, null, 0, null, 3, null, null, null, true, null, 1, null, null, null, null, null, null, 12, 12, 12,
null, 3, null, 1, null, null, null, null, null, 0, null, 0, 0, null, true, true, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 1, null, 1,
null, 1, null, null, null, null, null, null, true, 53, 53, 53, 3, null, null, null, null, null, null, null, null, null, 1, 1, null, 1,
53, 53, 41, 53, 9, 53, 16, null, 0, 0, 0, 0, 0, null, null, 1, null, null, 1, null, null, null, 298, null, 1, null, null, null, null,
null, 0, null, 0, 0],
"dog_and_duck/quack/picky/time.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, null, null, null, null, null, null, 1, null, null, null, true, true, null,
null, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 1, 0, null, null, 0, null, null, 1, null, null, null, 0, 0, 0, null, 0,
null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0], null, null, 0, null, null, 1, null, null, null, null, null, null, 0,
0, 0, 0, 0],
"dog_and_duck/quack/quack.clj": "dog_and_duck/quack/quack.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, 34, null, 34, null, 1, null, null, null, null, null, null, null, null, 14, null, 14, null, 1, null, null, null,
null, 4, null, 4, null, 1, null, 3, null, 3, null, 1, null, null, null, null, 1, null, true, null, 1, null, 3, null, 3, null, 1, null,
null, null, null, null, null, 0, 0, 0, 0, null, null, null, null, 1, null, null, null, null, null, null, 0, 0, 0, 0, null, null, null,
null, 0, null, 0, null, 1, null, 0, null, 0, null, 1, null, null, null, 1, null, 0, null, 0, null, 1, null, 0, null, 0, null, 1, null,
null, null, null, 0, 0, 0, null, null, 1, null, null, null, null, null, null, null, null, 0, 0, 0, null, null, 1, null, null, null,
null, true, true, true, true, 2, 1, null, 1, 1, true, true, 1, null, null, null, true, true, true, true, 2, 1, null, 1, 1, true, true, 1,
null, null, null, null, null, null, null, 0, 0, 0, 0, null, null, 1, null, null, null, null, null, null, null, null, 0, 0, 0, 0, null,
null, null, 0, null, 1, null, null, 0, null, 1, null, null, 0, null, null, 1, null, null, 0, null, 1, null, null, 0, null, 1, null, null,
1, null, null, 2, null, null], 0, null, 1, null, null, 2, null, null],
"dog_and_duck/quack/picky/fault_messages.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, 1, null, 1,
null, null, null, null, null, null, null, null, null, null, null,
null],
"dog_and_duck/utils/process.clj": "dog_and_duck/utils/process.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null,
null, null, null, 1, 1, 1, 1, 1, null, true, null, null, null, null, null, null, null, 1, 1, 1, 1, 1, null, true, null, null, null, null,
null, null, null, null, null, 1, null, 1, null, null, null, null, null, null, null, null, null, 1, null, 1, null, null, null, null,
1], 1],
"clj_activitypub/internal/http_util.clj":
[null, 1, null, null, null, null, null, null, null, null, 1, 1, 1, 1,
2, 2, 1, 1, 1, null, 1, 0, 0, null, 1, null, null, null, 0],
"clj_activitypub/internal/thread_cache.clj":
[null, 1, null, null, null, null, 1, null, null, 8, null, 1, 4, 4, 4,
null, 1, null, 2, null, 2, 2, 2, 2, 2, 2, 2, 2, null, 4, 4, 4, null,
4, 4, 2, 2, true, 2, 2, null, 0, 0, 0, 2, 2, 2, 2],
"dog_and_duck/scratch/parser.clj": "dog_and_duck/scratch/parser.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, 1, null, null, null, 9, 9, 9, 9, 9, true, 0, null, null, null, null, 1, null, null, null, 11, 11, 11, 11, 11, true, 0, null, null,
null, null, null, null, null, null, null, null, null, null], null, null, null, null, null, null, null, null, null, null, null],
"dog_and_duck/quack/picky/required_properties.clj":[null, 1], "dog_and_duck/quack/picky/scratch.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null],
"dog_and_duck/quack/picky/control_variables.clj": "dog_and_duck/quack/picky/control_variables.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null,
null, null, null], null, null, null],
"clj_activitypub/core.clj": "dog_and_duck/quack/cli.clj":
[null, 1, null, null, null, null, null, null, null, null, null, 1, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, null, null, 1, null, null, null, 1, null, 1, null, 1,
null, null, 6, 2, 2, null, 1, 1, null, null, null, 1, 1, 1, 1, null, null, 1, null, 0, true, 1, 1, 1, null, 0, true, 1, null, 1, 1, null,
null, 1, null, 1, null, null, null, 0, null, 0, null, 0, 0, 0, 0, 0, 1, null, 0, 0, 0, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, 0, null,
0, null, 1, null, 1, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null, null, 0, 1, null, 0, null, 1, null, 0, 0, null, 1, 0, null, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, 0, 0, 0, 0, 0, null, null, 1, null, 0, 0, 0, 0, 0, null, 0, null, null, 0, 0, 0,
0, 0, 0, null, 1, null, null, null, true, null, 1, null, null, null, null, 0, 0, 0, 0, 0, null, 0, 0, 0, null, 0, 0, 0, 0, 0, null, 1,
null, null, 0, null, 0, 0, 0, 0, 0, null, 1, null, null, null, true, null, 0, 0, 0, 0, 0, 0, null, 1, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0,
null, 1, 0, null, null, 0, 0, null, 1, 0, null, null, 0, 0, null, 1, 0, 0, 0, 0, 0, 0, 0],
null, null, null, 0, 0, 0, 0, 0, 0],
"clj_activitypub/internal/crypto.clj":
[null, 1, null, null, null, null, null, null, null, 1, 1, null, 1, 0,
0, null, null, 1, 0, 0, null, 1, 0, 0, null, null, 1, 0, null, 1, 0,
0, null, 1, 0, 0, 0, 0, 0, null],
"dog_and_duck/quack/picky.clj": "dog_and_duck/quack/picky.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@ -98,34 +93,68 @@
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, 1, null, null, null, null, 0, null, null, null, null, null, null, 1, null, null, null, null, 0,
null, 6, 6, null, 0, null, 0, null, 4, null, 1, null, null, 12, 12, null, 6, 6, null, 0, null, 0, null, 4, null, 1, null, null, 9, 9, 8,
12, 12, 9, 8, 4, null, 1, null, 0, 3, null, 0, 0, 0, 0, null, 1, 8, 7, 6, 3, null, 1, null, 0, 1, null, 0, 0, 0, 0, null, 1, null,
null, null, 3, 3, 3, 3, 1, 3, 3, 3, 3, null, 1, null, null, null, null, 3, 3, 3, 3, 1, 3, 3, 3, 3, null, 1, null, null, null, null, 0,
null, 0, 0, 0, 0, 0, 0, null, null, null, 1, null, null, null, true, 0, 0, 0, 0, 0, null, null, null, 1, null, null, null, true, 0, true,
0, true, true, null, 1, null, null, null, 1, null, 1, null, null, 1, true, null, 1, null, null, null, 1, null, 1, null, null, 1, null, 1,
null, 1, 0, null, null, null, 1, null, null, 1, 1, 1, 1, null, 1, 1, 0, null, null, null, 1, null, null, 1, 1, 1, 1, null, 1, 1, 1, 1, 1,
1, 1, 1, 1, null, 1, 1, 1, 0, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, null, 1, 1, 1, 0, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, null, 1, null, null, null, null, null, 1, 1, 1, 1, 1, 1, null, 1, null, null, null, null, null, null, null,
null, null, 0, 0, 0, null, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, 0, 0, 0, null, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, null, 1, null, null, null, null, null, null, null, null, null, null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, 0, 0, 0, 0, 0, 0, null, null, null, null, null, null, null, 3, 3, 3, 3, 12, 3, null, null, null,
null, null, null, 0, 0, 0, 0, null, null, 0, 0], null, null, 3, true, 1, 1, null, null, true, 0],
"dog_and_duck/scratch/core.clj": "dog_and_duck/quack/picky/objects.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, 1, null, null, 0], null, null, null, null, null, null, null, null, null, null, null,
"clj_activitypub/webfinger.clj": null, null, null, 1, null, 0, null, null, null, null, null, null,
[null, 1, null, null, null, null, null, null, null, 1, null, 1, 1, null, null, null, null, null, null, null, null, null, null, null, 1,
null, 1, null, null, 1, 1, 1, null, 1, 1, null, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
3, 3, 3, true, 1, true, 2, null], null, null, null, null, null, null, null, null, 1, 1, true, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, null, null, null, null, null, 85, 85, 73, 33, true, null, 1, 1,
1, 78, 1, 1, 76, 1, null, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, null, null, null, null, null, 70, 70, 58, 20, 8, null, 1, 1, 1,
70, null, null, 1, 1, 1, 1, 1, 1, 1, 1, 1, true, null, true, 1, 1,
null, null, true, 1, 1, 547, 51, null, 1, 1, true, 1, 1, true, 1, 1,
1, 1, null, 1, 1, true, 70, null, null, 12, 12, 12, true, 1, 1, 1,
true, 70, 0, null, null, null, null, null, null, null, null, 70, 70,
null, 20, 8, null, 1, 1, null, null, null, 1, 1, 1, true, 1, 1, 1,
1, 1, true, 1, 1, 1, 1, 1, 12, null, 1, 1, 1, 1, null, null, null,
1, 1, null, 1, null, 1, 1, true, 66, null, null, 14, 14, 0, true, 1,
1, 1, 1, 1, 1, 70, null, 12, null, 1, 1, 12, null, 1, 1, null, 1, 1,
1, 1, 1, 1, true, null, 1, 1, true, 1, 1, null, true, 1, null, null,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 70, 1, 1, 1, null, null, 1, 1,
1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, null, 1, 1, 1, null, null,
true, 1, 1, 1, 1, 1, true, 1, 1, 1, null, 1, 1104, 1104, 1104, 807,
807, 21, null, 1, null, null, 1104, 1104, 1104, 1104, 283, 283, 283,
null, 1, 549, true, 547, true, 547, 547, 547, 547, null, 1, null,
null, null, 42, 42, 42, 41, 41, 2542, 41, 41, 549, 41, null, 1,
null, null, null, null, null, null, null, null, null, null, null,
42, 42, 42, 42, 3, 42, 42, 20, 42, 3, 42, 17, 42, null, 16, 16, 16,
12, 12, null, 1, null, null, null, null, null, null, null, null, 1,
1, true, true, 0, null, 0, null, null, 0, null, null, 1, null, null,
null, null, 10, 10, 0, true, null, 1, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null,
null, 18, 18, 8, 0, null, null, 0, 0, 0, null, 0, 0, 7, 1, 1, null,
1, 1, 1, 1, 17, null, 1, null, null, null, 0, 0, 0, 0, 0, 0, 0, 0,
0, null, 0, 0, 0, 0],
"dog_and_duck/scratch/scratch.clj": "dog_and_duck/scratch/scratch.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, null, 1, null, 1, 1, 1, null, null, null, null, 1, null, 1, 1, null, null, null, null, null, 1, null, null, null, null, null, null,
1, 1, null, null, 1, null, null, null, null, null, null, null, 1, 1, null, null, null, null, null, null, null, null, null, null, null,
1, 1, 1, 1, null, null], null, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null],
"dog_and_duck/quack/picky/collections.clj": "dog_and_duck/quack/picky/collections.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null, [null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
null, 1, null, null, null, 0, 0, 0, 0, 0, 0, null, 1, null, null, null, 1, null, null, null, 3, 3, 3, 3, 3, 2, null, 1, null, null,
null, 0, 0, 0, 0, 0, 0, 0, null, 1, null, 0, 0, 0, 0, 0, null, null, null, 6, 6, 6, 6, 6, 6, 6, 6, null, 1, null, null, null, 2, 2, 2, 2,
0, 0]}} 2, null, null, 2, 2],
"dog_and_duck/quack/picky/distribution.clj":
[null, 1, null, null, null, null, null, null, null, null, null, null,
null, null, null, null, null, null, null, 1, null, null, null, null,
null, 0, 0, 0, 0, null, null]}}

View file

@ -1 +1 @@
<?xml version="1.0" encoding="UTF-8"?><report><stats><packages value="17"/><methods value="2634"/><srcfiles value="17"/><srclines value="572"/></stats><data><all name="total"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="50% (1326/2634)"/><coverage type="line, %" value="53% (303/572)"/><package name="dog-and-duck.scratch.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (66/66)"/><coverage type="line, %" value="100% (17/17)"/></package><package name="clj-activitypub.internal.thread-cache"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="83% (105/126)"/><coverage type="line, %" value="88% (30/34)"/></package><package name="clj-activitypub.internal.crypto"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="19% (9/48)"/><coverage type="line, %" value="39% (9/23)"/></package><package name="dog-and-duck.quack.quack"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="47% (122/262)"/><coverage type="line, %" value="51% (25/49)"/></package><package name="clj-activitypub.webfinger"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="96% (107/112)"/><coverage type="line, %" value="89% (16/18)"/></package><package name="dog-and-duck.quack.picky"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="42% (169/406)"/><coverage type="line, %" value="59% (65/111)"/></package><package name="clj-activitypub.internal.http-util"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="74% (29/39)"/><coverage type="line, %" value="80% (12/15)"/></package><package name="dog-and-duck.quack.picky.collections"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="3% (4/133)"/><coverage type="line, %" value="17% (4/24)"/></package><package name="dog-and-duck.quack.picky.constants"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (73/73)"/><coverage type="line, %" value="100% (18/18)"/></package><package name="dog-and-duck.quack.picky.required-properties"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (1/1)"/><coverage type="line, %" value="100% (1/1)"/></package><package name="dog-and-duck.scratch.core"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="33% (2/6)"/><coverage type="line, %" value="67% (2/3)"/></package><package name="dog-and-duck.quack.picky.control-variables"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (5/5)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.utils.process"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="89% (34/38)"/><coverage type="line, %" value="91% (10/11)"/></package><package name="dog-and-duck.quack.picky.utils"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="50% (479/959)"/><coverage type="line, %" value="39% (57/147)"/></package><package name="dog-and-duck.quack.picky.fault-messages"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (29/29)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.scratch.parser"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="70% (21/30)"/><coverage type="line, %" value="78% (7/9)"/></package><package name="clj-activitypub.core"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="24% (71/301)"/><coverage type="line, %" value="28% (24/86)"/></package></all></data></report> <?xml version="1.0" encoding="UTF-8"?><report><stats><packages value="14"/><methods value="3905"/><srcfiles value="14"/><srclines value="793"/></stats><data><all name="total"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="61% (2375/3905)"/><coverage type="line, %" value="68% (538/793)"/><package name="dog-and-duck.scratch.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (3/3)"/><coverage type="line, %" value="100% (2/2)"/></package><package name="dog-and-duck.quack.picky.time"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="7% (10/135)"/><coverage type="line, %" value="22% (4/18)"/></package><package name="dog-and-duck.quack.quack"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="46% (121/262)"/><coverage type="line, %" value="49% (24/49)"/></package><package name="dog-and-duck.quack.picky"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="55% (225/406)"/><coverage type="line, %" value="66% (74/112)"/></package><package name="dog-and-duck.quack.picky.distribution"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="10% (2/20)"/><coverage type="line, %" value="33% (2/6)"/></package><package name="dog-and-duck.quack.picky.objects"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="81% (1220/1499)"/><coverage type="line, %" value="83% (278/333)"/></package><package name="dog-and-duck.quack.picky.collections"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (130/130)"/><coverage type="line, %" value="100% (25/25)"/></package><package name="dog-and-duck.quack.picky.constants"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (99/99)"/><coverage type="line, %" value="100% (23/23)"/></package><package name="dog-and-duck.quack.cli"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="12% (70/584)"/><coverage type="line, %" value="22% (20/93)"/></package><package name="dog-and-duck.quack.picky.control-variables"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (5/5)"/><coverage type="line, %" value="100% (3/3)"/></package><package name="dog-and-duck.utils.process"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="89% (34/38)"/><coverage type="line, %" value="91% (10/11)"/></package><package name="dog-and-duck.quack.picky.utils"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="63% (434/693)"/><coverage type="line, %" value="60% (65/108)"/></package><package name="dog-and-duck.quack.picky.scratch"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="100% (1/1)"/><coverage type="line, %" value="100% (1/1)"/></package><package name="dog-and-duck.scratch.parser"><coverage type="class, %" value="0% (0/1)"/><coverage type="method, %" value="0% (0/1)"/><coverage type="block, %" value="70% (21/30)"/><coverage type="line, %" value="78% (7/9)"/></package></all></data></report>

View file

@ -0,0 +1,425 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../coverage.css"/> <title> dog_and_duck/quack/cli.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.cli
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:refer&nbsp;[read-str]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.java.io&nbsp;:refer&nbsp;[resource]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.pprint&nbsp;:refer&nbsp;[pprint]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.string&nbsp;:refer&nbsp;[join]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.tools.cli&nbsp;:refer&nbsp;[parse-opts]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[severity]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[hiccup.core&nbsp;:refer&nbsp;[html]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[scot.weft.i18n.core&nbsp;:refer&nbsp;[get-message&nbsp;*config*]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[trptr.java-wrapper.locale&nbsp;:as&nbsp;locale])
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;(:gen-class))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
015&nbsp;&nbsp;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
016&nbsp;&nbsp;(def&nbsp;^:const&nbsp;stylesheet-url
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;TODO:&nbsp;fix&nbsp;this&nbsp;to&nbsp;github&nbsp;pages&nbsp;before&nbsp;go&nbsp;live
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;style.css&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
019&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
020&nbsp;&nbsp;(def&nbsp;cli-options
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;An&nbsp;option&nbsp;with&nbsp;a&nbsp;required&nbsp;argument
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;[[&quot;-i&quot;&nbsp;&quot;--input&nbsp;SOURCE&quot;&nbsp;&quot;The&nbsp;file&nbsp;or&nbsp;URL&nbsp;to&nbsp;validate&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;&quot;standard&nbsp;input&quot;]
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-o&quot;&nbsp;&quot;--output&nbsp;DEST&quot;&nbsp;&quot;The&nbsp;file&nbsp;to&nbsp;write&nbsp;to,&nbsp;defaults&nbsp;to&nbsp;standard&nbsp;out&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;&quot;standard&nbsp;output&quot;]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-f&quot;&nbsp;&quot;--format&nbsp;FORMAT&quot;&nbsp;&quot;The&nbsp;format&nbsp;to&nbsp;output,&nbsp;one&nbsp;of&nbsp;`edn`&nbsp;`csv`&nbsp;`html`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;:edn
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:parse-fn&nbsp;#(keyword&nbsp;%)
</span><br/>
<span class="partial" title="3 out of 9 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validate&nbsp;[#(#{:csv&nbsp;:edn&nbsp;:html}&nbsp;%)&nbsp;&quot;Expect&nbsp;one&nbsp;of&nbsp;`edn`&nbsp;`csv`&nbsp;`html`&quot;]]
</span><br/>
<span class="covered" title="5 out of 5 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-l&quot;&nbsp;&quot;--language&nbsp;LANG&quot;&nbsp;&quot;The&nbsp;ISO&nbsp;639-1&nbsp;code&nbsp;for&nbsp;the&nbsp;language&nbsp;to&nbsp;output&quot;
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;(-&gt;&nbsp;(locale&#x2F;get-default)&nbsp;locale&#x2F;to-language-tag)]
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-s&quot;&nbsp;&quot;--severity&nbsp;LEVEL&quot;&nbsp;&quot;The&nbsp;minimum&nbsp;severity&nbsp;of&nbsp;faults&nbsp;to&nbsp;report&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:default&nbsp;:info
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:parse-fn&nbsp;#(keyword&nbsp;%)
</span><br/>
<span class="partial" title="5 out of 8 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:validate&nbsp;[#(severity&nbsp;%)&nbsp;(join&nbsp;&quot;&nbsp;&quot;
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Expected&nbsp;one&nbsp;of&quot;
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;name&nbsp;severity)))]]
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;-h&quot;&nbsp;&quot;--help&quot;]])
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
040&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
041&nbsp;&nbsp;(defn&nbsp;validate
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;[source]
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Reading&nbsp;&quot;&nbsp;source))
</span><br/>
<span class="not-covered" title="0 out of 6 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[input&nbsp;(read-str&nbsp;(slurp&nbsp;source))]
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(map?&nbsp;input)&nbsp;(object-faults&nbsp;(keywordize-keys&nbsp;input))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;input)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;map?&nbsp;input))&nbsp;(map&nbsp;#(object-faults
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;%)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;input)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
050&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
051&nbsp;&nbsp;(defn&nbsp;output-csv
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;[faults]
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[cols&nbsp;(set&nbsp;(reduce&nbsp;concat&nbsp;(map&nbsp;keys&nbsp;faults)))]
</span><br/>
<span class="not-covered" title="0 out of 15 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(with-out-str
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(join&nbsp;&quot;,&nbsp;&quot;&nbsp;(map&nbsp;name&nbsp;cols)))
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(println&nbsp;(join&nbsp;&quot;,&nbsp;&quot;&nbsp;(map&nbsp;(fn&nbsp;[p]&nbsp;(p&nbsp;%))&nbsp;cols)))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
059&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
060&nbsp;&nbsp;(defn&nbsp;html-header-row
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;[cols]
</span><br/>
<span class="not-covered" title="0 out of 16 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;vector&nbsp;(cons&nbsp;:tr&nbsp;(map&nbsp;#(vector&nbsp;:th&nbsp;(name&nbsp;%))&nbsp;cols))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
063&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
064&nbsp;&nbsp;(defn&nbsp;html-fault-row
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;[fault&nbsp;cols]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;(apply
</span><br/>
<span class="not-covered" title="0 out of 14 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector&nbsp;(cons&nbsp;:tr&nbsp;(map&nbsp;(fn&nbsp;[col]&nbsp;(vector&nbsp;:td&nbsp;(col&nbsp;fault)))&nbsp;cols))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
068&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
069&nbsp;&nbsp;(defn-&nbsp;version-string&nbsp;[]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;(join
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&nbsp;&quot;
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;dog-and-duck&#x2F;quack&quot;
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try
</span><br/>
<span class="not-covered" title="0 out of 21 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(some-&gt;&gt;
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(resource&nbsp;&quot;META-INF&#x2F;maven&#x2F;dog-and-duck&#x2F;dog-and-duck&#x2F;pom.properties&quot;)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slurp
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(re-find&nbsp;#&quot;version=(.*)&quot;)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;second)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;_&nbsp;nil))]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
080&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
081&nbsp;&nbsp;(defn&nbsp;output-html
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;[faults&nbsp;opts]
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[source-name&nbsp;(if&nbsp;(=&nbsp;(:input&nbsp;opts)&nbsp;*in*)&nbsp;&quot;Standard&nbsp;input&quot;&nbsp;(str&nbsp;(:input&nbsp;opts)))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title&nbsp;(join&nbsp;&quot;&nbsp;&quot;&nbsp;[(get-message&nbsp;:validation-report-for)&nbsp;source-name])
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cols&nbsp;(set&nbsp;(reduce&nbsp;concat&nbsp;(map&nbsp;keys&nbsp;faults)))
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version&nbsp;(version-string)]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(str
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;!DOCTYPE&nbsp;html&gt;&quot;
</span><br/>
<span class="not-covered" title="0 out of 130 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(html
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:html
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:head
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:title&nbsp;title]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:meta&nbsp;{:name&nbsp;&quot;generator&quot;&nbsp;:content&nbsp;version}]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:link&nbsp;{:rel&nbsp;&quot;stylesheet&quot;&nbsp;:media&nbsp;&quot;screen&quot;&nbsp;:href&nbsp;stylesheet-url&nbsp;:type&nbsp;&quot;text&#x2F;css&quot;}]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:body
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:h1&nbsp;title]
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:p&nbsp;(join&nbsp;&quot;&nbsp;&quot;&nbsp;(remove&nbsp;nil?&nbsp;[(get-message&nbsp;:generated-on)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(java.time.LocalDateTime&#x2F;now)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(get-message&nbsp;:by)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;version]))]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if-not
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;faults)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;vector
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:table
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(html-header-row&nbsp;cols)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(html-fault-row&nbsp;%&nbsp;cols)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[:p&nbsp;(get-message&nbsp;:no-faults-found)])]]))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
111&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
112&nbsp;&nbsp;(defn&nbsp;output
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;[content&nbsp;options]
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[faults&nbsp;(filter-severity&nbsp;content&nbsp;(:severity&nbsp;options))]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(spit&nbsp;(:output&nbsp;options)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;(:format&nbsp;options)
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:html&nbsp;(output-html&nbsp;faults&nbsp;options)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:csv&nbsp;(output-csv&nbsp;faults)
</span><br/>
<span class="not-covered" title="0 out of 18 forms covered">
119&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(with-out-str&nbsp;(pprint&nbsp;faults))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
120&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
121&nbsp;&nbsp;(defn&nbsp;-main&nbsp;[&amp;&nbsp;args]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[opts&nbsp;(parse-opts&nbsp;args&nbsp;cli-options)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options&nbsp;(assoc&nbsp;(:options&nbsp;opts)
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:input&nbsp;(if&nbsp;(=&nbsp;(:input&nbsp;(:options&nbsp;opts))&nbsp;&quot;standard&nbsp;input&quot;)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*in*
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:input&nbsp;(:options&nbsp;opts)))
</span><br/>
<span class="not-covered" title="0 out of 8 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:output&nbsp;(if&nbsp;(=&nbsp;(:output&nbsp;(:options&nbsp;opts))&nbsp;&quot;standard&nbsp;output&quot;)
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*out*
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:output&nbsp;(:options&nbsp;opts))))]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;(println&nbsp;options)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:help&nbsp;options)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(:summary&nbsp;opts)))
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when&nbsp;(:errors&nbsp;opts)
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(:errors&nbsp;opts)))
</span><br/>
<span class="not-covered" title="0 out of 13 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(or&nbsp;(:help&nbsp;options)&nbsp;(:errors&nbsp;options))
</span><br/>
<span class="not-covered" title="0 out of 16 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(binding&nbsp;[*config*&nbsp;(assoc&nbsp;*config*&nbsp;:default-language&nbsp;(:language&nbsp;options))]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(output
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(validate&nbsp;(:input&nbsp;options))
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;options)))))
</span><br/>
</body>
</html>

View file

@ -104,31 +104,31 @@
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[actor-types]] 033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.constants&nbsp;:refer&nbsp;[actor-types]]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[any-or-faults 034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[coll-object-reference-or-fault
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;coll-object-reference-or-fault 035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty 036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-activity-type? 037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[any-or-faults
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-actor-type?&nbsp;has-type? 038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type-or-fault 039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-activity-type?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object 040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-actor-type?&nbsp;has-type?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults 041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;has-type-or-fault
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults 042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string-or-fault]]) 043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string-or-fault]])
@ -628,134 +628,137 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
208&nbsp;&nbsp;&nbsp;&nbsp;[x] 208&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 2 forms covered">
209&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty&nbsp;(persistent-object-faults&nbsp;x) 209&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activity-type-faults&nbsp;x) 210&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object-faults&nbsp;x)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activity-type-faults&nbsp;x)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="not-covered" title="0 out of 2 forms covered">
211&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list 212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
212&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not 213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
213&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-activity-type?&nbsp;x) 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(has-activity-type?&nbsp;x)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:must&nbsp;:not-activity-type)) 215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;:must&nbsp;:not-activity-type))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 12 forms covered"> <span class="not-covered" title="0 out of 12 forms covered">
215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;(:summary&nbsp;x))&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-summary))))) 216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(when-not&nbsp;(string?&nbsp;(:summary&nbsp;x))&nbsp;(make-fault-object&nbsp;:should&nbsp;:no-summary)))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
216&nbsp;&nbsp; 217&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
217&nbsp;&nbsp;(defn&nbsp;collection-faults 218&nbsp;&nbsp;(defn&nbsp;collection-faults
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
218&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;the&nbsp;collection&nbsp;`x`;&nbsp;if&nbsp;`type`&nbsp;is&nbsp;also&nbsp; 219&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;the&nbsp;collection&nbsp;`x`;&nbsp;if&nbsp;`type`&nbsp;is&nbsp;also&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
219&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specified,&nbsp;it&nbsp;should&nbsp;be&nbsp;a&nbsp;string&nbsp;naming&nbsp;a&nbsp;specific&nbsp;collection&nbsp;type&nbsp;for 220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;specified,&nbsp;it&nbsp;should&nbsp;be&nbsp;a&nbsp;string&nbsp;naming&nbsp;a&nbsp;specific&nbsp;collection&nbsp;type&nbsp;for
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
220&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;checks&nbsp;should&nbsp;be&nbsp;performed.&nbsp; 221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;checks&nbsp;should&nbsp;be&nbsp;performed.&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
221&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
222&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Every&nbsp;collection&nbsp;*should*(?)&nbsp;have&nbsp;a&nbsp;`totalItems`&nbsp;field&nbsp;(an&nbsp;integer). 223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Every&nbsp;collection&nbsp;*should*(?)&nbsp;have&nbsp;a&nbsp;`totalItems`&nbsp;field&nbsp;(an&nbsp;integer).
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
223&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 224&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
224&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beyond&nbsp;that,&nbsp;collections&nbsp;are&nbsp;either&nbsp;&#x27;just&nbsp;collections&#x27;&nbsp;(in&nbsp;which&nbsp;case 225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beyond&nbsp;that,&nbsp;collections&nbsp;are&nbsp;either&nbsp;&#x27;just&nbsp;collections&#x27;&nbsp;(in&nbsp;which&nbsp;case
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
225&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;*should*&nbsp;have&nbsp;an&nbsp;`items`&nbsp;field&nbsp;(a&nbsp;sequence)),&nbsp;or&nbsp;else&nbsp;they&#x27;re&nbsp;paged 226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;they&nbsp;*should*&nbsp;have&nbsp;an&nbsp;`items`&nbsp;field&nbsp;(a&nbsp;sequence)),&nbsp;or&nbsp;else&nbsp;they&#x27;re&nbsp;paged
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
226&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collections,&nbsp;in&nbsp;which&nbsp;case&nbsp;they&nbsp;*must*(?)&nbsp;have&nbsp;a&nbsp;`first`&nbsp;field&nbsp;which&nbsp;is&nbsp; 227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;collections,&nbsp;in&nbsp;which&nbsp;case&nbsp;they&nbsp;*must*(?)&nbsp;have&nbsp;a&nbsp;`first`&nbsp;field&nbsp;which&nbsp;is&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
227&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;collection&nbsp;page&nbsp;or&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;a&nbsp;collection&nbsp;page,&nbsp;and&nbsp;*should*&nbsp; 228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;collection&nbsp;page&nbsp;or&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;a&nbsp;collection&nbsp;page,&nbsp;and&nbsp;*should*&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
228&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;a&nbsp;`last`&nbsp;field&nbsp;which&nbsp;is&nbsp;similar. 229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;have&nbsp;a&nbsp;`last`&nbsp;field&nbsp;which&nbsp;is&nbsp;similar.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
229&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
230&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;pages&nbsp;of&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;collection&nbsp;pages;&nbsp;the&nbsp;pages&nbsp;of&nbsp; 231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The&nbsp;pages&nbsp;of&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;collection&nbsp;pages;&nbsp;the&nbsp;pages&nbsp;of&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
231&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;ordered&nbsp;collection&nbsp;pages.&quot; 232&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ordered&nbsp;collections&nbsp;*should*&nbsp;be&nbsp;ordered&nbsp;collection&nbsp;pages.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
232&nbsp;&nbsp;&nbsp;&nbsp;([x] 233&nbsp;&nbsp;&nbsp;&nbsp;([x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
233&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection-faults 234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection-faults
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
234&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x 235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
235&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first 236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(first
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
236&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;nil? 237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(remove&nbsp;nil?
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 10 forms covered"> <span class="covered" title="10 out of 10 forms covered">
237&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(when&nbsp;(has-type?&nbsp;x&nbsp;%)&nbsp;%) 238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(when&nbsp;(has-type?&nbsp;x&nbsp;%)&nbsp;%)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
238&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;Collection&quot; 239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[&quot;Collection&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
239&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot; 240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollection&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
240&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CollectionPage&quot; 241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;CollectionPage&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
241&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;]))))) 242&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;OrderedCollectionPage&quot;])))))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
242&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;type] 243&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;type]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
243&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(log&#x2F;info&nbsp;&quot;collection-faults&nbsp;called&nbsp;with&nbsp;argumens&nbsp;&quot;&nbsp;x&nbsp;&quot;,&nbsp;&quot;&nbsp;type) 244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;(log&#x2F;info&nbsp;&quot;collection-faults&nbsp;called&nbsp;with&nbsp;argumens&nbsp;&quot;&nbsp;x&nbsp;&quot;,&nbsp;&quot;&nbsp;type)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
244&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;type 245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(case&nbsp;type
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="partial" title="6 out of 8 forms covered">
245&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;Collection&quot;&nbsp;&quot;OrderedCollection&quot;)&nbsp;(any-or-faults 246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;Collection&quot;&nbsp;&quot;OrderedCollection&quot;)&nbsp;(any-or-faults
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 12 forms covered"> <span class="covered" title="12 out of 12 forms covered">
246&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(simple-collection-faults&nbsp;x&nbsp;type) 247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
247&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(paged-collection-faults&nbsp;x&nbsp;type)) 248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(paged-collection-faults&nbsp;x&nbsp;type))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
248&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must 249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
249&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:no-items) 250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:no-items)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="partial" title="4 out of 8 forms covered">
250&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;CollectionPage&quot;&nbsp;&quot;OrderedCollectionPage&quot;)&nbsp;(collection-page-faults&nbsp;x&nbsp;type) 251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&quot;CollectionPage&quot;&nbsp;&quot;OrderedCollectionPage&quot;)&nbsp;(collection-page-faults&nbsp;x&nbsp;type)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 6 forms covered"> <span class="not-covered" title="0 out of 6 forms covered">
251&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(make-fault-object&nbsp;:critical&nbsp;:expected-collection))))) 252&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(make-fault-object&nbsp;:critical&nbsp;:expected-collection)))))
</span><br/> </span><br/>
</body> </body>
</html> </html>

View file

@ -8,16 +8,16 @@
001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.collections 001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.collections
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty 002&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond-make-fault-object 003&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-faults 004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-reference-or-faults]])) 005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cond-make-fault-object]]))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
006&nbsp;&nbsp; 006&nbsp;&nbsp;
@ -85,23 +85,23 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type] 027&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty 028&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type) 029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(object-reference-or-faults&nbsp;x&nbsp;type&nbsp;:critical&nbsp;:expected-collection) 030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(object-reference-or-faults&nbsp;x&nbsp;type&nbsp;:critical&nbsp;:expected-collection)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 11 forms covered"> <span class="covered" title="9 out of 9 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items) 031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="11 out of 11 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:first&nbsp;x)&nbsp;nil&nbsp;:must&nbsp;:no-first-page) 032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:first&nbsp;x)&nbsp;(str&nbsp;type&nbsp;&quot;Page&quot;)&nbsp;:must&nbsp;:no-first-page)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="11 out of 11 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:last&nbsp;x)&nbsp;nil&nbsp;:should&nbsp;:no-last-page)))) 033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:last&nbsp;x)&nbsp;(str&nbsp;type&nbsp;&quot;Page&quot;)&nbsp;:should&nbsp;:no-last-page))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
034&nbsp;&nbsp; 034&nbsp;&nbsp;
@ -118,62 +118,71 @@
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type] 038&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty 039&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type) 040&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults&nbsp;x&nbsp;type)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cons 041&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(concat
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="11 out of 11 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(object-reference-or-faults&nbsp;x&nbsp;type&nbsp;:critical&nbsp;:expected-collection) 042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 11 forms covered"> <span class="covered" title="9 out of 9 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;:should&nbsp;:no-total-items) 043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(coll?&nbsp;(:items&nbsp;x))&nbsp;:must&nbsp;:no-items-collection))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 11 forms covered"> <span class="covered" title="2 out of 2 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object&nbsp;(coll?&nbsp;(:items&nbsp;x))&nbsp;:must&nbsp;:no-items-collection)) 044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-covered" title="0 out of 12 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(object-reference-or-faults&nbsp;%&nbsp;nil&nbsp;:must&nbsp;:not-object-reference)&nbsp;(:items&nbsp;x)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
046&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
047&nbsp;&nbsp;(defn&nbsp;collection-page-faults 045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat
</span><br/>
<span class="covered" title="12 out of 12 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;#(object-reference-or-faults&nbsp;%&nbsp;nil&nbsp;:must&nbsp;:not-object-reference)&nbsp;(:items&nbsp;x))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
047&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
048&nbsp;&nbsp;(defn&nbsp;collection-page-faults
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type] 049&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;a&nbsp;list&nbsp;of&nbsp;faults&nbsp;found&nbsp;in&nbsp;`x`&nbsp;considered&nbsp;as&nbsp;a&nbsp;collection&nbsp;page
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:partOf&nbsp;x)
</span><br/>
<span class="not-covered" title="0 out of 7 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;str&nbsp;(drop-last&nbsp;4&nbsp;type))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should 050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object&nbsp;of&nbsp;this&nbsp;sub-`type`,&nbsp;or&nbsp;`nil`&nbsp;if&nbsp;none&nbsp;are&nbsp;found.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:n-part-of) 051&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;type]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="2 out of 2 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:next&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-next-page) 052&nbsp;&nbsp;&nbsp;&nbsp;(concat-non-empty
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="covered" title="4 out of 4 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:prev&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-prev-page)))) 053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(simple-collection-faults&nbsp;x&nbsp;type)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(list
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:partOf&nbsp;x)
</span><br/>
<span class="covered" title="7 out of 7 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;str&nbsp;(drop-last&nbsp;4&nbsp;type))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:n-part-of)
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:next&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-next-page)
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-reference-or-faults&nbsp;(:prev&nbsp;x)&nbsp;type&nbsp;:minor&nbsp;:no-prev-page))))
</span><br/> </span><br/>
</body> </body>
</html> </html>

View file

@ -68,178 +68,289 @@
021&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;an&nbsp;ActivityStreams&nbsp;object&nbsp;is&nbsp;expected&nbsp;to&nbsp;be&nbsp;this 021&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;an&nbsp;ActivityStreams&nbsp;object&nbsp;is&nbsp;expected&nbsp;to&nbsp;be&nbsp;this
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot; 022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;ns&#x2F;activitystreams&quot;) 023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;the&nbsp;URI&nbsp;actually&nbsp;used&nbsp;in&nbsp;the&nbsp;published&nbsp;suite&nbsp;of&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;activitystreams-test-documents&nbsp;use&nbsp;this&nbsp;URI&nbsp;with&nbsp;&#x27;http&#x27;&nbsp;rather&nbsp;than
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#x27;https&#x27;&nbsp;as&nbsp;the&nbsp;property&nbsp;part,&nbsp;but&nbsp;the&nbsp;spec&nbsp;itself&nbsp;specifies&nbsp;&#x27;https&#x27;.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;www.w3.org&#x2F;ns&#x2F;activitystreams&quot;)
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
024&nbsp;&nbsp; 028&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
025&nbsp;&nbsp;(def&nbsp;^:const&nbsp;actor-types 029&nbsp;&nbsp;(def&nbsp;^:const&nbsp;actor-types
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;actors. 030&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;actors.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;actor&nbsp;types] 032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;actor&nbsp;types]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#actor-types).&quot; 033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#actor-types).&quot;
</span><br/> </span><br/>
<span class="covered" title="6 out of 6 forms covered"> <span class="covered" title="6 out of 6 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Application&quot; 034&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Application&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Group&quot; 035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Group&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Organization&quot; 036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Organization&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Person&quot; 037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Person&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Service&quot;}) 038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Service&quot;})
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
035&nbsp;&nbsp; 039&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
036&nbsp;&nbsp;(def&nbsp;^:const&nbsp;context-key 040&nbsp;&nbsp;(def&nbsp;^:const&nbsp;context-key
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;Clojure&nbsp;reader&nbsp;barfs&nbsp;on&nbsp;`:@context`,&nbsp;although&nbsp;it&nbsp;is&nbsp;in&nbsp;principle&nbsp;a&nbsp;valid&nbsp; 041&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;Clojure&nbsp;reader&nbsp;barfs&nbsp;on&nbsp;`:@context`,&nbsp;although&nbsp;it&nbsp;is&nbsp;in&nbsp;principle&nbsp;a&nbsp;valid&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyword.&nbsp;So&nbsp;we&#x27;ll&nbsp;make&nbsp;it&nbsp;once,&nbsp;here,&nbsp;to&nbsp;make&nbsp;the&nbsp;code&nbsp;more&nbsp;performant&nbsp;and 042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keyword.&nbsp;So&nbsp;we&#x27;ll&nbsp;make&nbsp;it&nbsp;once,&nbsp;here,&nbsp;to&nbsp;make&nbsp;the&nbsp;code&nbsp;more&nbsp;performant&nbsp;and
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;easier&nbsp;to&nbsp;read.&quot; 043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;easier&nbsp;to&nbsp;read.&quot;
</span><br/> </span><br/>
<span class="covered" title="3 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
040&nbsp;&nbsp;&nbsp;&nbsp;(keyword&nbsp;&quot;@context&quot;)) 044&nbsp;&nbsp;&nbsp;&nbsp;(keyword&nbsp;&quot;@context&quot;))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
041&nbsp;&nbsp; 045&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
042&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&quot;Severity&nbsp;of&nbsp;faults&nbsp;found,&nbsp;as&nbsp;follows:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.&nbsp;`:info`&nbsp;not&nbsp;actually&nbsp;a&nbsp;fault,&nbsp;but&nbsp;an&nbsp;issue&nbsp;noted&nbsp;during&nbsp;validation;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;`:minor`&nbsp;things&nbsp;which&nbsp;I&nbsp;consider&nbsp;to&nbsp;be&nbsp;faults,&nbsp;but&nbsp;which&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;actually&nbsp;breach&nbsp;the&nbsp;spec;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;`:should`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;SHOULD
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;`:must`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;MUST
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;`:critical`&nbsp;instances&nbsp;where&nbsp;I&nbsp;believe&nbsp;the&nbsp;fault&nbsp;means&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;object&nbsp;cannot&nbsp;be&nbsp;meaningfully&nbsp;processed.&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must&nbsp;:critical})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
055&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
056&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity-filters
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&quot;Hack&nbsp;for&nbsp;implementing&nbsp;a&nbsp;severity&nbsp;hierarchy&quot;
</span><br/>
<span class="covered" title="8 out of 8 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;{:all&nbsp;#{}
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:info&nbsp;#{}
</span><br/> </span><br/>
<span class="covered" title="2 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:minor&nbsp;#{:info} 046&nbsp;&nbsp;(def&nbsp;^:const&nbsp;re-rfc5646&nbsp;
</span><br/> </span><br/>
<span class="covered" title="3 out of 3 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should&nbsp;#{:info&nbsp;:minor} 047&nbsp;&nbsp;&nbsp;&nbsp;&quot;A&nbsp;regex&nbsp;which&nbsp;tests&nbsp;conformity&nbsp;to&nbsp;RFC&nbsp;5646.&nbsp;Cribbed&nbsp;from
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must&nbsp;#{:info&nbsp;:minor&nbsp;:should} 048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;https:&#x2F;&#x2F;newbedev.com&#x2F;regex-to-detect-locales&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;#&quot;^[a-z]{2,4}(-[A-Z][a-z]{3})?(-([A-Z]{2}|[0-9]{3}))?$&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
050&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:critical&nbsp;severity}) 051&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&quot;Severity&nbsp;of&nbsp;faults&nbsp;found,&nbsp;as&nbsp;follows:
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.&nbsp;`:info`&nbsp;not&nbsp;actually&nbsp;a&nbsp;fault,&nbsp;but&nbsp;an&nbsp;issue&nbsp;noted&nbsp;during&nbsp;validation;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.&nbsp;`:minor`&nbsp;things&nbsp;which&nbsp;I&nbsp;consider&nbsp;to&nbsp;be&nbsp;faults,&nbsp;but&nbsp;which&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;actually&nbsp;breach&nbsp;the&nbsp;spec;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.&nbsp;`:should`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;SHOULD
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.&nbsp;`:must`&nbsp;instances&nbsp;where&nbsp;the&nbsp;spec&nbsp;says&nbsp;something&nbsp;MUST
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;be&nbsp;done,&nbsp;which&nbsp;isn&#x27;t;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.&nbsp;`:critical`&nbsp;instances&nbsp;where&nbsp;I&nbsp;believe&nbsp;the&nbsp;fault&nbsp;means&nbsp;that
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;the&nbsp;object&nbsp;cannot&nbsp;be&nbsp;meaningfully&nbsp;processed.&quot;
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must&nbsp;:critical})
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
064&nbsp;&nbsp; 064&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="2 out of 2 forms covered"> <span class="covered" title="1 out of 1 forms covered">
065&nbsp;&nbsp;(def&nbsp;^:const&nbsp;validation-fault-context-uri 065&nbsp;&nbsp;(def&nbsp;^:const&nbsp;severity-filters
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;a&nbsp;validation&nbsp;fault&nbsp;report&nbsp;object&nbsp;shall&nbsp;be&nbsp;this 066&nbsp;&nbsp;&nbsp;&nbsp;&quot;Hack&nbsp;for&nbsp;implementing&nbsp;a&nbsp;severity&nbsp;hierarchy&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="covered" title="8 out of 8 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot; 067&nbsp;&nbsp;&nbsp;&nbsp;{:all&nbsp;#{}
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;codox&#x2F;Validation_Faults.html&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
069&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
070&nbsp;&nbsp;(def&nbsp;^:const&nbsp;verb-types 068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:info&nbsp;#{}
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="covered" title="2 out of 2 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;verbs. 069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:minor&nbsp;#{:info}
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="covered" title="3 out of 3 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should&nbsp;#{:info&nbsp;:minor}
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="covered" title="4 out of 4 forms covered">
073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;verb&nbsp;types] 071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:must&nbsp;#{:info&nbsp;:minor&nbsp;:should}
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="covered" title="5 out of 5 forms covered">
074&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#activity-types).&quot; 072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:critical&nbsp;#{:info&nbsp;:minor&nbsp;:should&nbsp;:must}})
</span><br/>
<span class="covered" title="29 out of 29 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Accept&quot;&nbsp;&quot;Add&quot;&nbsp;&quot;Announce&quot;&nbsp;&quot;Arrive&quot;&nbsp;&quot;Block&quot;&nbsp;&quot;Create&quot;&nbsp;&quot;Delete&quot;&nbsp;&quot;Dislike&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Flag&quot;&nbsp;&quot;Follow&quot;&nbsp;&quot;Ignore&quot;&nbsp;&quot;Invite&quot;&nbsp;&quot;Join&quot;&nbsp;&quot;Leave&quot;&nbsp;&quot;Like&quot;&nbsp;&quot;Listen&quot;&nbsp;&quot;Move&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Offer&quot;&nbsp;&quot;Question&quot;&nbsp;&quot;Reject&quot;&nbsp;&quot;Read&quot;&nbsp;&quot;Remove&quot;&nbsp;&quot;TentativeAccept&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TentativeReject&quot;&nbsp;&quot;Travel&quot;&nbsp;&quot;Undo&quot;&nbsp;&quot;Update&quot;&nbsp;&quot;View&quot;})
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
079&nbsp;&nbsp; 073&nbsp;&nbsp;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
074&nbsp;&nbsp;(def&nbsp;^:const&nbsp;validation-fault-context-uri
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;URI&nbsp;of&nbsp;the&nbsp;context&nbsp;of&nbsp;a&nbsp;validation&nbsp;fault&nbsp;report&nbsp;object&nbsp;shall&nbsp;be&nbsp;this
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;literal&nbsp;string.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;&quot;https:&#x2F;&#x2F;simon-brooke.github.io&#x2F;dog-and-duck&#x2F;codox&#x2F;Validation_Faults.html&quot;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
078&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
079&nbsp;&nbsp;(def&nbsp;^:const&nbsp;activity-types
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
080&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;activities.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;activity&nbsp;types]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#activity-types).&quot;
</span><br/>
<span class="covered" title="29 out of 29 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Accept&quot;&nbsp;&quot;Add&quot;&nbsp;&quot;Announce&quot;&nbsp;&quot;Arrive&quot;&nbsp;&quot;Block&quot;&nbsp;&quot;Create&quot;&nbsp;&quot;Delete&quot;&nbsp;&quot;Dislike&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Flag&quot;&nbsp;&quot;Follow&quot;&nbsp;&quot;Ignore&quot;&nbsp;&quot;Invite&quot;&nbsp;&quot;Join&quot;&nbsp;&quot;Leave&quot;&nbsp;&quot;Like&quot;&nbsp;&quot;Listen&quot;&nbsp;&quot;Move&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Offer&quot;&nbsp;&quot;Question&quot;&nbsp;&quot;Reject&quot;&nbsp;&quot;Read&quot;&nbsp;&quot;Remove&quot;&nbsp;&quot;TentativeAccept&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;TentativeReject&quot;&nbsp;&quot;Travel&quot;&nbsp;&quot;Undo&quot;&nbsp;&quot;Update&quot;&nbsp;&quot;View&quot;})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
088&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
089&nbsp;&nbsp;(def&nbsp;^:const&nbsp;noun-types
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&quot;The&nbsp;set&nbsp;of&nbsp;object&nbsp;types&nbsp;we&nbsp;will&nbsp;accept&nbsp;as&nbsp;nouns.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&#x27;s&nbsp;an&nbsp;[explicit&nbsp;set&nbsp;of&nbsp;allowed&nbsp;&#x27;object&nbsp;types&#x27;]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#object-types),&nbsp;but&nbsp;by&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;implication&nbsp;it&nbsp;is&nbsp;not&nbsp;exhaustive.&quot;
</span><br/>
<span class="covered" title="16 out of 16 forms covered">
095&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Article&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Audio&quot;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Document&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Event&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Image&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Link&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Mention&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
102&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Note&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Object&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Page&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Place&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Profile&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Relationsip&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
108&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Tombstone&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Video&quot;})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
110&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
111&nbsp;&nbsp;(def&nbsp;^:const&nbsp;implicit-noun-types
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&quot;These&nbsp;types&nbsp;are&nbsp;not&nbsp;explicitly&nbsp;listed&nbsp;in&nbsp;[Section&nbsp;3.3&nbsp;of&nbsp;the&nbsp;spec]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-vocabulary&#x2F;#object-types),&nbsp;but&nbsp;are&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mentioned&nbsp;in&nbsp;narrative&quot;
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;#{&quot;Link&quot;})
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
116&nbsp;&nbsp;
</span><br/> </span><br/>
</body> </body>
</html> </html>

View file

@ -0,0 +1,98 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../../coverage.css"/> <title> dog_and_duck/quack/picky/distribution.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.distribution)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
002&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
004&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
009&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
014&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
018&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
019&nbsp;&nbsp;(defn&nbsp;distribution
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&quot;Distribution&nbsp;of&nbsp;values&nbsp;of&nbsp;function&nbsp;`f`&nbsp;when&nbsp;applied&nbsp;to&nbsp;`vals`.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;*know*&nbsp;there&#x27;s&nbsp;a&nbsp;library&nbsp;function&nbsp;that&nbsp;does&nbsp;this,&nbsp;probably&nbsp;better,&nbsp;but&nbsp;I
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;don&#x27;t&nbsp;remember&nbsp;what&nbsp;it&#x27;s&nbsp;called!&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;&nbsp;&nbsp;[f&nbsp;vals]
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
025&nbsp;&nbsp;&nbsp;&nbsp;(loop&nbsp;[result&nbsp;{}&nbsp;values&nbsp;vals]
</span><br/>
<span class="not-covered" title="0 out of 5 forms covered">
026&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(empty?&nbsp;values)&nbsp;result&nbsp;
</span><br/>
<span class="not-covered" title="0 out of 9 forms covered">
027&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[r&nbsp;(apply&nbsp;f&nbsp;(list&nbsp;(first&nbsp;values)))]
</span><br/>
<span class="not-covered" title="0 out of 1 forms covered">
028&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(recur&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(assoc&nbsp;result&nbsp;r&nbsp;(if&nbsp;(result&nbsp;r)&nbsp;(inc&nbsp;(result&nbsp;r))&nbsp;1))&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(rest&nbsp;values))))))
</span><br/>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,167 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../../coverage.css"/> <title> dog_and_duck/quack/picky/scratch.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.scratch
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Development&nbsp;scratchpad&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[clojure.data.json&nbsp;:refer&nbsp;[read-str]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.java.io&nbsp;:refer&nbsp;[file]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.distribution&nbsp;:refer&nbsp;[distribution]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[object-faults&nbsp;properties-faults]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[concat-non-empty
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;filter-severity]]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
011&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;;;&nbsp;(def&nbsp;files&nbsp;(filter
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
015&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;&nbsp;(def&nbsp;r
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(reduce
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;(map
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(try
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[contents&nbsp;(read-str&nbsp;(slurp&nbsp;%))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;faults&nbsp;(cond&nbsp;(map?&nbsp;contents)&nbsp;(filter-severity
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
023&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;contents))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:should)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(coll?&nbsp;contents)&nbsp;(apply
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;concat-non-empty
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;(fn&nbsp;[obj]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object-faults
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys&nbsp;obj)))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contents))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(map&nbsp;(fn&nbsp;[f]&nbsp;(assoc&nbsp;f&nbsp;:document&nbsp;(.getName&nbsp;%)))&nbsp;faults))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;any
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[(.getName&nbsp;%)&nbsp;(str&nbsp;&quot;Exception&nbsp;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(.getName&nbsp;(.getClass&nbsp;any))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;:&nbsp;&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(.getMessage&nbsp;any))]))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(filter
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
042&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;;;&nbsp;(count&nbsp;(filter-severity&nbsp;(object-faults&nbsp;(keywordize-keys&nbsp;(read-str&nbsp;(slurp&nbsp;&quot;resources&#x2F;activitystreams-test-documents&#x2F;vocabulary-ex189-jsonld.json&quot;))))&nbsp;:critical))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
044&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;;;&nbsp;(count&nbsp;(filter
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#(and&nbsp;(.isFile&nbsp;%)&nbsp;(.endsWith&nbsp;(.getName&nbsp;%)&nbsp;&quot;.json&quot;))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(file-seq&nbsp;(file&nbsp;&quot;resources&#x2F;activitystreams-test-documents&quot;))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
048&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;;;&nbsp;(count&nbsp;r)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;;;&nbsp;(last&nbsp;r)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;;;&nbsp;(clojure.pprint&#x2F;pprint&nbsp;(last&nbsp;r))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
052&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;;;&nbsp;(distribution&nbsp;:fault&nbsp;r)
</span><br/>
</body>
</html>

View file

@ -0,0 +1,206 @@
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="../../../coverage.css"/> <title> dog_and_duck/quack/picky/time.clj </title>
</head>
<body>
<span class="covered" title="1 out of 1 forms covered">
001&nbsp;&nbsp;(ns&nbsp;dog-and-duck.quack.picky.time
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
002&nbsp;&nbsp;&nbsp;&nbsp;&quot;Time,&nbsp;gentleman,&nbsp;please!&nbsp;Recognising&nbsp;and&nbsp;validating&nbsp;date&nbsp;time&nbsp;values.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
003&nbsp;&nbsp;&nbsp;&nbsp;(:require&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[cond-make-fault-object
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;make-fault-object
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;truthy?]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[scot.weft.i18n.core&nbsp;:refer&nbsp;[get-message]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[taoensso.timbre&nbsp;:refer&nbsp;[warn&nbsp;error]])
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.time&nbsp;LocalDateTime]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[java.time.format&nbsp;DateTimeFormatter&nbsp;DateTimeParseException]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[javax.xml.datatype&nbsp;DatatypeFactory]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
011&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2023
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
013&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
018&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
023&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
027&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
028&nbsp;&nbsp;(defn&nbsp;xsd-date-time?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;pattern&nbsp;for&nbsp;an&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
030&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[xsd:dateTime](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;xmlschema11-2&#x2F;#dateTime),&nbsp;else&nbsp;`false`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;&nbsp;&nbsp;[^String&nbsp;value]
</span><br/>
<span class="partial" title="1 out of 3 forms covered">
032&nbsp;&nbsp;&nbsp;&nbsp;(try
</span><br/>
<span class="partial" title="5 out of 6 forms covered">
033&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(LocalDateTime&#x2F;from&nbsp;(.parse&nbsp;DateTimeFormatter&#x2F;ISO_DATE_TIME&nbsp;value))&nbsp;true&nbsp;false)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;DateTimeParseException&nbsp;_
</span><br/>
<span class="not-covered" title="0 out of 20 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;(get-message&nbsp;:bad-date-time)&nbsp;&quot;:&quot;&nbsp;value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;e
</span><br/>
<span class="not-covered" title="0 out of 18 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(error&nbsp;&quot;Exception&nbsp;thrown&nbsp;while&nbsp;parsing&nbsp;date&quot;&nbsp;value&nbsp;e)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
040&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
041&nbsp;&nbsp;(defn&nbsp;xsd-duration?
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&quot;Return&nbsp;`true`&nbsp;if&nbsp;`value`&nbsp;matches&nbsp;the&nbsp;pattern&nbsp;for&nbsp;an&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[xsd:duration](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;xmlschema11-2&#x2F;#duration),&nbsp;else&nbsp;`false`&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;[value]
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;(truthy?
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(string?&nbsp;value)
</span><br/>
<span class="not-covered" title="0 out of 3 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(try&nbsp;(.newDuration&nbsp;(DatatypeFactory&#x2F;newInstance)&nbsp;value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;IllegalArgumentException&nbsp;_
</span><br/>
<span class="not-covered" title="0 out of 20 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(warn&nbsp;(get-message&nbsp;:bad-duration)&nbsp;&quot;:&quot;&nbsp;value)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;Exception&nbsp;e
</span><br/>
<span class="not-covered" title="0 out of 18 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(error&nbsp;&quot;Exception&nbsp;thrown&nbsp;while&nbsp;parsing&nbsp;duration&quot;&nbsp;value&nbsp;e)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;false)))))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
054&nbsp;&nbsp;
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
055&nbsp;&nbsp;(defn&nbsp;date-time-property-or-fault
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&quot;If&nbsp;the&nbsp;value&nbsp;of&nbsp;this&nbsp;`property`&nbsp;of&nbsp;object&nbsp;`x`&nbsp;is&nbsp;a&nbsp;valid&nbsp;xsd:dateTime&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value,&nbsp;return&nbsp;a&nbsp;fault&nbsp;object&nbsp;with&nbsp;this&nbsp;`token`&nbsp;and&nbsp;`severity`.&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;`required?`&nbsp;is&nbsp;false&nbsp;and&nbsp;there&nbsp;is&nbsp;no&nbsp;such&nbsp;property,&nbsp;no&nbsp;fault&nbsp;will&nbsp;be
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;returned.&quot;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;[x&nbsp;property&nbsp;severity&nbsp;token&nbsp;required?]
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[value&nbsp;(property&nbsp;x)]
</span><br/>
<span class="not-covered" title="0 out of 11 forms covered">
063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;(and&nbsp;required?&nbsp;(not&nbsp;(x&nbsp;property)))
</span><br/>
<span class="not-covered" title="0 out of 4 forms covered">
064&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(make-fault-object&nbsp;severity&nbsp;token)
</span><br/>
<span class="not-covered" title="0 out of 2 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond-make-fault-object
</span><br/>
<span class="not-covered" title="0 out of 10 forms covered">
066&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;value&nbsp;(xsd-date-time?&nbsp;value))&nbsp;severity&nbsp;token))))
</span><br/>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -62,460 +62,463 @@
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.control-variables&nbsp;:refer&nbsp;[*reject-severity*]] 019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.control-variables&nbsp;:refer&nbsp;[*reject-severity*]]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity&nbsp;object-faults]]) 020&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.objects&nbsp;:refer&nbsp;[object-faults]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[dog-and-duck.quack.picky.utils&nbsp;:refer&nbsp;[filter-severity]])
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
021&nbsp;&nbsp; 022&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException])) 023&nbsp;&nbsp;&nbsp;&nbsp;(:import&nbsp;[java.net&nbsp;URI&nbsp;URISyntaxException]))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
023&nbsp;&nbsp; 024&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022 025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
025&nbsp;&nbsp; 026&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
026&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or 027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
027&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License 028&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
028&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2 029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
029&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version. 030&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
030&nbsp;&nbsp; 031&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful, 032&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of 033&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the 034&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details. 035&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
035&nbsp;&nbsp; 036&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License 037&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software 038&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA. 039&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
039&nbsp;&nbsp; 040&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
040&nbsp;&nbsp;(defn&nbsp;object? 041&nbsp;&nbsp;(defn&nbsp;object?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;recognisably&nbsp;an&nbsp;ActivityStreams&nbsp;object. 042&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;recognisably&nbsp;an&nbsp;ActivityStreams&nbsp;object.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
043&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityStreams&nbsp;spec&nbsp; 044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityStreams&nbsp;spec&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-core&#x2F;#object): 045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitystreams-core&#x2F;#object):
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
046&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;All&nbsp;properties&nbsp;are&nbsp;optional&nbsp;(including&nbsp;the&nbsp;id&nbsp;and&nbsp;type) 047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;All&nbsp;properties&nbsp;are&nbsp;optional&nbsp;(including&nbsp;the&nbsp;id&nbsp;and&nbsp;type)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;But&nbsp;we&nbsp;are&nbsp;*just&nbsp;not&nbsp;having&nbsp;that*,&nbsp;because&nbsp;otherwise&nbsp;we&#x27;re&nbsp;flying&nbsp;blind. 049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;But&nbsp;we&nbsp;are&nbsp;*just&nbsp;not&nbsp;having&nbsp;that*,&nbsp;because&nbsp;otherwise&nbsp;we&#x27;re&nbsp;flying&nbsp;blind.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;*shall*&nbsp;reject&nbsp;objects&nbsp;lacking&nbsp;at&nbsp;least&nbsp;`:type`.&nbsp;Missing&nbsp;`:id`&nbsp;keys&nbsp;are 050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We&nbsp;*shall*&nbsp;reject&nbsp;objects&nbsp;lacking&nbsp;at&nbsp;least&nbsp;`:type`.&nbsp;Missing&nbsp;`:id`&nbsp;keys&nbsp;are
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
050&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tolerable&nbsp;because&nbsp;they&nbsp;represent&nbsp;transient&nbsp;objects,&nbsp;which&nbsp;we&nbsp;expect&nbsp;to&nbsp; 051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tolerable&nbsp;because&nbsp;they&nbsp;represent&nbsp;transient&nbsp;objects,&nbsp;which&nbsp;we&nbsp;expect&nbsp;to&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle. 052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;handle.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityPub&nbsp;spec&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitypub&#x2F;#obj) 054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**NOTE&nbsp;THAT**&nbsp;The&nbsp;ActivityPub&nbsp;spec&nbsp;[says](https:&#x2F;&#x2F;www.w3.org&#x2F;TR&#x2F;activitypub&#x2F;#obj)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;Implementers&nbsp;SHOULD&nbsp;include&nbsp;the&nbsp;ActivityPub&nbsp;context&nbsp;in&nbsp;their&nbsp;object&nbsp; 056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;Implementers&nbsp;SHOULD&nbsp;include&nbsp;the&nbsp;ActivityPub&nbsp;context&nbsp;in&nbsp;their&nbsp;object&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;definitions 057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;&nbsp;definitions
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;in&nbsp;samples&nbsp;found&nbsp;in&nbsp;the&nbsp;wild&nbsp;they&nbsp;typically&nbsp;don&#x27;t.&quot; 059&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;in&nbsp;samples&nbsp;found&nbsp;in&nbsp;the&nbsp;wild&nbsp;they&nbsp;typically&nbsp;don&#x27;t.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;&nbsp;&nbsp;([x] 060&nbsp;&nbsp;&nbsp;&nbsp;([x]
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
060&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x&nbsp;*reject-severity*)) 061&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x&nbsp;*reject-severity*))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity] 062&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
</span><br/> </span><br/>
<span class="covered" title="8 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
062&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(object-faults&nbsp;x)&nbsp;severity)))) 063&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(object-faults&nbsp;x)&nbsp;severity))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
063&nbsp;&nbsp; 064&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
064&nbsp;&nbsp;(defn&nbsp;persistent-object? 065&nbsp;&nbsp;(defn&nbsp;persistent-object?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;a&nbsp;persistent&nbsp;object. 066&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;a&nbsp;persistent&nbsp;object.
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
066&nbsp;&nbsp; 067&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
067&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transient&nbsp;objects&nbsp;in&nbsp;ActivityPub&nbsp;are&nbsp;not&nbsp;required&nbsp;to&nbsp;have&nbsp;an&nbsp;`id`&nbsp;key,&nbsp;but&nbsp;persistent 068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Transient&nbsp;objects&nbsp;in&nbsp;ActivityPub&nbsp;are&nbsp;not&nbsp;required&nbsp;to&nbsp;have&nbsp;an&nbsp;`id`&nbsp;key,&nbsp;but&nbsp;persistent
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
068&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ones&nbsp;must&nbsp;have&nbsp;a&nbsp;key,&nbsp;and&nbsp;it&nbsp;must&nbsp;be&nbsp;an&nbsp;IRI&nbsp;(but&nbsp;normally&nbsp;a&nbsp;URI).&quot; 069&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ones&nbsp;must&nbsp;have&nbsp;a&nbsp;key,&nbsp;and&nbsp;it&nbsp;must&nbsp;be&nbsp;an&nbsp;IRI&nbsp;(but&nbsp;normally&nbsp;a&nbsp;URI).&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
069&nbsp;&nbsp;&nbsp;&nbsp;([x] 070&nbsp;&nbsp;&nbsp;&nbsp;([x]
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
070&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object?&nbsp;x&nbsp;*reject-severity*)) 071&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(persistent-object?&nbsp;x&nbsp;*reject-severity*))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
071&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity] 072&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
</span><br/> </span><br/>
<span class="covered" title="8 out of 8 forms covered"> <span class="partial" title="7 out of 8 forms covered">
072&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(persistent-object-faults&nbsp;x)&nbsp;severity)))) 073&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(persistent-object-faults&nbsp;x)&nbsp;severity))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
073&nbsp;&nbsp; 074&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
074&nbsp;&nbsp;(defn&nbsp;actor? 075&nbsp;&nbsp;(defn&nbsp;actor?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
075&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;actor,&nbsp;else&nbsp;false.&quot; 076&nbsp;&nbsp;&nbsp;&nbsp;&quot;Returns&nbsp;`true`&nbsp;if&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;actor,&nbsp;else&nbsp;false.&quot;
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
076&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(actor?&nbsp;x&nbsp;*reject-severity*)) 077&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(actor?&nbsp;x&nbsp;*reject-severity*))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
077&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity] 078&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
</span><br/> </span><br/>
<span class="covered" title="8 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
078&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(actor-faults&nbsp;x)&nbsp;severity)))) 079&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(actor-faults&nbsp;x)&nbsp;severity))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
079&nbsp;&nbsp; 080&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
080&nbsp;&nbsp;(defn&nbsp;actor-or-uri? 081&nbsp;&nbsp;(defn&nbsp;actor-or-uri?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
081&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;an&nbsp;actor. 082&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;if&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;an&nbsp;actor.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
082&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
083&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**TODO**:&nbsp;I&nbsp;need&nbsp;to&nbsp;decide&nbsp;about&nbsp;whether&nbsp;to&nbsp;reify&nbsp;referenced&nbsp;objects 084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;**TODO**:&nbsp;I&nbsp;need&nbsp;to&nbsp;decide&nbsp;about&nbsp;whether&nbsp;to&nbsp;reify&nbsp;referenced&nbsp;objects
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
084&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;validation&nbsp;or&nbsp;after.&nbsp;After&nbsp;reification,&nbsp;every&nbsp;reference&nbsp;to&nbsp;an&nbsp;actor 085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;before&nbsp;validation&nbsp;or&nbsp;after.&nbsp;After&nbsp;reification,&nbsp;every&nbsp;reference&nbsp;to&nbsp;an&nbsp;actor
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*must&nbsp;be*&nbsp;to&nbsp;an&nbsp;actor&nbsp;object,&nbsp;but&nbsp;before,&nbsp;may&nbsp;only&nbsp;be&nbsp;to&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp; 086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*must&nbsp;be*&nbsp;to&nbsp;an&nbsp;actor&nbsp;object,&nbsp;but&nbsp;before,&nbsp;may&nbsp;only&nbsp;be&nbsp;to&nbsp;a&nbsp;URI&nbsp;pointing&nbsp;to&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
086&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one.&quot; 087&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;one.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
087&nbsp;&nbsp;&nbsp;&nbsp;[x] 088&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
088&nbsp;&nbsp;&nbsp;&nbsp;(try 089&nbsp;&nbsp;&nbsp;&nbsp;(try
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 5 forms covered">
089&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and 090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="not-covered" title="0 out of 9 forms covered">
090&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x)) 091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
091&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor?&nbsp;x)) 092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(actor?&nbsp;x))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
092&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true) 093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
093&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false) 094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;URISyntaxException&nbsp;_&nbsp;false)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
094&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false))) 095&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(catch&nbsp;NullPointerException&nbsp;_&nbsp;false)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
095&nbsp;&nbsp; 096&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
096&nbsp;&nbsp;(defn&nbsp;activity? 097&nbsp;&nbsp;(defn&nbsp;activity?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
097&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;activity,&nbsp;else&nbsp;false.&quot; 098&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;activity,&nbsp;else&nbsp;false.&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
098&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(activity?&nbsp;x&nbsp;*reject-severity*)) 099&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(activity?&nbsp;x&nbsp;*reject-severity*))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
099&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity] 100&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="not-covered" title="0 out of 8 forms covered">
100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(activity-faults&nbsp;x)&nbsp;severity)))) 101&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(activity-faults&nbsp;x)&nbsp;severity))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
101&nbsp;&nbsp; 102&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
102&nbsp;&nbsp;(defn&nbsp;link? 103&nbsp;&nbsp;(defn&nbsp;link?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
103&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.&quot; 104&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.&quot;
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
104&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(link?&nbsp;x&nbsp;*reject-severity*)) 105&nbsp;&nbsp;&nbsp;&nbsp;([x]&nbsp;(link?&nbsp;x&nbsp;*reject-severity*))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
105&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity] 106&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;severity]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 8 forms covered"> <span class="not-covered" title="0 out of 8 forms covered">
106&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(link-faults&nbsp;x)&nbsp;severity)))) 107&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(empty?&nbsp;(filter-severity&nbsp;(link-faults&nbsp;x)&nbsp;severity))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
107&nbsp;&nbsp; 108&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
108&nbsp;&nbsp;(defn&nbsp;link-or-uri? 109&nbsp;&nbsp;(defn&nbsp;link-or-uri?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
109&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;a&nbsp;link,&nbsp;else&nbsp;false. 110&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;is&nbsp;either&nbsp;a&nbsp;URI&nbsp;or&nbsp;a&nbsp;link,&nbsp;else&nbsp;false.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
110&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;points&nbsp;in&nbsp;the&nbsp;specification&nbsp;where&nbsp;e.g.&nbsp;the&nbsp;`:image` 112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;several&nbsp;points&nbsp;in&nbsp;the&nbsp;specification&nbsp;where&nbsp;e.g.&nbsp;the&nbsp;`:image`
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
112&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;(if&nbsp;present)&nbsp;may&nbsp;be&nbsp;either&nbsp;a&nbsp;link&nbsp;or&nbsp;a&nbsp;URI.&quot; 113&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;(if&nbsp;present)&nbsp;may&nbsp;be&nbsp;either&nbsp;a&nbsp;link&nbsp;or&nbsp;a&nbsp;URI.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
113&nbsp;&nbsp;&nbsp;&nbsp;[x] 114&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 5 forms covered">
114&nbsp;&nbsp;&nbsp;&nbsp;(and 115&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="not-covered" title="0 out of 9 forms covered">
115&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x)) 116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond&nbsp;(string?&nbsp;x)&nbsp;(uri?&nbsp;(URI.&nbsp;x))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 3 forms covered"> <span class="not-covered" title="0 out of 3 forms covered">
116&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(link?&nbsp;x)) 117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;(link?&nbsp;x))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
117&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)) 118&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
118&nbsp;&nbsp; 119&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
119&nbsp;&nbsp;(defn&nbsp;collection? 120&nbsp;&nbsp;(defn&nbsp;collection?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
120&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;collection&nbsp;of&nbsp;type&nbsp;`object-type`,&nbsp;else&nbsp;`false`. 121&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;collection&nbsp;of&nbsp;type&nbsp;`object-type`,&nbsp;else&nbsp;`false`.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
121&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
122&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;one&nbsp;argument,&nbsp;will&nbsp;recognise&nbsp;plain&nbsp;collections&nbsp;and&nbsp;ordered&nbsp;collections, 123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;With&nbsp;one&nbsp;argument,&nbsp;will&nbsp;recognise&nbsp;plain&nbsp;collections&nbsp;and&nbsp;ordered&nbsp;collections,
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;(currently)&nbsp;not&nbsp;collection&nbsp;pages.&quot; 124&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;(currently)&nbsp;not&nbsp;collection&nbsp;pages.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
124&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;^String&nbsp;object-type] 125&nbsp;&nbsp;&nbsp;&nbsp;([x&nbsp;^String&nbsp;object-type]
</span><br/> </span><br/>
<span class="partial" title="10 out of 11 forms covered"> <span class="partial" title="10 out of 11 forms covered">
125&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[items&nbsp;(or&nbsp;(:items&nbsp;x)&nbsp;(:orderedItems&nbsp;x))] 126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[items&nbsp;(or&nbsp;(:items&nbsp;x)&nbsp;(:orderedItems&nbsp;x))]
</span><br/> </span><br/>
<span class="partial" title="14 out of 17 forms covered"> <span class="partial" title="14 out of 17 forms covered">
126&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and 127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/> </span><br/>
<span class="partial" title="5 out of 6 forms covered"> <span class="partial" title="5 out of 6 forms covered">
127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond 128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(cond
</span><br/> </span><br/>
<span class="partial" title="3 out of 8 forms covered"> <span class="partial" title="3 out of 8 forms covered">
128&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:items&nbsp;x)&nbsp;(nil?&nbsp;(:orderedItems&nbsp;x)) 129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:items&nbsp;x)&nbsp;(nil?&nbsp;(:orderedItems&nbsp;x))
</span><br/> </span><br/>
<span class="covered" title="8 out of 8 forms covered"> <span class="covered" title="8 out of 8 forms covered">
129&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:orderedItems&nbsp;x)&nbsp;(nil?&nbsp;(:items&nbsp;x))&nbsp;;;&nbsp;can&#x27;t&nbsp;have&nbsp;both&nbsp;properties 130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(:orderedItems&nbsp;x)&nbsp;(nil?&nbsp;(:items&nbsp;x))&nbsp;;;&nbsp;can&#x27;t&nbsp;have&nbsp;both&nbsp;properties
</span><br/> </span><br/>
<span class="covered" title="5 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
130&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true&nbsp;;;&nbsp;can&nbsp;have&nbsp;neither,&nbsp;provided&nbsp;it&nbsp;has&nbsp;totalItems. 131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true&nbsp;;;&nbsp;can&nbsp;have&nbsp;neither,&nbsp;provided&nbsp;it&nbsp;has&nbsp;totalItems.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
131&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false) 132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:else&nbsp;false)
</span><br/> </span><br/>
<span class="covered" title="3 out of 3 forms covered"> <span class="covered" title="3 out of 3 forms covered">
132&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x) 133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(object?&nbsp;x)
</span><br/> </span><br/>
<span class="covered" title="5 out of 5 forms covered"> <span class="covered" title="5 out of 5 forms covered">
133&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(:type&nbsp;x)&nbsp;object-type) 134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(=&nbsp;(:type&nbsp;x)&nbsp;object-type)
</span><br/> </span><br/>
<span class="partial" title="2 out of 3 forms covered"> <span class="partial" title="2 out of 3 forms covered">
134&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;items 135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(if&nbsp;items
</span><br/> </span><br/>
<span class="partial" title="10 out of 12 forms covered"> <span class="partial" title="10 out of 12 forms covered">
135&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;items) 136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(coll?&nbsp;items)
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
136&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;object?&nbsp;items)&nbsp;;;&nbsp;if&nbsp;there&nbsp;are&nbsp;items,&nbsp;they&nbsp;must&nbsp;form&nbsp;a 137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(every?&nbsp;object?&nbsp;items)&nbsp;;;&nbsp;if&nbsp;there&nbsp;are&nbsp;items,&nbsp;they&nbsp;must&nbsp;form&nbsp;a
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
137&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;collection&nbsp;of&nbsp;objects. 138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;collection&nbsp;of&nbsp;objects.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
138&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true) 139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
139&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)&nbsp;;;&nbsp;but&nbsp;it&#x27;s&nbsp;OK&nbsp;if&nbsp;there&nbsp;aren&#x27;t. 140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)&nbsp;;;&nbsp;but&nbsp;it&#x27;s&nbsp;OK&nbsp;if&nbsp;there&nbsp;aren&#x27;t.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
140&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true) 141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
141&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;test&nbsp;for&nbsp;totalItems&nbsp;not&nbsp;done&nbsp;here,&nbsp;because&nbsp;collection&nbsp;pages&nbsp;don&#x27;t 142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;test&nbsp;for&nbsp;totalItems&nbsp;not&nbsp;done&nbsp;here,&nbsp;because&nbsp;collection&nbsp;pages&nbsp;don&#x27;t
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
142&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;have&nbsp;it. 143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;&nbsp;have&nbsp;it.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
143&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)) 144&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
144&nbsp;&nbsp;&nbsp;&nbsp;([x] 145&nbsp;&nbsp;&nbsp;&nbsp;([x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 9 forms covered"> <span class="not-covered" title="0 out of 9 forms covered">
145&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and 146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(and
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 10 forms covered"> <span class="not-covered" title="0 out of 10 forms covered">
146&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;) 147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(or&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 2 forms covered"> <span class="not-covered" title="0 out of 2 forms covered">
147&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)) 148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;))
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 5 forms covered"> <span class="not-covered" title="0 out of 5 forms covered">
148&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x)) 149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
149&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true))) 150&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;true)))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
150&nbsp;&nbsp; 151&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
151&nbsp;&nbsp;(defn&nbsp;unordered-collection? 152&nbsp;&nbsp;(defn&nbsp;unordered-collection?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
152&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;unordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot; 153&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;unordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
153&nbsp;&nbsp;&nbsp;&nbsp;[x] 154&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 18 forms covered"> <span class="not-covered" title="0 out of 18 forms covered">
154&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true)) 155&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;Collection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
155&nbsp;&nbsp; 156&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
156&nbsp;&nbsp;(defn&nbsp;ordered-collection? 157&nbsp;&nbsp;(defn&nbsp;ordered-collection?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
157&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot; 158&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;an&nbsp;ordered&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
158&nbsp;&nbsp;&nbsp;&nbsp;[x] 159&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 18 forms covered"> <span class="not-covered" title="0 out of 18 forms covered">
159&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true)) 160&nbsp;&nbsp;&nbsp;&nbsp;(and&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollection&quot;)&nbsp;(integer?&nbsp;(:totalItems&nbsp;x))&nbsp;true))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
160&nbsp;&nbsp; 161&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
161&nbsp;&nbsp;(defn&nbsp;collection-page? 162&nbsp;&nbsp;(defn&nbsp;collection-page?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
162&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;a&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot; 163&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;a&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
163&nbsp;&nbsp;&nbsp;&nbsp;[x] 164&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="not-covered" title="0 out of 4 forms covered"> <span class="not-covered" title="0 out of 4 forms covered">
164&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;CollectionPage&quot;)) 165&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;CollectionPage&quot;))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
165&nbsp;&nbsp; 166&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="1 out of 1 forms covered"> <span class="covered" title="1 out of 1 forms covered">
166&nbsp;&nbsp;(defn&nbsp;ordered-collection-page? 167&nbsp;&nbsp;(defn&nbsp;ordered-collection-page?
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
167&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;an&nbsp;ordered&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot; 168&nbsp;&nbsp;&nbsp;&nbsp;&quot;`true`&nbsp;iff&nbsp;`x`&nbsp;quacks&nbsp;like&nbsp;a&nbsp;page&nbsp;in&nbsp;an&nbsp;ordered&nbsp;paged&nbsp;collection,&nbsp;else&nbsp;`false`.&quot;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
168&nbsp;&nbsp;&nbsp;&nbsp;[x] 169&nbsp;&nbsp;&nbsp;&nbsp;[x]
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered"> <span class="covered" title="4 out of 4 forms covered">
169&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollectionPage&quot;)) 170&nbsp;&nbsp;&nbsp;&nbsp;(collection?&nbsp;x&nbsp;&quot;OrderedCollectionPage&quot;))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
170&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
171&nbsp;&nbsp; 171&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered">
172&nbsp;&nbsp;
</span><br/>
</body> </body>
</html> </html>

View file

@ -17,163 +17,190 @@
004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-activitypub.webfinger&nbsp;:as&nbsp;webfinger] 004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-activitypub.webfinger&nbsp;:as&nbsp;webfinger]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-pgp.generate&nbsp;:as&nbsp;pgp-gen] 005&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-activitypub.net&nbsp;:as&nbsp;activitypub-net]
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]])) 006&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clj-pgp.generate&nbsp;:as&nbsp;pgp-gen]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
007&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.walk&nbsp;:refer&nbsp;[keywordize-keys]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.pprint&nbsp;:refer&nbsp;[pprint]]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
009&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[clojure.data.json&nbsp;:as&nbsp;json]))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
007&nbsp;&nbsp; 010&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
008&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022 011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Copyright&nbsp;(C)&nbsp;Simon&nbsp;Brooke,&nbsp;2022
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
009&nbsp;&nbsp; 012&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
010&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or 013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;free&nbsp;software;&nbsp;you&nbsp;can&nbsp;redistribute&nbsp;it&nbsp;and&#x2F;or
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
011&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License 014&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;modify&nbsp;it&nbsp;under&nbsp;the&nbsp;terms&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
012&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2 015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;as&nbsp;published&nbsp;by&nbsp;the&nbsp;Free&nbsp;Software&nbsp;Foundation;&nbsp;either&nbsp;version&nbsp;2
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
013&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version. 016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;the&nbsp;License,&nbsp;or&nbsp;(at&nbsp;your&nbsp;option)&nbsp;any&nbsp;later&nbsp;version.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
014&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 017&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
015&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful, 018&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This&nbsp;program&nbsp;is&nbsp;distributed&nbsp;in&nbsp;the&nbsp;hope&nbsp;that&nbsp;it&nbsp;will&nbsp;be&nbsp;useful,
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
016&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of 019&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;but&nbsp;WITHOUT&nbsp;ANY&nbsp;WARRANTY;&nbsp;without&nbsp;even&nbsp;the&nbsp;implied&nbsp;warranty&nbsp;of
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
017&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the 020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MERCHANTABILITY&nbsp;or&nbsp;FITNESS&nbsp;FOR&nbsp;A&nbsp;PARTICULAR&nbsp;PURPOSE.&nbsp;&nbsp;See&nbsp;the
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
018&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details. 021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License&nbsp;for&nbsp;more&nbsp;details.
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
019&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 022&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
020&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License 023&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;You&nbsp;should&nbsp;have&nbsp;received&nbsp;a&nbsp;copy&nbsp;of&nbsp;the&nbsp;GNU&nbsp;General&nbsp;Public&nbsp;License
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
021&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software 024&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;along&nbsp;with&nbsp;this&nbsp;program;&nbsp;if&nbsp;not,&nbsp;write&nbsp;to&nbsp;the&nbsp;Free&nbsp;Software
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
022&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA. 025&nbsp;&nbsp;;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Foundation,&nbsp;Inc.,&nbsp;51&nbsp;Franklin&nbsp;Street,&nbsp;Fifth&nbsp;Floor,&nbsp;Boston,&nbsp;MA&nbsp;&nbsp;02110-1301,&nbsp;USA.
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
023&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
024&nbsp;&nbsp;;;;&nbsp;Use&nbsp;any&nbsp;ActivityPub&nbsp;account&nbsp;handle&nbsp;you&nbsp;like&nbsp;-&nbsp;for&nbsp;example,&nbsp;your&nbsp;own
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
025&nbsp;&nbsp;(def&nbsp;account-handle&nbsp;&quot;@simon_brooke@mastodon.scot&quot;)
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
026&nbsp;&nbsp; 026&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="covered" title="4 out of 4 forms covered">
027&nbsp;&nbsp;(def&nbsp;handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle))
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
028&nbsp;&nbsp;(webfinger&#x2F;fetch-user-id&nbsp;&quot;mastodon.scot&quot;&nbsp;&quot;simon_brooke&quot;)
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
029&nbsp;&nbsp;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
030&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
031&nbsp;&nbsp;;;;&nbsp;Retrieve&nbsp;the&nbsp;account&nbsp;details&nbsp;from&nbsp;its&nbsp;home&nbsp;server 027&nbsp;&nbsp;;;;&nbsp;Use&nbsp;any&nbsp;ActivityPub&nbsp;account&nbsp;handle&nbsp;you&nbsp;like&nbsp;-&nbsp;for&nbsp;example,&nbsp;your&nbsp;own
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;;;;&nbsp;(`keywordize-keys`&nbsp;is&nbsp;not&nbsp;necessary&nbsp;here&nbsp;but&nbsp;produces&nbsp;a&nbsp;more&nbsp;idiomatic&nbsp;clojure
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
033&nbsp;&nbsp;;;;&nbsp;data&nbsp;structure)
</span><br/>
<span class="covered" title="1 out of 1 forms covered">
034&nbsp;&nbsp;(def&nbsp;account
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;&nbsp;&nbsp;&quot;Fetch&nbsp;my&nbsp;account&nbsp;to&nbsp;mess&nbsp;with&quot;
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
036&nbsp;&nbsp;&nbsp;&nbsp;(let&nbsp;[handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle)]
</span><br/> </span><br/>
<span class="covered" title="2 out of 2 forms covered"> <span class="covered" title="2 out of 2 forms covered">
037&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(keywordize-keys 028&nbsp;&nbsp;(def&nbsp;account-handle&nbsp;&quot;@simon_brooke@mastodon.scot&quot;)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
038&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activitypub&#x2F;fetch-user
</span><br/>
<span class="covered" title="9 out of 9 forms covered">
039&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))))))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
040&nbsp;&nbsp; 029&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;;;;&nbsp;examine&nbsp;what&nbsp;you&nbsp;got&nbsp;back! 030&nbsp;&nbsp;;;(def&nbsp;handle&nbsp;(activitypub&#x2F;parse-account&nbsp;account-handle))
</span><br/> </span><br/>
<span class="covered" title="3 out of 3 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;(:inbox&nbsp;account) 031&nbsp;&nbsp;;;(webfinger&#x2F;fetch-user-id&nbsp;&quot;mastodon.scot&quot;&nbsp;&quot;simon_brooke&quot;)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
032&nbsp;&nbsp;;;(apply&nbsp;webfinger&#x2F;fetch-user-id&nbsp;(map&nbsp;handle&nbsp;[:domain&nbsp;:username]))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
033&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
034&nbsp;&nbsp;;;;&nbsp;Retrieve&nbsp;the&nbsp;account&nbsp;details&nbsp;from&nbsp;its&nbsp;home&nbsp;server
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
035&nbsp;&nbsp;;;;&nbsp;(`keywordize-keys`&nbsp;is&nbsp;not&nbsp;necessary&nbsp;here&nbsp;but&nbsp;produces&nbsp;a&nbsp;more&nbsp;idiomatic&nbsp;clojure
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
036&nbsp;&nbsp;;;;&nbsp;data&nbsp;structure)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
037&nbsp;&nbsp;;;&nbsp;(def&nbsp;account
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
038&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(-&gt;&nbsp;account-handle
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
039&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(webfinger&#x2F;parse-handle)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
040&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(webfinger&#x2F;fetch-user-id!)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
041&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(activitypub-net&#x2F;fetch-user!)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
042&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(select-keys&nbsp;[:name&nbsp;:preferredUsername&nbsp;:inbox&nbsp;:summary])))
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
043&nbsp;&nbsp; 043&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
044&nbsp;&nbsp;;;&nbsp;(def&nbsp;rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048)) 044&nbsp;&nbsp;;;&nbsp;;;;&nbsp;examine&nbsp;what&nbsp;you&nbsp;got&nbsp;back!
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
045&nbsp;&nbsp;;;&nbsp;(def&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general)) 045&nbsp;&nbsp;;;&nbsp;(:inbox&nbsp;account)
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
046&nbsp;&nbsp; 046&nbsp;&nbsp;
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
047&nbsp;&nbsp;;;&nbsp;how&nbsp;we&nbsp;make&nbsp;a&nbsp;public&#x2F;private&nbsp;key&nbsp;pair.&nbsp;But&nbsp;this&nbsp;key&nbsp;pair&nbsp;is&nbsp;not&nbsp;the&nbsp;one&nbsp; 047&nbsp;&nbsp;;;&nbsp;(-&gt;&nbsp;account
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
048&nbsp;&nbsp;;;&nbsp;known&nbsp;to&nbsp;mastodon.scot&nbsp;as&nbsp;my&nbsp;key&nbsp;pair,&nbsp;so&nbsp;that&nbsp;doesn&#x27;t&nbsp;get&nbsp;us&nbsp;very&nbsp;far... 048&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:inbox
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
049&nbsp;&nbsp;;;&nbsp;I&nbsp;think. 049&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;slurp
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
050&nbsp;&nbsp;(let&nbsp;[rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048)
</span><br/>
<span class="covered" title="4 out of 4 forms covered">
051&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general)
</span><br/>
<span class="covered" title="2 out of 2 forms covered">
052&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;(-&gt;&nbsp;kp&nbsp;.getPublicKey&nbsp;.getEncoded)
</span><br/>
<span class="covered" title="3 out of 3 forms covered">
053&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;(-&gt;&nbsp;kp&nbsp;.getPrivateKey&nbsp;.getPrivateKeyDataPacket&nbsp;.getEncoded)]
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
054&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Public&nbsp;key:&nbsp;&nbsp;&quot;&nbsp;public))
</span><br/>
<span class="covered" title="6 out of 6 forms covered">
055&nbsp;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Private&nbsp;key:&nbsp;&quot;&nbsp;private))
</span><br/> </span><br/>
<span class="not-tracked" title="0 out of 0 forms covered"> <span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;&nbsp;&nbsp;) 050&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;json&#x2F;read-str
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
051&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pprint)&nbsp;;;&nbsp;=&gt;&nbsp;80
</span><br/> </span><br/>
<span class="blank" title="0 out of 0 forms covered"> <span class="blank" title="0 out of 0 forms covered">
057&nbsp;&nbsp; 052&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
053&nbsp;&nbsp;;;&nbsp;(def&nbsp;rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
054&nbsp;&nbsp;;;&nbsp;(def&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general))
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
055&nbsp;&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
056&nbsp;&nbsp;;;&nbsp;how&nbsp;we&nbsp;make&nbsp;a&nbsp;public&#x2F;private&nbsp;key&nbsp;pair.&nbsp;But&nbsp;this&nbsp;key&nbsp;pair&nbsp;is&nbsp;not&nbsp;the&nbsp;one&nbsp;
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
057&nbsp;&nbsp;;;&nbsp;known&nbsp;to&nbsp;mastodon.scot&nbsp;as&nbsp;my&nbsp;key&nbsp;pair,&nbsp;so&nbsp;that&nbsp;doesn&#x27;t&nbsp;get&nbsp;us&nbsp;very&nbsp;far...
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
058&nbsp;&nbsp;;;&nbsp;I&nbsp;think.
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
059&nbsp;&nbsp;;;&nbsp;(let&nbsp;[rsa&nbsp;(pgp-gen&#x2F;rsa-keypair-generator&nbsp;2048)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
060&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kp&nbsp;(pgp-gen&#x2F;generate-keypair&nbsp;rsa&nbsp;:rsa-general)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
061&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;(-&gt;&nbsp;kp&nbsp;.getPublicKey&nbsp;.getEncoded)
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
062&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;(-&gt;&nbsp;kp&nbsp;.getPrivateKey&nbsp;.getPrivateKeyDataPacket&nbsp;.getEncoded)]
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
063&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Public&nbsp;key:&nbsp;&nbsp;&quot;&nbsp;public))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
064&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;(println&nbsp;(str&nbsp;&quot;Private&nbsp;key:&nbsp;&quot;&nbsp;private))
</span><br/>
<span class="not-tracked" title="0 out of 0 forms covered">
065&nbsp;&nbsp;;;&nbsp;&nbsp;&nbsp;)
</span><br/>
<span class="blank" title="0 out of 0 forms covered">
066&nbsp;&nbsp;
</span><br/> </span><br/>
</body> </body>
</html> </html>

View file

@ -15,126 +15,60 @@
<td class="with-number">Total</td><td class="with-number">Blank</td><td class="with-number">Instrumented</td> <td class="with-number">Total</td><td class="with-number">Blank</td><td class="with-number">Instrumented</td>
</tr></thead> </tr></thead>
<tr> <tr>
<td><a href="clj_activitypub/core.clj.html">clj-activitypub.core</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/cli.clj.html">dog-and-duck.quack.cli</a></td><td class="with-bar"><div class="covered"
style="width:23.588039867109636%; style="width:11.986301369863014%;
float:left;"> 71 </div><div class="not-covered" float:left;"> 70 </div><div class="not-covered"
style="width:76.41196013289037%; style="width:88.01369863013699%;
float:left;"> 230 </div></td> float:left;"> 514 </div></td>
<td class="with-number">23.59 %</td> <td class="with-number">11.99 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:27.906976744186046%; style="width:21.50537634408602%;
float:left;"> 24 </div><div class="partial" float:left;"> 20 </div><div class="partial"
style="width:2.3255813953488373%; style="width:2.150537634408602%;
float:left;"> 2 </div><div class="not-covered" float:left;"> 2 </div><div class="not-covered"
style="width:69.76744186046511%; style="width:76.34408602150538%;
float:left;"> 60 </div></td> float:left;"> 71 </div></td>
<td class="with-number">30.23 %</td> <td class="with-number">23.66 %</td>
<td class="with-number">150</td><td class="with-number">14</td><td class="with-number">86</td> <td class="with-number">139</td><td class="with-number">10</td><td class="with-number">93</td>
</tr>
<tr>
<td><a href="clj_activitypub/internal/crypto.clj.html">clj-activitypub.internal.crypto</a></td><td class="with-bar"><div class="covered"
style="width:18.75%;
float:left;"> 9 </div><div class="not-covered"
style="width:81.25%;
float:left;"> 39 </div></td>
<td class="with-number">18.75 %</td>
<td class="with-bar"><div class="covered"
style="width:39.130434782608695%;
float:left;"> 9 </div><div class="not-covered"
style="width:60.869565217391305%;
float:left;"> 14 </div></td>
<td class="with-number">39.13 %</td>
<td class="with-number">39</td><td class="with-number">8</td><td class="with-number">23</td>
</tr>
<tr>
<td><a href="clj_activitypub/internal/http_util.clj.html">clj-activitypub.internal.http-util</a></td><td class="with-bar"><div class="covered"
style="width:74.35897435897436%;
float:left;"> 29 </div><div class="not-covered"
style="width:25.641025641025642%;
float:left;"> 10 </div></td>
<td class="with-number">74.36 %</td>
<td class="with-bar"><div class="covered"
style="width:80.0%;
float:left;"> 12 </div><div class="not-covered"
style="width:20.0%;
float:left;"> 3 </div></td>
<td class="with-number">80.00 %</td>
<td class="with-number">28</td><td class="with-number">3</td><td class="with-number">15</td>
</tr>
<tr>
<td><a href="clj_activitypub/internal/thread_cache.clj.html">clj-activitypub.internal.thread-cache</a></td><td class="with-bar"><div class="covered"
style="width:83.33333333333333%;
float:left;"> 105 </div><div class="not-covered"
style="width:16.666666666666668%;
float:left;"> 21 </div></td>
<td class="with-number">83.33 %</td>
<td class="with-bar"><div class="covered"
style="width:88.23529411764706%;
float:left;"> 30 </div><div class="partial"
style="width:2.9411764705882355%;
float:left;"> 1 </div><div class="not-covered"
style="width:8.823529411764707%;
float:left;"> 3 </div></td>
<td class="with-number">91.18 %</td>
<td class="with-number">47</td><td class="with-number">3</td><td class="with-number">34</td>
</tr>
<tr>
<td><a href="clj_activitypub/webfinger.clj.html">clj-activitypub.webfinger</a></td><td class="with-bar"><div class="covered"
style="width:95.53571428571429%;
float:left;"> 107 </div><div class="not-covered"
style="width:4.464285714285714%;
float:left;"> 5 </div></td>
<td class="with-number">95.54 %</td>
<td class="with-bar"><div class="covered"
style="width:88.88888888888889%;
float:left;"> 16 </div><div class="partial"
style="width:11.11111111111111%;
float:left;"> 2 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">35</td><td class="with-number">5</td><td class="with-number">18</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/quack/picky.clj.html">dog-and-duck.quack.picky</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/picky.clj.html">dog-and-duck.quack.picky</a></td><td class="with-bar"><div class="covered"
style="width:41.6256157635468%; style="width:55.41871921182266%;
float:left;"> 169 </div><div class="not-covered" float:left;"> 225 </div><div class="not-covered"
style="width:58.3743842364532%; style="width:44.58128078817734%;
float:left;"> 237 </div></td> float:left;"> 181 </div></td>
<td class="with-number">41.63 %</td> <td class="with-number">55.42 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:58.55855855855856%; style="width:66.07142857142857%;
float:left;"> 65 </div><div class="partial" float:left;"> 74 </div><div class="partial"
style="width:2.7027027027027026%; style="width:4.464285714285714%;
float:left;"> 3 </div><div class="not-covered" float:left;"> 5 </div><div class="not-covered"
style="width:38.73873873873874%; style="width:29.464285714285715%;
float:left;"> 43 </div></td> float:left;"> 33 </div></td>
<td class="with-number">61.26 %</td> <td class="with-number">70.54 %</td>
<td class="with-number">251</td><td class="with-number">15</td><td class="with-number">111</td> <td class="with-number">252</td><td class="with-number">15</td><td class="with-number">112</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/quack/picky/collections.clj.html">dog-and-duck.quack.picky.collections</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/picky/collections.clj.html">dog-and-duck.quack.picky.collections</a></td><td class="with-bar"><div class="covered"
style="width:3.007518796992481%; style="width:100.0%;
float:left;"> 4 </div><div class="not-covered" float:left;"> 130 </div></td>
style="width:96.99248120300751%; <td class="with-number">100.00 %</td>
float:left;"> 129 </div></td>
<td class="with-number">3.01 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:16.666666666666668%; style="width:100.0%;
float:left;"> 4 </div><div class="not-covered" float:left;"> 25 </div></td>
style="width:83.33333333333333%; <td class="with-number">100.00 %</td>
float:left;"> 20 </div></td> <td class="with-number">60</td><td class="with-number">8</td><td class="with-number">25</td>
<td class="with-number">16.67 %</td>
<td class="with-number">57</td><td class="with-number">8</td><td class="with-number">24</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/quack/picky/constants.clj.html">dog-and-duck.quack.picky.constants</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/picky/constants.clj.html">dog-and-duck.quack.picky.constants</a></td><td class="with-bar"><div class="covered"
style="width:100.0%; style="width:100.0%;
float:left;"> 73 </div></td> float:left;"> 99 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">100.00 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:100.0%; style="width:100.0%;
float:left;"> 18 </div></td> float:left;"> 23 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">100.00 %</td>
<td class="with-number">79</td><td class="with-number">12</td><td class="with-number">18</td> <td class="with-number">116</td><td class="with-number">15</td><td class="with-number">23</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/quack/picky/control_variables.clj.html">dog-and-duck.quack.picky.control-variables</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/picky/control_variables.clj.html">dog-and-duck.quack.picky.control-variables</a></td><td class="with-bar"><div class="covered"
@ -148,75 +82,98 @@
<td class="with-number">49</td><td class="with-number">6</td><td class="with-number">3</td> <td class="with-number">49</td><td class="with-number">6</td><td class="with-number">3</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/quack/picky/fault_messages.clj.html">dog-and-duck.quack.picky.fault-messages</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/quack/picky/distribution.clj.html">dog-and-duck.quack.picky.distribution</a></td><td class="with-bar"><div class="covered"
style="width:100.0%; style="width:10.0%;
float:left;"> 29 </div></td> float:left;"> 2 </div><div class="not-covered"
<td class="with-number">100.00 %</td> style="width:90.0%;
<td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 3 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">35</td><td class="with-number">5</td><td class="with-number">3</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/required_properties.clj.html">dog-and-duck.quack.picky.required-properties</a></td><td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">1</td><td class="with-number">0</td><td class="with-number">1</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/utils.clj.html">dog-and-duck.quack.picky.utils</a></td><td class="with-bar"><div class="covered"
style="width:49.94786235662148%;
float:left;"> 479 </div><div class="not-covered"
style="width:50.05213764337852%;
float:left;"> 480 </div></td>
<td class="with-number">49.95 %</td>
<td class="with-bar"><div class="covered"
style="width:38.775510204081634%;
float:left;"> 57 </div><div class="partial"
style="width:6.122448979591836%;
float:left;"> 9 </div><div class="not-covered"
style="width:55.10204081632653%;
float:left;"> 81 </div></td>
<td class="with-number">44.90 %</td>
<td class="with-number">319</td><td class="with-number">30</td><td class="with-number">147</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/quack.clj.html">dog-and-duck.quack.quack</a></td><td class="with-bar"><div class="covered"
style="width:46.56488549618321%;
float:left;"> 122 </div><div class="not-covered"
style="width:53.43511450381679%;
float:left;"> 140 </div></td>
<td class="with-number">46.56 %</td>
<td class="with-bar"><div class="covered"
style="width:51.02040816326531%;
float:left;"> 25 </div><div class="partial"
style="width:12.244897959183673%;
float:left;"> 6 </div><div class="not-covered"
style="width:36.734693877551024%;
float:left;"> 18 </div></td> float:left;"> 18 </div></td>
<td class="with-number">63.27 %</td> <td class="with-number">10.00 %</td>
<td class="with-number">171</td><td class="with-number">21</td><td class="with-number">49</td> <td class="with-bar"><div class="covered"
</tr>
<tr>
<td><a href="dog_and_duck/scratch/core.clj.html">dog-and-duck.scratch.core</a></td><td class="with-bar"><div class="covered"
style="width:33.333333333333336%; style="width:33.333333333333336%;
float:left;"> 2 </div><div class="not-covered" float:left;"> 2 </div><div class="not-covered"
style="width:66.66666666666667%; style="width:66.66666666666667%;
float:left;"> 4 </div></td> float:left;"> 4 </div></td>
<td class="with-number">33.33 %</td> <td class="with-number">33.33 %</td>
<td class="with-number">30</td><td class="with-number">5</td><td class="with-number">6</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/objects.clj.html">dog-and-duck.quack.picky.objects</a></td><td class="with-bar"><div class="covered"
style="width:81.38759172781855%;
float:left;"> 1220 </div><div class="not-covered"
style="width:18.612408272181455%;
float:left;"> 279 </div></td>
<td class="with-number">81.39 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:66.66666666666667%; style="width:83.48348348348348%;
float:left;"> 2 </div><div class="not-covered" float:left;"> 278 </div><div class="partial"
style="width:33.333333333333336%; style="width:7.5075075075075075%;
float:left;"> 25 </div><div class="not-covered"
style="width:9.00900900900901%;
float:left;"> 30 </div></td>
<td class="with-number">90.99 %</td>
<td class="with-number">522</td><td class="with-number">16</td><td class="with-number">333</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/scratch.clj.html">dog-and-duck.quack.picky.scratch</a></td><td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td> float:left;"> 1 </div></td>
<td class="with-number">66.67 %</td> <td class="with-number">100.00 %</td>
<td class="with-number">22</td><td class="with-number">5</td><td class="with-number">3</td> <td class="with-bar"><div class="covered"
style="width:100.0%;
float:left;"> 1 </div></td>
<td class="with-number">100.00 %</td>
<td class="with-number">53</td><td class="with-number">6</td><td class="with-number">1</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/time.clj.html">dog-and-duck.quack.picky.time</a></td><td class="with-bar"><div class="covered"
style="width:7.407407407407407%;
float:left;"> 10 </div><div class="not-covered"
style="width:92.5925925925926%;
float:left;"> 125 </div></td>
<td class="with-number">7.41 %</td>
<td class="with-bar"><div class="covered"
style="width:22.22222222222222%;
float:left;"> 4 </div><div class="partial"
style="width:11.11111111111111%;
float:left;"> 2 </div><div class="not-covered"
style="width:66.66666666666667%;
float:left;"> 12 </div></td>
<td class="with-number">33.33 %</td>
<td class="with-number">66</td><td class="with-number">7</td><td class="with-number">18</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/picky/utils.clj.html">dog-and-duck.quack.picky.utils</a></td><td class="with-bar"><div class="covered"
style="width:62.62626262626262%;
float:left;"> 434 </div><div class="not-covered"
style="width:37.37373737373738%;
float:left;"> 259 </div></td>
<td class="with-number">62.63 %</td>
<td class="with-bar"><div class="covered"
style="width:60.18518518518518%;
float:left;"> 65 </div><div class="partial"
style="width:16.666666666666668%;
float:left;"> 18 </div><div class="not-covered"
style="width:23.14814814814815%;
float:left;"> 25 </div></td>
<td class="with-number">76.85 %</td>
<td class="with-number">253</td><td class="with-number">26</td><td class="with-number">108</td>
</tr>
<tr>
<td><a href="dog_and_duck/quack/quack.clj.html">dog-and-duck.quack.quack</a></td><td class="with-bar"><div class="covered"
style="width:46.18320610687023%;
float:left;"> 121 </div><div class="not-covered"
style="width:53.81679389312977%;
float:left;"> 141 </div></td>
<td class="with-number">46.18 %</td>
<td class="with-bar"><div class="covered"
style="width:48.97959183673469%;
float:left;"> 24 </div><div class="partial"
style="width:14.285714285714286%;
float:left;"> 7 </div><div class="not-covered"
style="width:36.734693877551024%;
float:left;"> 18 </div></td>
<td class="with-number">63.27 %</td>
<td class="with-number">172</td><td class="with-number">21</td><td class="with-number">49</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/scratch/parser.clj.html">dog-and-duck.scratch.parser</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/scratch/parser.clj.html">dog-and-duck.scratch.parser</a></td><td class="with-bar"><div class="covered"
@ -238,13 +195,13 @@
<tr> <tr>
<td><a href="dog_and_duck/scratch/scratch.clj.html">dog-and-duck.scratch.scratch</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/scratch/scratch.clj.html">dog-and-duck.scratch.scratch</a></td><td class="with-bar"><div class="covered"
style="width:100.0%; style="width:100.0%;
float:left;"> 66 </div></td> float:left;"> 3 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">100.00 %</td>
<td class="with-bar"><div class="covered" <td class="with-bar"><div class="covered"
style="width:100.0%; style="width:100.0%;
float:left;"> 17 </div></td> float:left;"> 2 </div></td>
<td class="with-number">100.00 %</td> <td class="with-number">100.00 %</td>
<td class="with-number">57</td><td class="with-number">9</td><td class="with-number">17</td> <td class="with-number">66</td><td class="with-number">10</td><td class="with-number">2</td>
</tr> </tr>
<tr> <tr>
<td><a href="dog_and_duck/utils/process.clj.html">dog-and-duck.utils.process</a></td><td class="with-bar"><div class="covered" <td><a href="dog_and_duck/utils/process.clj.html">dog-and-duck.utils.process</a></td><td class="with-bar"><div class="covered"
@ -263,9 +220,9 @@
</tr> </tr>
<tr><td>Totals:</td> <tr><td>Totals:</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">50.34 %</td> <td class="with-number">60.82 %</td>
<td class="with-bar"></td> <td class="with-bar"></td>
<td class="with-number">57.34 %</td> <td class="with-number">75.54 %</td>
</tr> </tr>
</table> </table>
</body> </body>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -56,11 +56,11 @@
;; how we make a public/private key pair. But this key pair is not the one ;; how we make a public/private key pair. But this key pair is not the one
;; known to mastodon.scot as my key pair, so that doesn't get us very far... ;; known to mastodon.scot as my key pair, so that doesn't get us very far...
;; I think. ;; I think.
(let [rsa (pgp-gen/rsa-keypair-generator 2048) ;; (let [rsa (pgp-gen/rsa-keypair-generator 2048)
kp (pgp-gen/generate-keypair rsa :rsa-general) ;; kp (pgp-gen/generate-keypair rsa :rsa-general)
public (-> kp .getPublicKey .getEncoded) ;; public (-> kp .getPublicKey .getEncoded)
private (-> kp .getPrivateKey .getPrivateKeyDataPacket .getEncoded)] ;; private (-> kp .getPrivateKey .getPrivateKeyDataPacket .getEncoded)]
(println (str "Public key: " public)) ;; (println (str "Public key: " public))
(println (str "Private key: " private)) ;; (println (str "Private key: " private))
) ;; )