Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
jio_mebibou
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Alexandra Rogova
jio_mebibou
Commits
34f242f2
Commit
34f242f2
authored
Jul 26, 2018
by
Guillaume Royer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat(storage): add sql query storage
parent
b345214e
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
849 additions
and
2 deletions
+849
-2
.gitignore
.gitignore
+3
-1
Gruntfile.js
Gruntfile.js
+2
-1
lib/sql.js/sql.js
lib/sql.js/sql.js
+28
-0
src/jio.storage/sqlstorage.js
src/jio.storage/sqlstorage.js
+245
-0
test/jio.storage/sqlstorage.tests.js
test/jio.storage/sqlstorage.tests.js
+569
-0
test/tests.html
test/tests.html
+2
-0
No files found.
.gitignore
View file @
34f242f2
...
...
@@ -5,4 +5,6 @@
#dolphin
.directory
node_modules/*
\ No newline at end of file
node_modules/*
package-lock.json
Gruntfile.js
View file @
34f242f2
...
...
@@ -182,7 +182,8 @@ module.exports = function (grunt) {
'
src/jio.storage/indexeddbstorage.js
'
,
'
src/jio.storage/cryptstorage.js
'
,
'
src/jio.storage/websqlstorage.js
'
,
'
src/jio.storage/fbstorage.js
'
'
src/jio.storage/fbstorage.js
'
,
'
src/jio.storage/sqlstorage.js
'
],
dest
:
'
dist/<%= pkg.name %>-<%= pkg.version %>.js
'
// dest: 'jio.js'
...
...
lib/sql.js/sql.js
0 → 100644
View file @
34f242f2
This source diff could not be displayed because it is too large. You can
view the blob
instead.
src/jio.storage/sqlstorage.js
0 → 100644
View file @
34f242f2
/*
* Copyright 2013, Nexedi SA
* Released under the LGPL license.
* http://www.gnu.org/licenses/lgpl.html
*/
/**
* JIO Sql Storage. Type = "sql".
* sql "database" storage.
*/
/*global Blob, jIO, RSVP, SQL, localStorage*/
/*jslint nomen: true*/
(
function
(
jIO
,
RSVP
,
SQL
,
localStorage
)
{
"
use strict
"
;
var
sqlStorageKey
=
'
jio_sql
'
,
sqlTable
=
"
jiosearch
"
;
function
resetDb
(
indexFields
)
{
var
db
=
new
SQL
.
Database
(),
fields
=
[
"
id
"
].
concat
(
indexFields
);
db
.
run
(
"
CREATE TABLE
"
+
sqlTable
+
"
(
"
+
fields
.
join
(
"
,
"
)
+
"
);
"
);
return
db
;
}
function
initDb
(
indexFields
)
{
var
data
=
localStorage
.
getItem
(
sqlStorageKey
);
if
(
data
)
{
return
new
SQL
.
Database
(
data
.
split
(
"
,
"
));
}
return
resetDb
(
indexFields
);
}
function
saveDb
(
db
)
{
var
data
=
db
[
"
export
"
]();
// jslint throws error
localStorage
.
setItem
(
sqlStorageKey
,
data
);
}
function
docToParams
(
id
,
doc
)
{
var
data
=
{};
Object
.
keys
(
doc
).
forEach
(
function
(
key
)
{
data
[
"
:
"
+
key
]
=
doc
[
key
];
});
data
[
"
:id
"
]
=
id
.
toString
();
return
data
;
}
function
dbValues
(
indexFields
)
{
return
"
VALUES (:id,
"
+
indexFields
.
map
(
function
(
field
)
{
return
"
:
"
+
field
;
}).
join
(
"
,
"
)
+
"
)
"
;
}
function
dbSet
(
indexFields
)
{
return
"
SET
"
+
indexFields
.
map
(
function
(
field
)
{
return
field
+
"
= :
"
+
field
;
}).
join
(
"
,
"
);
}
function
dbOrderBy
(
fields
)
{
return
(
fields
||
[]).
map
(
function
(
field
)
{
return
field
[
0
]
+
"
"
+
(
field
[
1
]
===
"
descending
"
?
"
DESC
"
:
"
ASC
"
);
}).
join
(
"
,
"
);
}
function
dbWhere
(
fields
,
operator
)
{
var
where
=
""
,
field
,
i
;
for
(
i
=
0
;
i
<
fields
.
length
;
i
=
i
+
1
)
{
field
=
fields
[
i
];
where
+=
field
.
key
+
"
LIKE
\"
%
"
+
field
.
value
+
"
%
\"
"
;
if
(
i
!==
fields
.
length
-
1
)
{
where
+=
"
"
+
(
field
.
operator
||
operator
)
+
"
"
;
}
}
return
where
;
}
function
filterJSON
(
json
,
fields
)
{
if
(
!
fields
||
!
fields
.
length
)
{
return
json
;
}
var
data
=
{};
fields
.
forEach
(
function
(
field
)
{
if
(
json
.
hasOwnProperty
(
field
))
{
data
[
field
]
=
json
[
field
];
}
});
return
data
;
}
/**
* The jIO sql.js extension
*
* @class SqlStorage
* @constructor
*/
function
SqlStorage
(
spec
)
{
this
.
_sub_storage
=
jIO
.
createJIO
(
spec
.
sub_storage
);
this
.
__index_fields
=
spec
.
index_fields
;
this
.
__db
=
initDb
(
spec
.
index_fields
||
[]);
}
SqlStorage
.
prototype
.
__resetDb
=
function
(
indexFields
)
{
this
.
__index_fields
=
indexFields
;
this
.
__db
=
resetDb
(
indexFields
);
};
SqlStorage
.
prototype
.
get
=
function
()
{
return
this
.
_sub_storage
.
get
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
allAttachments
=
function
()
{
return
this
.
_sub_storage
.
allAttachments
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
post
=
function
(
doc
)
{
var
db
=
this
.
__db
,
indexFields
=
this
.
__index_fields
;
return
this
.
_sub_storage
.
post
.
apply
(
this
.
_sub_storage
,
arguments
)
.
push
(
function
(
id
)
{
db
.
run
(
"
INSERT INTO
"
+
sqlTable
+
dbValues
(
indexFields
),
docToParams
(
id
,
doc
)
);
saveDb
(
db
);
});
};
SqlStorage
.
prototype
.
put
=
function
(
id
,
doc
)
{
var
db
=
this
.
__db
,
indexFields
=
this
.
__index_fields
;
return
this
.
_sub_storage
.
put
.
apply
(
this
.
_sub_storage
,
arguments
)
.
push
(
function
()
{
db
.
run
(
"
UPDATE
"
+
sqlTable
+
dbSet
(
indexFields
)
+
"
WHERE id=:id
"
,
docToParams
(
id
,
doc
)
);
saveDb
(
db
);
});
};
SqlStorage
.
prototype
.
remove
=
function
(
id
)
{
var
db
=
this
.
__db
;
return
this
.
_sub_storage
.
remove
(
id
)
.
push
(
function
()
{
db
.
run
(
"
DELETE FROM
"
+
sqlTable
+
"
WHERE id=:id
"
,
{
"
:id
"
:
id
});
saveDb
(
db
);
});
};
SqlStorage
.
prototype
.
getAttachment
=
function
()
{
return
this
.
_sub_storage
.
getAttachment
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
putAttachment
=
function
()
{
return
this
.
_sub_storage
.
putAttachment
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
removeAttachment
=
function
()
{
return
this
.
_sub_storage
.
removeAttachment
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
repair
=
function
()
{
// rebuild db?
return
this
.
_sub_storage
.
repair
.
apply
(
this
.
_sub_storage
,
arguments
);
};
SqlStorage
.
prototype
.
hasCapacity
=
function
(
name
)
{
var
this_storage_capacity_list
=
[
"
limit
"
,
"
sort
"
,
"
select
"
,
"
query
"
];
if
(
this_storage_capacity_list
.
indexOf
(
name
)
!==
-
1
)
{
return
true
;
}
if
(
name
===
"
list
"
)
{
return
this
.
_sub_storage
.
hasCapacity
(
name
);
}
return
false
;
};
SqlStorage
.
prototype
.
buildQuery
=
function
(
options
)
{
if
(
!
options
.
query
)
{
return
this
.
_sub_storage
.
buildQuery
(
options
);
}
var
context
=
this
,
db
=
this
.
__db
,
parsed_query
=
jIO
.
QueryFactory
.
create
(
options
.
query
);
return
new
RSVP
.
Queue
()
.
push
(
function
()
{
var
query
=
"
SELECT id FROM
"
+
sqlTable
,
where
=
dbWhere
(
parsed_query
.
query_list
||
[
parsed_query
],
parsed_query
.
operator
),
orderBy
=
dbOrderBy
(
options
.
sort_on
),
limit
=
options
.
limit
;
if
(
where
)
{
query
+=
"
WHERE
"
+
where
;
}
if
(
orderBy
)
{
query
+=
"
ORDER BY
"
+
orderBy
;
}
if
(
limit
)
{
query
+=
"
LIMIT
"
+
limit
.
join
(
"
,
"
);
}
return
db
.
prepare
(
query
);
})
.
push
(
function
(
result
)
{
var
ids
=
[];
while
(
result
.
step
())
{
ids
.
push
(
result
.
get
()[
0
]);
}
result
.
free
();
return
RSVP
.
all
(
ids
.
map
(
function
(
id
)
{
return
context
.
get
(
id
).
push
(
function
(
doc
)
{
return
{
id
:
id
,
value
:
filterJSON
(
doc
,
options
.
select_list
)
};
});
}));
});
};
jIO
.
addStorage
(
'
sql
'
,
SqlStorage
);
}(
jIO
,
RSVP
,
SQL
,
localStorage
));
test/jio.storage/sqlstorage.tests.js
0 → 100644
View file @
34f242f2
/*jslint nomen: true */
/*global jIO, QUnit, sinon, localStorage */
(
function
(
jIO
,
QUnit
,
sinon
,
localStorage
)
{
"
use strict
"
;
var
test
=
QUnit
.
test
,
stop
=
QUnit
.
stop
,
start
=
QUnit
.
start
,
ok
=
QUnit
.
ok
,
deepEqual
=
QUnit
.
deepEqual
,
equal
=
QUnit
.
equal
,
module
=
QUnit
.
module
;
/////////////////////////////////////////////////////////////////
// Custom test substorage definition
/////////////////////////////////////////////////////////////////
function
Storage200
()
{
this
.
documents
=
{};
return
this
;
}
Storage200
.
prototype
.
get
=
function
(
id
)
{
var
context
=
this
;
return
new
RSVP
.
Queue
().
push
(
function
()
{
return
context
.
documents
[
id
];
});
};
Storage200
.
prototype
.
post
=
function
(
data
)
{
var
context
=
this
;
return
new
RSVP
.
Queue
().
push
(
function
()
{
var
id
=
(
Object
.
keys
(
context
.
documents
).
length
+
1
).
toString
();
context
.
documents
[
id
]
=
data
;
return
id
;
});
};
Storage200
.
prototype
.
put
=
function
(
id
,
data
)
{
var
context
=
this
;
return
new
RSVP
.
Queue
().
push
(
function
()
{
context
.
documents
[
id
]
=
data
;
return
context
.
documents
[
id
];
});
};
Storage200
.
prototype
.
remove
=
function
(
id
)
{
delete
this
.
documents
[
id
];
return
new
RSVP
.
Queue
();
};
Storage200
.
prototype
.
hasCapacity
=
function
()
{
return
true
;
};
Storage200
.
prototype
.
buildQuery
=
function
()
{
var
context
=
this
;
return
new
RSVP
.
Queue
().
push
(
function
()
{
return
Object
.
keys
(
context
.
documents
).
map
(
function
(
id
)
{
return
{
id
:
id
,
value
:
context
.
documents
[
id
]
};
});
});
};
jIO
.
addStorage
(
'
sql200
'
,
Storage200
);
/////////////////////////////////////////////////////////////////
// SqlStorage.constructor
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.constructor
"
,
{
setup
:
function
()
{
this
.
getItemSpy
=
sinon
.
spy
(
localStorage
,
"
getItem
"
);
this
.
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
sub_storage
:
{
type
:
"
sql200
"
}
});
},
teardown
:
function
()
{
this
.
getItemSpy
.
restore
();
delete
this
.
getItemSpy
;
}
});
test
(
"
set the type
"
,
function
()
{
equal
(
this
.
jio
.
__type
,
"
sql
"
);
});
test
(
"
spy load from localStorage
"
,
function
()
{
ok
(
this
.
getItemSpy
.
calledOnce
,
"
getItem count
"
+
this
.
getItemSpy
.
callCount
);
});
/////////////////////////////////////////////////////////////////
// SqlStorage.hasCapacity
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.hasCapacity
"
);
test
(
"
can list documents
"
,
function
()
{
var
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
sub_storage
:
{
type
:
"
sql200
"
}
});
ok
(
jio
.
hasCapacity
(
"
list
"
));
});
test
(
"
can query documents
"
,
function
()
{
var
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
sub_storage
:
{
type
:
"
sql200
"
}
});
ok
(
jio
.
hasCapacity
(
"
query
"
));
});
/////////////////////////////////////////////////////////////////
// SqlStorage.post
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.post
"
,
{
setup
:
function
()
{
this
.
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
index_fields
:
[
"
title
"
],
sub_storage
:
{
type
:
"
sql200
"
}
});
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
]);
this
.
db
=
this
.
jio
.
__storage
.
__db
;
this
.
setItemSpy
=
sinon
.
spy
(
localStorage
,
"
setItem
"
);
this
.
runSpy
=
sinon
.
spy
(
this
.
db
,
"
run
"
);
},
teardown
:
function
()
{
this
.
setItemSpy
.
restore
();
delete
this
.
setItemSpy
;
this
.
runSpy
.
restore
();
delete
this
.
runSpy
;
}
});
test
(
"
index document
"
,
function
()
{
var
context
=
this
,
doc
=
{
title
:
"
document 1
"
};
stop
();
this
.
jio
.
post
(
doc
)
.
then
(
function
()
{
ok
(
context
.
setItemSpy
.
calledOnce
,
"
setItem count
"
+
context
.
setItemSpy
.
callCount
);
ok
(
context
.
runSpy
.
calledOnce
,
"
run count
"
+
context
.
runSpy
.
callCount
);
equal
(
context
.
runSpy
.
firstCall
.
args
[
0
],
"
INSERT INTO jiosearch VALUES (:id, :title)
"
,
"
run first argument
"
);
deepEqual
(
context
.
runSpy
.
firstCall
.
args
[
1
],
{
"
:title
"
:
"
document 1
"
,
"
:id
"
:
"
1
"
},
"
run first argument
"
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
/////////////////////////////////////////////////////////////////
// SqlStorage.put
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.put
"
,
{
setup
:
function
()
{
this
.
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
index_fields
:
[
"
title
"
],
sub_storage
:
{
type
:
"
sql200
"
}
});
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
]);
this
.
db
=
this
.
jio
.
__storage
.
__db
;
this
.
setItemSpy
=
sinon
.
spy
(
localStorage
,
"
setItem
"
);
this
.
runSpy
=
sinon
.
spy
(
this
.
db
,
"
run
"
);
},
teardown
:
function
()
{
this
.
setItemSpy
.
restore
();
delete
this
.
setItemSpy
;
this
.
runSpy
.
restore
();
delete
this
.
runSpy
;
}
});
test
(
"
index document
"
,
function
()
{
var
context
=
this
,
doc
=
{
title
:
"
document 1
"
};
stop
();
this
.
jio
.
put
(
"
1
"
,
doc
)
.
then
(
function
()
{
ok
(
context
.
setItemSpy
.
calledOnce
,
"
setItem count
"
+
context
.
setItemSpy
.
callCount
);
ok
(
context
.
runSpy
.
calledOnce
,
"
run count
"
+
context
.
runSpy
.
callCount
);
equal
(
context
.
runSpy
.
firstCall
.
args
[
0
],
"
UPDATE jiosearch SET title = :title WHERE id=:id
"
,
"
run first argument
"
);
deepEqual
(
context
.
runSpy
.
firstCall
.
args
[
1
],
{
"
:title
"
:
"
document 1
"
,
"
:id
"
:
"
1
"
},
"
run first argument
"
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
/////////////////////////////////////////////////////////////////
// SqlStorage.remove
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.remove
"
,
{
setup
:
function
()
{
this
.
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
index_fields
:
[
"
title
"
],
sub_storage
:
{
type
:
"
sql200
"
}
});
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
]);
this
.
db
=
this
.
jio
.
__storage
.
__db
;
this
.
setItemSpy
=
sinon
.
spy
(
localStorage
,
"
setItem
"
);
this
.
runSpy
=
sinon
.
spy
(
this
.
db
,
"
run
"
);
},
teardown
:
function
()
{
this
.
setItemSpy
.
restore
();
delete
this
.
setItemSpy
;
this
.
runSpy
.
restore
();
delete
this
.
runSpy
;
}
});
test
(
"
remove index document
"
,
function
()
{
var
context
=
this
;
stop
();
this
.
jio
.
remove
(
"
1
"
)
.
then
(
function
()
{
ok
(
context
.
setItemSpy
.
calledOnce
,
"
setItem count
"
+
context
.
setItemSpy
.
callCount
);
ok
(
context
.
runSpy
.
calledOnce
,
"
run count
"
+
context
.
runSpy
.
callCount
);
equal
(
context
.
runSpy
.
firstCall
.
args
[
0
],
"
DELETE FROM jiosearch WHERE id=:id
"
,
"
run first argument
"
);
deepEqual
(
context
.
runSpy
.
firstCall
.
args
[
1
],
{
"
:id
"
:
"
1
"
},
"
run first argument
"
);
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
/////////////////////////////////////////////////////////////////
// SqlStorage.buildQuery
/////////////////////////////////////////////////////////////////
module
(
"
SqlStorage.buildQuery
"
,
{
setup
:
function
()
{
this
.
jio
=
jIO
.
createJIO
({
type
:
"
sql
"
,
sub_storage
:
{
type
:
"
sql200
"
}
});
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
]);
}
});
test
(
"
list all documents
"
,
function
()
{
var
context
=
this
;
stop
();
RSVP
.
all
([
context
.
jio
.
post
({
title
:
"
document 1
"
}),
context
.
jio
.
post
({
title
:
"
document 2
"
})
])
.
then
(
function
()
{
return
context
.
jio
.
allDocs
();
})
.
then
(
function
(
result
)
{
deepEqual
(
result
,
{
data
:
{
rows
:
[{
id
:
"
1
"
,
value
:
{
title
:
"
document 1
"
}
},
{
id
:
"
2
"
,
value
:
{
title
:
"
document 2
"
}
}],
total_rows
:
2
}
});
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
search single field
"
,
function
()
{
var
context
=
this
;
stop
();
RSVP
.
all
([
context
.
jio
.
post
({
title
:
"
document 1
"
}),
context
.
jio
.
post
({
title
:
"
image 2
"
})
])
.
then
(
function
()
{
return
context
.
jio
.
allDocs
({
query
:
'
title: "doc"
'
});
})
.
then
(
function
(
result
)
{
deepEqual
(
result
,
{
data
:
{
rows
:
[{
id
:
"
1
"
,
value
:
{
title
:
"
document 1
"
}
}],
total_rows
:
1
}
});
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
search multiple fields
"
,
function
()
{
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
,
"
body
"
]);
var
context
=
this
;
stop
();
RSVP
.
all
([
context
.
jio
.
post
({
title
:
"
document 1
"
,
body
:
"
body document 1
"
}),
context
.
jio
.
post
({
title
:
"
image 2
"
,
body
:
"
body document 2
"
})
])
.
then
(
function
()
{
return
context
.
jio
.
allDocs
({
query
:
'
title: "doc" AND body: "doc"
'
,
select_list
:
[
'
title
'
]
});
})
.
then
(
function
(
result
)
{
deepEqual
(
result
,
{
data
:
{
rows
:
[{
id
:
"
1
"
,
value
:
{
title
:
"
document 1
"
}
}],
total_rows
:
1
}
});
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
limit results
"
,
function
()
{
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
]);
var
context
=
this
,
documents
=
[],
i
=
1
;
stop
();
while
(
i
<
10
)
{
documents
.
push
(
context
.
jio
.
post
({
title
:
"
document
"
+
i
}));
i
=
i
+
1
;
}
RSVP
.
all
(
documents
)
.
then
(
function
()
{
return
context
.
jio
.
allDocs
({
query
:
'
title: "doc"
'
,
limit
:
[
3
,
2
]
});
})
.
then
(
function
(
result
)
{
deepEqual
(
result
,
{
data
:
{
rows
:
[{
id
:
"
4
"
,
value
:
{
title
:
"
document 4
"
}
},
{
id
:
"
5
"
,
value
:
{
title
:
"
document 5
"
}
}],
total_rows
:
2
}
});
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
test
(
"
sort results
"
,
function
()
{
this
.
jio
.
__storage
.
__resetDb
([
"
title
"
,
"
body
"
]);
var
context
=
this
;
stop
();
RSVP
.
all
([
context
.
jio
.
post
({
title
:
"
document 1
"
,
body
:
"
body document 1
"
}),
context
.
jio
.
post
({
title
:
"
image 2
"
,
body
:
"
body document 2
"
})
])
.
then
(
function
()
{
return
context
.
jio
.
allDocs
({
query
:
'
body: "doc"
'
,
sort_on
:
[[
"
title
"
,
"
descending
"
]],
select_list
:
[
"
title
"
]
});
})
.
then
(
function
(
result
)
{
deepEqual
(
result
,
{
data
:
{
rows
:
[{
id
:
"
2
"
,
value
:
{
title
:
"
image 2
"
}
},
{
id
:
"
1
"
,
value
:
{
title
:
"
document 1
"
}
}],
total_rows
:
2
}
});
})
.
fail
(
function
(
error
)
{
ok
(
false
,
error
);
})
.
always
(
function
()
{
start
();
});
});
}(
jIO
,
QUnit
,
sinon
,
localStorage
));
test/tests.html
View file @
34f242f2
...
...
@@ -4,6 +4,7 @@
<meta
charset=
"utf-8"
/>
<title>
JIO Qunit/Sinon Unit Tests
</title>
<script
src=
"../node_modules/rsvp/dist/rsvp-2.0.4.js"
></script>
<script
src=
"../lib/sql.js/sql.js"
></script>
<script
src=
"../dist/jio-latest.js"
></script>
<link
rel=
"stylesheet"
href=
"../node_modules/grunt-contrib-qunit/test/libs/qunit.css"
type=
"text/css"
media=
"screen"
/>
...
...
@@ -56,6 +57,7 @@
<script
src=
"jio.storage/websqlstorage.tests.js"
></script>
<script
src=
"jio.storage/fbstorage.tests.js"
></script>
<script
src=
"jio.storage/httpstorage.tests.js"
></script>
<script
src=
"jio.storage/sqlstorage.tests.js"
></script>
<!--script src="../lib/jquery/jquery.min.js"></script>
<script src="../src/jio.storage/xwikistorage.js"></script>
<script src="jio.storage/xwikistorage.tests.js"></script-->
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment