annotate web/graph_test.coffee @ 2376:4556eebe5d73

topdir reorgs; let pdm have its src/ dir; separate vite area from light9/
author drewp@bigasterisk.com
date Sun, 12 May 2024 19:02:10 -0700
parents light9/web/graph_test.coffee@3c997bc6d380
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
1 log = console.log
1362
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
2 assert = require('chai').assert
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
3 expect = require('chai').expect
1362
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
4 SyncedGraph = require('./graph.js').SyncedGraph
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
5
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
6 describe 'SyncedGraph', ->
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
7 describe 'constructor', ->
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
8 it 'should successfully make an empty graph without connecting to rdfdb', ->
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
9 g = new SyncedGraph()
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
10 g.quads()
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
11 assert.equal(g.quads().length, 0)
168262618f2d new test_js target for testing SyncedGraph
Drew Perttula <drewp@bigasterisk.com>
parents:
diff changeset
12
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
13 describe 'auto dependencies', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
14 graph = new SyncedGraph()
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
15 RDF = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
16 U = (tail) -> graph.Uri('http://example.com/' + tail)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
17 A1 = U('a1')
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
18 A2 = U('a2')
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
19 A3 = U('a3')
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
20 A4 = U('a4')
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
21 ctx = U('ctx')
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
22 quad = (s, p, o) -> graph.Quad(s, p, o, ctx)
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
23
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
24 beforeEach (done) ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
25 graph = new SyncedGraph()
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
26 graph.loadTrig("
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
27 @prefix : <http://example.com/> .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
28 :ctx {
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
29 :a1 :a2 :a3 .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
30 :a1 :someFloat 1.5 .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
31 :a1 :someString \"hello\" .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
32 :a1 :multipleObjects :a4, :a5 .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
33 :a2 a :Type1 .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
34 :a3 a :Type1 .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
35 }
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
36 ", done)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
37
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
38 it 'calls a handler right away', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
39 called = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
40 hand = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
41 called++
1707
e19018a039f7 4 of 17 passing on new n3.js
drewp@bigasterisk.com
parents: 1363
diff changeset
42 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
43 assert.equal(1, called)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
44
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
45 it 'calls a handler a 2nd time if the graph is patched with relevant data', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
46 called = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
47 hand = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
48 called++
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
49 graph.uriValue(A1, A2)
1707
e19018a039f7 4 of 17 passing on new n3.js
drewp@bigasterisk.com
parents: 1363
diff changeset
50 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
51 graph.applyAndSendPatch({
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
52 delQuads: [quad(A1, A2, A3)], addQuads: [quad(A1, A2, A4)]})
1753
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
53 assert.equal(2, called)
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
54
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
55 it 'notices new queries a handler makes upon rerun', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
56 called = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
57 objsFound = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
58 hand = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
59 called++
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
60 graph.uriValue(A1, A2)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
61 if called > 1
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
62 objsFound.push(graph.objects(A1, A3))
1707
e19018a039f7 4 of 17 passing on new n3.js
drewp@bigasterisk.com
parents: 1363
diff changeset
63 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
64 # first run looked up A1,A2,*
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
65 graph.applyAndSendPatch({
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
66 delQuads: [quad(A1, A2, A3)], addQuads: [quad(A1, A2, A4)]})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
67 # second run also looked up A1,A3,* (which matched none)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
68 graph.applyAndSendPatch({
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
69 delQuads: [], addQuads: [quad(A1, A3, A4)]})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
70 # third run should happen here, noticing the new A1,A3,* match
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
71 assert.equal(3, called)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
72 assert.deepEqual([[], [A4]], objsFound)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
73
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
74 it 'calls a handler again even if the handler throws an error', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
75 called = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
76 hand = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
77 called++
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
78 graph.uriValue(A1, A2)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
79 throw new Error('this test handler throws an error')
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
80 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
81 graph.applyAndSendPatch({
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
82 delQuads: [quad(A1, A2, A3)], addQuads: [quad(A1, A2, A4)]})
1753
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
83 assert.equal(2, called)
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
84
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
85 describe 'works with nested handlers', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
86
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
87 innerResults = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
88 inner = ->
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
89 console.log('\nninnerfetch')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
90 innerResults.push(graph.uriValue(A1, A2))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
91 console.log("innerResults #{JSON.stringify(innerResults)}\n")
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
92
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
93 outerResults = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
94 doRunInner = true
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
95 outer = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
96 if doRunInner
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
97 graph.runHandler(inner, 'runinner')
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
98 console.log('push outer')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
99 outerResults.push(graph.floatValue(A1, U('someFloat')))
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
100
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
101 beforeEach ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
102 innerResults = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
103 outerResults = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
104 doRunInner = true
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
105
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
106 affectInner = {
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
107 delQuads: [quad(A1, A2, A3)], addQuads: [quad(A1, A2, A4)]
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
108 }
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
109 affectOuter = {
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
110 delQuads: [
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
111 quad(A1, U('someFloat'), graph.Literal(1.5))
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
112 ], addQuads: [
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
113 quad(A1, U('someFloat'), graph.LiteralRoundedFloat(2))
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
114 ]}
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
115 affectBoth = {
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
116 delQuads: affectInner.delQuads.concat(affectOuter.delQuads),
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
117 addQuads: affectInner.addQuads.concat(affectOuter.addQuads)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
118 }
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
119
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
120 it 'calls everything normally once', ->
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
121 graph.runHandler(outer, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
122 assert.deepEqual([A3], innerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
123 assert.deepEqual([1.5], outerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
124
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
125 it.skip '[performance] reruns just the inner if its dependencies change', ->
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
126 console.log(graph.quads())
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
127 graph.runHandler(outer, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
128 graph.applyAndSendPatch(affectInner)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
129 assert.deepEqual([A3, A4], innerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
130 assert.deepEqual([1.5], outerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
131
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
132 it.skip '[performance] reruns the outer (and therefore inner) if its dependencies change', ->
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
133 graph.runHandler(outer, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
134 graph.applyAndSendPatch(affectOuter)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
135 assert.deepEqual([A3, A3], innerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
136 assert.deepEqual([1.5, 2], outerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
137
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
138
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
139 it.skip '[performance] does not send a redundant inner run if it is already rerunning outer', ->
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
140 # Note that outer may or may not call inner each time, and we
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
141 # don't want to redundantly call inner. We need to:
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
142 # 1. build the set of handlers to rerun,
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
143 # 2. call them from outside-in, and
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
144 # 3. any runHandler calls that happen, they need to count as reruns.
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
145 graph.runHandler(outer, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
146 graph.applyAndSendPatch(affectBoth)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
147 assert.deepEqual([A3, A4], innerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
148 assert.deepEqual([1.5, 2], outerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
149
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
150 it 'reruns the outer and the inner if all dependencies change, but outer omits calling inner this time', ->
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
151 graph.runHandler(outer, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
152 doRunInner = false
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
153 graph.applyAndSendPatch(affectBoth)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
154 assert.deepEqual([A3, A4], innerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
155 assert.deepEqual([1.5, 2], outerResults)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
156
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
157 describe 'watches calls to:', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
158 it 'floatValue', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
159 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
160 hand = -> values.push(graph.floatValue(A1, U('someFloat')))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
161 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
162 graph.patchObject(A1, U('someFloat'), graph.LiteralRoundedFloat(2), ctx)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
163 assert.deepEqual([1.5, 2.0], values)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
164
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
165 it 'stringValue', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
166 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
167 hand = -> values.push(graph.stringValue(A1, U('someString')))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
168 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
169 graph.patchObject(A1, U('someString'), graph.Literal('world'), ctx)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
170 assert.deepEqual(['hello', 'world'], values)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
171
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
172 it 'uriValue', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
173 # covered above, but this one tests patchObject on a uri, too
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
174 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
175 hand = -> values.push(graph.uriValue(A1, A2))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
176 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
177 graph.patchObject(A1, A2, A4, ctx)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
178 assert.deepEqual([A3, A4], values)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
179
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
180 it 'objects', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
181 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
182 hand = -> values.push(graph.objects(A1, U('multipleObjects')))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
183 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
184 graph.patchObject(A1, U('multipleObjects'), U('newOne'), ctx)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
185 expect(values[0]).to.deep.have.members([U('a4'), U('a5')])
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
186 expect(values[1]).to.deep.have.members([U('newOne')])
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
187
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
188 it 'subjects', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
189 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
190 rdfType = graph.Uri(RDF + 'type')
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
191 hand = -> values.push(graph.subjects(rdfType, U('Type1')))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
192 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
193 graph.applyAndSendPatch(
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
194 {delQuads: [], addQuads: [quad(A4, rdfType, U('Type1'))]})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
195 expect(values[0]).to.deep.have.members([A2, A3])
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
196 expect(values[1]).to.deep.have.members([A2, A3, A4])
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
197
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
198 describe 'items', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
199 it 'when the list order changes', (done) ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
200 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
201 successes = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
202 hand = ->
1753
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
203 try
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
204 head = graph.uriValue(U('x'), U('y'))
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
205 catch
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
206 # graph goes empty between clearGraph and loadTrig
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
207 return
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
208 values.push(graph.items(head))
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
209 successes++
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
210 graph.clearGraph()
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
211 graph.loadTrig "
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
212 @prefix : <http://example.com/> .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
213 :ctx { :x :y (:a1 :a2 :a3) } .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
214 ", () ->
1753
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
215 graph.runHandler(hand, 'run')
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
216 graph.clearGraph()
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
217 graph.loadTrig "
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
218 @prefix : <http://example.com/> .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
219 :ctx { :x :y (:a1 :a3 :a2) } .
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
220 ", () ->
1753
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
221 assert.deepEqual([[A1, A2, A3], [A1, A3, A2]], values)
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
222 assert.equal(2, successes)
3c997bc6d380 fix some coffee lint
Drew Perttula <drewp@bigasterisk.com>
parents: 1708
diff changeset
223 done()
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
224
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
225 describe 'contains', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
226 it 'when a new triple is added', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
227 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
228 hand = -> values.push(graph.contains(A1, A1, A1))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
229 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
230 graph.applyAndSendPatch(
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
231 {delQuads: [], addQuads: [quad(A1, A1, A1)]})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
232 assert.deepEqual([false, true], values)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
233
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
234 it 'when a relevant triple is removed', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
235 values = []
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
236 hand = -> values.push(graph.contains(A1, A2, A3))
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
237 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
238 graph.applyAndSendPatch(
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
239 {delQuads: [quad(A1, A2, A3)], addQuads: []})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
240 assert.deepEqual([true, false], values)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
241
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
242 describe 'performs well', ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
243 it "[performance] doesn't call handler a 2nd time if the graph gets an unrelated patch", ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
244 called = 0
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
245 hand = ->
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
246 called++
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
247 graph.uriValue(A1, A2)
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
248 graph.runHandler(hand, 'run')
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
249 graph.applyAndSendPatch({
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
250 delQuads: [], addQuads: [quad(A2, A3, A4)]})
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
251 assert.equal(1, called)
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
252
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
253 it.skip '[performance] calls a handler 2x but then not again if the handler stopped caring about the data', ->
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
254 assert.fail()
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
255
1708
8d3569829198 more upgrades for n3 api. not quite passing
drewp@bigasterisk.com
parents: 1707
diff changeset
256 it.skip "[performance] doesn't get slow if the handler makes tons of repetitive lookups", ->
1363
233b81d9bd9d simple first version of SyncedGraph.runHandler
Drew Perttula <drewp@bigasterisk.com>
parents: 1362
diff changeset
257 assert.fail()