@@ -2,17 +2,171 @@ import { silenceDebugMessages } from '../helpers/setup'
22import { JSDOM } from 'jsdom'
33import renderTableViewPane from '../../src/table'
44
5+ import store from '../../src/store'
6+ const kb = store
7+
8+ import * as $rdf from 'rdflib'
9+
510silenceDebugMessages ( )
611const window = new JSDOM ( '<!DOCTYPE html><p>Hello world</p>' ) . window
712const dom = window . document
813
14+ const tableData = `@prefix : <https://example.com/tests#> .
15+ :Alice :age 21; :name "Alice"; :hobby "Fishing"; :dob 1999-07-04Z .
16+ :Bob :age 18; :name "Bob"; :hobby "Hockey"; :dob 2002-05-12Z .
17+ :Charlie :age 15; :name "Charlie"; :hobby "Gym"; :dob 2005-01-31Z .
18+ `
19+
20+ const tableQuery = ` PREFIX : <https://example.com/tests#>
21+ SELECT ?who, ?name WHERE { ?who :name ?name . }
22+ `
23+ const doc = $rdf . sym ( 'https://example.com/tests' )
24+ $rdf . parse ( tableData , kb , doc . uri )
25+ // const query = $rdf.SPARQLToQuery(tableQuery) // TypeError: $rdf.SPARQLToQuery is not a function
26+
27+ const query = new $rdf . Query ( )
28+ const vars = [ 'person' , 'name' , 'age' , 'hobby' ]
29+ var v = { } // The RDF variable objects for each variable name
30+ vars . map ( function ( x ) {
31+ query . vars . push ( ( v [ x ] = $rdf . variable ( x ) ) )
32+ } )
33+ const EX = new $rdf . Namespace ( 'https://example.com/tests#' )
34+ query . pat . add ( v . person , EX ( 'name' ) , v . name )
35+ query . pat . add ( v . person , EX ( 'age' ) , v . age )
36+ query . pat . add ( v . person , EX ( 'hobby' ) , v . hobby )
37+
38+ const tableOptions = { query }
39+
40+ kb . fetcher = null // @@@@@ kludge turn off link following
41+
942describe ( 'renderTableViewPane' , ( ) => {
1043 it ( 'exists' , ( ) => {
1144 expect ( renderTableViewPane ) . toBeInstanceOf ( Function )
1245 } )
13- /*
1446 it ( 'runs' , ( ) => {
1547 const options = { sourceDocument : null , tableClass : null , query : null }
16- expect(renderTableViewPane(document, options)).toEqual(undefined)
17- }) */
48+ expect ( renderTableViewPane ( document , options ) . innerHTML ) . toMatch ( / .* < t a b l e .* / )
49+ } )
50+ it ( 'makes the table header' , ( ) => {
51+ expect ( renderTableViewPane ( document , tableOptions ) . innerHTML ) . toMatch ( / .* < t a b l e .* p e r s o n .* n a m e .* a g e .* h o b b y .* / )
52+ } )
53+ it ( 'calls onDone' , async ( ) => {
54+ var result
55+ const onDone = jest . fn ( ) // mock function
56+ const widget = renderTableViewPane ( document , { query, onDone} ) . innerHTML
57+ await new Promise ( resolve => setTimeout ( resolve , 1000 ) ) ;
58+ expect ( onDone ) . toHaveBeenCalled ( )
59+ } )
60+ it ( 'includes the data' , async ( ) => {
61+ const options = { sourceDocument : null , tableClass : null , query : null }
62+ var result
63+ const widget = renderTableViewPane ( document , { query, onDone} )
64+
65+ function onDone ( ele ) {
66+ result = ele . innerHTML
67+ // console.log('***** onDone called! ' + result)
68+ }
69+
70+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
71+ console . log ( 'After delay, widget.innerHTML = ' + widget . innerHTML )
72+ expect ( result ) . toMatch ( / .* A l i c e .* / )
73+ // console.log('@@@ >>>> ' + renderTableViewPane(document, tableOptions).innerHTML + '<<<<<')
74+ // expect(renderTableViewPane(document, tableOptions).innerHTML).toMatch(/.*<table.*person.*name.*age.*hobby.*/)
75+ } )
76+ it ( 'includes the data' , async ( ) => {
77+ const options = { sourceDocument : null , tableClass : null , query : null }
78+ var result
79+ const widget = renderTableViewPane ( document , { query, onDone} )
80+
81+ function onDone ( ele ) {
82+ result = ele . innerHTML
83+ // console.log('***** onDone called! ' + result)
84+ }
85+
86+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
87+ console . log ( 'After delay, widget.innerHTML = ' + widget . innerHTML )
88+ expect ( result ) . toMatch ( / .* A l i c e .* / )
89+ } )
90+ it ( 'orders by age' , async ( ) => {
91+ const options = { query, onDone, sortBy : '?age' , sortReverse : false }
92+ var result
93+ const widget = renderTableViewPane ( document , options )
94+ function onDone ( ele ) {
95+ result = widget . innerHTML
96+ // result = ele.innerHTML
97+ //console.log('***** onDone called! ' + result)
98+ }
99+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
100+ console . log ( 'After delay, widget.innerHTML = ' + widget . innerHTML )
101+ expect ( result ) . toMatch ( / .* C h a r l i e .* B o b .* A l i c e .* / )
102+ } )
103+
104+ it ( 'orders by reverse age' , async ( ) => {
105+ const options = { query, onDone, sortBy : '?age' , sortReverse : true }
106+ var result
107+ const widget = renderTableViewPane ( document , options )
108+ function onDone ( ele ) {
109+ result = ele . innerHTML
110+ console . log ( '***** onDone called! ' + result )
111+ }
112+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
113+ console . log ( 'After delay, widget.innerHTML = ' + widget . innerHTML )
114+ expect ( result ) . toMatch ( / .* A l i c e .* B o b .* C h a r l i e .* / )
115+ } )
116+
117+ it ( 'orders by name' , async ( ) => {
118+ const options = { query, onDone, sortBy : '?name' , sortReverse : false }
119+ var result
120+ const widget = renderTableViewPane ( document , options )
121+ function onDone ( ele ) {
122+ result = ele . innerHTML
123+ console . log ( '***** onDone called! ' + result )
124+ }
125+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
126+ // console.log('After delay, widget.innerHTML = ' + widget.innerHTML)
127+ expect ( result ) . toMatch ( / .* A l i c e .* B o b .* C h a r l i e .* / )
128+ } )
129+
130+ it ( 'orders by hobby' , async ( ) => {
131+ const options = { query, onDone, sortBy : '?hobby' , sortReverse : false }
132+ var result
133+ const widget = renderTableViewPane ( document , options )
134+ function onDone ( ele ) {
135+ result = ele . innerHTML
136+ console . log ( '***** onDone called! ' + result )
137+ }
138+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
139+ console . log ( 'After delay, widget.innerHTML = ' + widget . innerHTML )
140+ expect ( result ) . toMatch ( / .* A l i c e .* C h a r l i e .* B o b .* / )
141+ } )
142+
143+ it ( 'renames columns' , async ( ) => {
144+ const options = { query, onDone, hints : {
145+ '?person' : { label : 'WHO' } ,
146+ '?name' : { label : 'WHAT' } ,
147+ '?age' : { label : 'WHEN' } ,
148+ '?hobby' : { label : 'WHY' }
149+ } }
150+ var result
151+ const widget = renderTableViewPane ( document , options )
152+ function onDone ( ele ) {
153+ result = ele . innerHTML
154+ console . log ( '***** onDone called! ' + result )
155+ }
156+ await new Promise ( resolve => setTimeout ( resolve , 3000 ) ) ;
157+ // console.log('After delay, widget.innerHTML = ' + widget.innerHTML)
158+ expect ( result ) . toMatch ( / .* W H O .* W H A T .* W H E N .* W H Y .* / )
159+ } )
160+
161+
162+
163+
164+ /*
165+ hints: {
166+ '?issue': { linkFunction: exposeThisOverlay, label: 'Title' },
167+ '?created': { cellFormat: 'shortDate' },
168+ '?state': { initialSelection: selectedStates, label: 'Status' }
169+ }
170+ */
171+
18172} )
0 commit comments