Mercurial > code > home > repos > streamed-graph
annotate src/layout/Layout.test.ts @ 108:5e6840229a05
rewrite freeStatements rendering to put more planning in layout
author | drewp@bigasterisk.com |
---|---|
date | Fri, 18 Mar 2022 11:57:38 -0700 |
parents | 2468f2227d22 |
children | cbcd82d21356 |
rev | line source |
---|---|
104
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
1 import { Quad, Store, Term } from "n3"; |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
2 import { n3Graph } from "./fetchAndParse"; |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
3 import { AlignedTable, Layout, LayoutResult } from "./Layout"; |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
4 import { EX, rdf } from "./namespaces"; |
103 | 5 import { ViewConfig } from "./ViewConfig"; |
88
ac7ad087d474
graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff
changeset
|
6 |
103 | 7 const twoStatements = async (): Promise<Store> => { |
8 return n3Graph(` | |
9 @prefix : <http://example.com/> . | |
10 :g1 { | |
104
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
11 :a0 :b0 :c0 . |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
12 :d0 :e0 :f0 . |
103 | 13 } |
14 `); | |
15 }; | |
16 | |
17 const typedStatements = async (): Promise<Store> => { | |
18 return n3Graph(` | |
19 @prefix : <http://example.com/> . | |
20 :g1 { | |
21 :a a :T1 ; :color :red . | |
22 :b a :T1 ; :color :blue . | |
23 :c a :T1 . | |
24 :d a :T2 ; :size :big . | |
25 :e a :T1,:T2; :size :small | |
26 } | |
27 `); | |
28 }; | |
29 function G1(s: Term, p: Term, o: Term): Quad { | |
30 return new Quad(s, p, o, EX("g1")); | |
31 } | |
32 | |
33 describe("Layout", () => { | |
34 it("accepts a ViewConfig", async () => { | |
35 const vc = new ViewConfig(); | |
36 await vc.readFromGraph(` | |
37 @prefix ex: <http://example.com/> . | |
38 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |
39 | |
40 <> a ex:View; rdfs:label "repos" .`); | |
41 const layout = new Layout(vc); | |
42 const lr = layout.plan(await twoStatements()); | |
88
ac7ad087d474
graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff
changeset
|
43 }); |
103 | 44 it("defaults to putting all triples in the ungrouped list", async () => { |
45 const layout = new Layout(); | |
46 const lr = layout.plan(await twoStatements()); | |
47 expect(lr).toEqual({ | |
48 sections: [ | |
49 { | |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
50 subjRows: [ |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
51 { subj: EX("a0"), predRows: [{ pred: EX("b0"), objs: [EX("c0")] }] }, |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
52 { subj: EX("d0"), predRows: [{ pred: EX("e0"), objs: [EX("f0")] }] }, |
103 | 53 ], |
54 }, | |
55 ], | |
56 }); | |
57 }); | |
58 describe("makes a table as requested by ViewConfig", () => { | |
59 let lr: LayoutResult; | |
60 | |
61 beforeAll(async () => { | |
62 const vc = new ViewConfig(); | |
63 await vc.readFromGraph(` | |
64 @prefix : <http://example.com/> . | |
65 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . | |
66 | |
67 <> a :View; :table [ :primaryType :T1 ] .`); | |
68 const layout = new Layout(vc); | |
104
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
69 lr = layout.plan(await typedStatements()); |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
70 }); |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
71 it("returns 2 sections", () => { |
103 | 72 expect(lr.sections).toHaveLength(2); |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
73 }); |
103 | 74 it("puts the right type in the table", async () => { |
104
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
75 const sec0 = lr.sections[0] as AlignedTable; |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
76 expect(sec0.columnHeaders).toEqual([ |
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
77 { rdfType: EX("T1"), pred: EX("color") }, |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
78 { rdfType: EX("T1"), pred: EX("size") }, |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
79 ]); |
104
1aea03d306af
WIP Layout. tests are passing but they're a little wrong
drewp@bigasterisk.com
parents:
103
diff
changeset
|
80 expect(sec0.rows).toEqual([ |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
81 [EX("a"), EX("red"), null], |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
82 [EX("b"), EX("blue"), null], |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
83 [EX("c"), null, null], |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
84 [EX("e"), null, EX("small")], |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
85 ]); |
103 | 86 }); |
87 it("leaves the rest ungrouped", async () => { | |
88 expect(lr.sections[1]).toEqual({ | |
108
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
89 subjRows: [ |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
90 { |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
91 subj: EX("d"), |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
92 predRows: [ |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
93 { pred: EX("size"), objs: [EX("big")] }, |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
94 { pred: rdf.type, objs: [EX("T2")] }, |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
95 ], |
5e6840229a05
rewrite freeStatements rendering to put more planning in layout
drewp@bigasterisk.com
parents:
106
diff
changeset
|
96 }, |
103 | 97 ], |
98 }); | |
99 }); | |
100 }); | |
101 it("makes a table out of ungrouped triples with the same type", async () => {}); | |
88
ac7ad087d474
graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff
changeset
|
102 }); |
ac7ad087d474
graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff
changeset
|
103 |
103 | 104 // describe("equality", () => { |
105 // test("investigation of https://github.com/rdfjs/N3.js/issues/265", () => { | |
106 // const x = namedNode("x"); | |
107 // const x2 = namedNode("x"); | |
108 // // (NamedNode.prototype as any).hashCode = () => 0; | |
109 // // expect((x as any).hashCode()).toEqual((x2 as any).hashCode()) | |
110 // expect(x === x2).toBeFalsy(); | |
111 // expect(x == x2).toBeFalsy(); | |
112 // expect(x.equals(x2)).toBeTruthy(); | |
113 // let imap = Immutable.Map(); | |
114 // imap = imap.set(x, 11); | |
115 // imap = imap.set(x, 22); | |
116 // imap = imap.set(x2, 33); | |
117 // expect(imap.has(x)).toBeTruthy(); | |
118 // expect(imap.has(x2)).toBeTruthy(); | |
119 // expect(imap.size).toEqual(1); | |
120 // }); | |
121 // }); | |
122 | |
123 // describe("groupByRdfType", () => { | |
124 // test("finds multiple graphs", () => {}); | |
125 // test("works", async () => { | |
126 // const store = new Store(); | |
88
ac7ad087d474
graph view rewrites and fixes for the multi-subject table
drewp@bigasterisk.com
parents:
diff
changeset
|
127 |
103 | 128 // const parser = new Parser(); |
129 // await new Promise((res, rej) => { | |
130 // parser.parse( | |
131 // `PREFIX : <urn:> | |
132 // :rs1 a :Foo; :pred1 "obj1" . | |
133 // :rs2 a :Foo; :pred1 "obj2" . | |
134 // :rs3 a :Bar . | |
135 // :rs4 :pred1 "obj4" . | |
136 // `, | |
137 // (error, quad: Quad, prefixes: Prefixes) => { | |
138 // if (quad) { | |
139 // store.addQuad(quad); | |
140 // } else { | |
141 // res(undefined); | |
142 // } | |
143 // } | |
144 // ); | |
145 // }); | |
146 // const grouped = groupByRdfType(store); | |
147 // expect(Array.from(grouped.byType.keys())).toHaveLength(2); | |
148 // expect(grouped.byType.get(namedNode("urn:Foo"))).toEqual( | |
149 // Immutable.Set([namedNode("urn:rs1"), namedNode("urn:rs2")]) | |
150 // ); | |
151 // expect(grouped.byType.get(namedNode("urn:Bar"))).toEqual( | |
152 // Immutable.Set([namedNode("urn:rs3")]) | |
153 // ); | |
154 // expect(grouped.untypedSubjs).toEqual([namedNode("urn:rs4")]); | |
155 // }); | |
156 | |
157 // describe("MultiSubjsTypeBlockLayout", () => { | |
158 // test("gathers subjs", () => { | |
159 | |
160 // }); | |
161 // test("gathers preds", () => { | |
162 | |
163 // }); | |
164 // test("cells reports filled cells", () => { | |
165 | |
166 // }); | |
167 // }); | |
168 // }); |