@@ -0,0 +1,166 @@
1+:: Full checking for doc fragments in their intended module/prelude contexts.
2+/+ jibb, jibb-import
3+/* prelude %jibb /lib/jibb/prelude/jibb
4+/* internal %jibb /lib/jibb/internal/jibb
5+/* imports %jibb /tests/golden/doc-grammar-01-imports/source/jibb
6+/* view-day %jibb /tests/golden/doc-grammar-03-view-day/source/jibb
7+/* step %jibb /tests/golden/doc-grammar-04-step/source/jibb
8+/* cmd-sub %jibb /tests/golden/doc-overview-01-cmd-sub/source/jibb
9+/* todo-sur %txt /tests/type-api-paths/todo-sur/txt
10+/* todo-action %txt /tests/type-api-paths/todo-action/txt
11+/* blog-sur %txt /tests/type-page-main/blog-sur/txt
12+/* card %txt /tests/type-page-main/card/txt
13+|%
14+++ text
15+ |= lines=wain
16+ ^- @t
17+ (rap 3 (turn lines |=(line=@t (cat 3 line '\0a'))))
18+::
19+++ doc-detailed
20+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
21+ ^- jfile-detailed-result:jibb
22+ (infer-jibb-file-detailed:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
23+::
24+++ doc-legacy
25+ |= [at=path src=@t externals=iexternals:jibb marks=imark-externals:jibb modules=jbundle:jibb prepared=iprelude:jibb]
26+ ^- jfile-result:jibb
27+ (infer-jibb-file:jibb at src externals marks modules ~[at] values.prepared molds.prepared ~ `iface.prepared)
28+::
29+++ doc-reader-inputs
30+ |= [sur=@t action=@t blog=@t]
31+ ^- [marks=imark-externals:jibb externals=iexternals:jibb]
32+ =/ todo=type -:(ride -:!>(..zuse) sur)
33+ =/ todo-subject=type [%cell [%face %todo todo] -:!>(..zuse)]
34+ =/ action-result=* (read-mark:jibb-import %todo-action -:(ride todo-subject action))
35+ =/ item-input=* (read-named:jibb-import %todo %item todo)
36+ =/ posts=type -:(ride -:!>(..zuse) blog)
37+ =/ post-input=* (read-named:jibb-import %blog %post posts)
38+ :_ ~[[%todo %item item-input] [%blog %post post-input]]
39+ ~[[%todo-action action-result]]
40+::
41+++ doc-value-errors
42+ |= [label=tape name=term expected=@t checked=ifile:jibb]
43+ ^- (list tape)
44+ =/ value=(unit ischeme:jibb) (ienv-lookup:jibb name values.checked)
45+ ?~ value ~[(weld label ": value is missing")]
46+ =/ printed=itype:jibb (canonical-itype:jibb typ.u.value vars.u.value)
47+ =/ actual=@t (crip (show-itype:jibb printed ~))
48+ ?. =(actual expected) ~[(weld label (weld ": type was " (trip actual)))]
49+ ~
50+::
51+++ doc-positive
52+ |= [label=tape at=path src=@t name=term expected=@t prepared=iprelude:jibb]
53+ ^- (list tape)
54+ =/ detailed=jfile-detailed-result:jibb (doc-detailed at src ~ ~ ~ prepared)
55+ ?: ?=(%| -.detailed) ~[(weld label (weld ": detailed rejected: " (trip message.p.detailed)))]
56+ =/ legacy=jfile-result:jibb (doc-legacy at src ~ ~ ~ prepared)
57+ ?: ?=(%| -.legacy) ~[(weld label (weld ": legacy rejected: " (trip p.legacy)))]
58+ =/ failures=(list tape)
59+ (doc-value-errors (weld label ": detailed") name expected iface.p.detailed)
60+ =? failures !=(values.iface.p.detailed values.iface.p.legacy)
61+ [(weld label ": detailed and legacy values differ") failures]
62+ =? failures !=(molds.iface.p.detailed molds.iface.p.legacy)
63+ [(weld label ": detailed and legacy molds differ") failures]
64+ (weld failures (doc-value-errors (weld label ": legacy") name expected iface.p.legacy))
65+::
66+++ doc-cmd-prelude
67+ |= prepared=iprelude:jibb
68+ ^- iprelude:jibb
69+ =/ excluded=(list term) ~[%cmd %sub]
70+ =/ kept=imold-types:jibb
71+ (skim molds.iface.prepared |=(m=[name=term template=ischeme:jibb] !(lien excluded |=(n=term =(n name.m)))))
72+ =/ names=(list term)
73+ (skim molds.prepared |=(n=term !(lien excluded |=(x=term =(x n)))))
74+ [iface.prepared(molds kept) values.prepared names]
75+::
76+++ doc-cmd-interface-errors
77+ |= [label=tape checked=ifile:jibb original=ifile:jibb]
78+ ^- (list tape)
79+ =/ failures=(list tape) ~
80+ =/ names=(list term) ~[%cmd %sub]
81+ |-
82+ ?~ names failures
83+ =/ actual=(unit ischeme:jibb) (find-jibb-mold:jibb i.names checked)
84+ =/ expected=(unit ischeme:jibb) (find-jibb-mold:jibb i.names original)
85+ ?~ actual $(names t.names, failures [(weld label ": mold is missing") failures])
86+ ?~ expected $(names t.names, failures [(weld label ": canonical mold is missing") failures])
87+ =/ actual-type=itype:jibb (canonical-itype:jibb typ.u.actual vars.u.actual)
88+ =/ expected-type=itype:jibb (canonical-itype:jibb typ.u.expected vars.u.expected)
89+ =/ shown=@t (crip (show-itype:jibb actual-type ~))
90+ =/ expected-shown=@t (crip (show-itype:jibb expected-type ~))
91+ ?. =(shown expected-shown)
92+ $(names t.names, failures [(weld label (weld ": mold scheme was " (trip shown))) failures])
93+ $(names t.names)
94+::
95+++ doc-cmd-errors
96+ |= [src=@t prepared=iprelude:jibb]
97+ ^- (list tape)
98+ =/ at=path /lib/jibb/prelude/jibb
99+ =/ reduced=iprelude:jibb (doc-cmd-prelude prepared)
100+ =/ detailed=jfile-detailed-result:jibb (doc-detailed at src ~ ~ ~ reduced)
101+ ?: ?=(%| -.detailed) ~[(weld "cmd/sub detailed rejected: " (trip message.p.detailed))]
102+ =/ legacy=jfile-result:jibb (doc-legacy at src ~ ~ ~ reduced)
103+ ?: ?=(%| -.legacy) ~[(weld "cmd/sub legacy rejected: " (trip p.legacy))]
104+ =/ failures=(list tape)
105+ (doc-cmd-interface-errors "cmd/sub detailed" iface.p.detailed iface.prepared)
106+ =? failures !=(molds.iface.p.detailed molds.iface.p.legacy)
107+ ["cmd/sub detailed and legacy molds differ" failures]
108+ (weld failures (doc-cmd-interface-errors "cmd/sub legacy" iface.p.legacy iface.prepared))
109+::
110+++ doc-import-errors
111+ |= [src=@t sur=@t action=@t blog=@t card-source=@t prepared=iprelude:jibb]
112+ ^- (list tape)
113+ =/ at=path /ui/imports/jibb
114+ =/ inputs=[marks=imark-externals:jibb externals=iexternals:jibb]
115+ (doc-reader-inputs sur action blog)
116+ =/ modules=jbundle:jibb ~[[/ui/components/card/jibb card-source]]
117+ =/ detailed=jfile-detailed-result:jibb
118+ (doc-detailed at src externals.inputs marks.inputs modules prepared)
119+ ?: ?=(%| -.detailed) ~[(weld "imports detailed rejected: " (trip message.p.detailed))]
120+ =/ legacy=jfile-result:jibb
121+ (doc-legacy at src externals.inputs marks.inputs modules prepared)
122+ ?: ?=(%| -.legacy) ~[(weld "imports legacy rejected: " (trip p.legacy))]
123+ =/ use-source=@t
124+ %+ rap 3
125+ :~ src
126+ '++ use-item |= i=item.todo i\0a'
127+ '++ use-action |= a=todo-action a\0a'
128+ '++ use-card card.card\0a'
129+ ==
130+ =/ used=jfile-detailed-result:jibb
131+ (doc-detailed at use-source externals.inputs marks.inputs modules prepared)
132+ ?: ?=(%| -.used) ~[(weld "import consumers rejected: " (trip message.p.used))]
133+ =/ used-legacy=jfile-result:jibb
134+ (doc-legacy at use-source externals.inputs marks.inputs modules prepared)
135+ ?: ?=(%| -.used-legacy) ~[(weld "legacy import consumers rejected: " (trip p.used-legacy))]
136+ =/ failures=(list tape) ~
137+ =/ missing-module=jfile-detailed-result:jibb
138+ (doc-detailed at use-source externals.inputs marks.inputs ~ prepared)
139+ =? failures ?=(%& -.missing-module) ["imports accepted a missing Jibb module" failures]
140+ =/ missing-mark=jfile-detailed-result:jibb
141+ (doc-detailed at use-source externals.inputs ~ modules prepared)
142+ =? failures ?=(%& -.missing-mark) ["imports accepted a missing mark" failures]
143+ =/ missing-sur=jfile-detailed-result:jibb
144+ (doc-detailed at use-source ~ marks.inputs modules prepared)
145+ =? failures ?=(%& -.missing-sur) ["imports accepted missing /sur molds" failures]
146+ failures
147+::
148+++ doc-examples-errors
149+ |= [public=@t private=@t import-source=@t view-source=@t step-source=@t cmd-source=@t sur=@t action=@t blog=@t card-source=@t]
150+ ^- (list tape)
151+ =/ prepared=(unit iprelude:jibb)
152+ (prepare-prelude-with-internal:jibb public private)
153+ ?~ prepared ~["doc-example prelude did not prepare"]
154+ ;: weld
155+ (doc-positive "view-day" /ui/view-day/jibb view-source %view '$-([day=@da n=@ud] (element A))' u.prepared)
156+ (doc-positive "step" /ui/step/jibb step-source %describe '$-(step @t)' u.prepared)
157+ (doc-cmd-errors cmd-source u.prepared)
158+ (doc-import-errors import-source sur action blog card-source u.prepared)
159+ ==
160+::
161+++ test-doc-examples
162+ ^- tang
163+ =/ failures=(list tape)
164+ (doc-examples-errors prelude internal imports view-day step cmd-sub (text todo-sur) (text todo-action) (text blog-sur) (text card))
165+ (turn failures |=(reason=tape leaf+reason))
166+--