Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
J
jquery
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
夏彬
jquery
Commits
d1de3000
Commit
d1de3000
authored
Dec 31, 2012
by
Rick Waldron
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2.0: Rewrite data.js
Signed-off-by:
Rick Waldron
<
waldron.rick@gmail.com
>
parent
e1dcf96b
Changes
3
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
286 additions
and
279 deletions
+286
-279
data.js
src/data.js
+189
-220
testrunner.js
test/data/testrunner.js
+62
-53
data.js
test/unit/data.js
+35
-6
No files found.
src/data.js
View file @
d1de3000
This diff is collapsed.
Click to expand it.
test/data/testrunner.js
View file @
d1de3000
...
...
@@ -200,47 +200,51 @@ var Globals = (function() {
*/
QUnit
.
expectJqData
=
function
(
elems
,
key
)
{
var
i
,
elem
,
expando
;
QUnit
.
current_testEnvironment
.
checkJqData
=
true
;
if
(
elems
.
jquery
&&
elems
.
toArray
)
{
elems
=
elems
.
toArray
();
}
if
(
!
jQuery
.
isArray
(
elems
)
)
{
elems
=
[
elems
];
}
if
(
jQuery
.
cache
)
{
QUnit
.
current_testEnvironment
.
checkJqData
=
true
;
for
(
i
=
0
;
i
<
elems
.
length
;
i
++
)
{
elem
=
elems
[
i
];
// jQuery.data only stores data for nodes in jQuery.cache,
// for other data targets the data is stored in the object itself,
// in that case we can't test that target for memory leaks.
// But we don't have to since in that case the data will/must will
// be available as long as the object is not garbage collected by
// the js engine, and when it is, the data will be removed with it.
if
(
!
elem
.
nodeType
)
{
// Fixes false positives for dataTests(window), dataTests({}).
continue
;
if
(
elems
.
jquery
&&
elems
.
toArray
)
{
elems
=
elems
.
toArray
();
}
if
(
!
jQuery
.
isArray
(
elems
)
)
{
elems
=
[
elems
];
}
expando
=
elem
[
jQuery
.
expando
];
if
(
expando
===
undefined
)
{
// In this case the element exists fine, but
// jQuery.data (or internal data) was never (in)directly
// called.
// Since this method was called it means some data was
// expected to be found, but since there is nothing, fail early
// (instead of in teardown).
notStrictEqual
(
expando
,
undefined
,
"Target for expectJqData must have an expando, for else there can be no data to expect."
);
}
else
{
if
(
expectedDataKeys
[
expando
]
)
{
expectedDataKeys
[
expando
].
push
(
key
);
for
(
i
=
0
;
i
<
elems
.
length
;
i
++
)
{
elem
=
elems
[
i
];
// jQuery.data only stores data for nodes in jQuery.cache,
// for other data targets the data is stored in the object itself,
// in that case we can't test that target for memory leaks.
// But we don't have to since in that case the data will/must will
// be available as long as the object is not garbage collected by
// the js engine, and when it is, the data will be removed with it.
if
(
!
elem
.
nodeType
)
{
// Fixes false positives for dataTests(window), dataTests({}).
continue
;
}
expando
=
elem
[
jQuery
.
expando
];
if
(
expando
===
undefined
)
{
// In this case the element exists fine, but
// jQuery.data (or internal data) was never (in)directly
// called.
// Since this method was called it means some data was
// expected to be found, but since there is nothing, fail early
// (instead of in teardown).
notStrictEqual
(
expando
,
undefined
,
"Target for expectJqData must have an expando, for else there can be no data to expect."
);
}
else
{
expectedDataKeys
[
expando
]
=
[
key
];
if
(
expectedDataKeys
[
expando
]
)
{
expectedDataKeys
[
expando
].
push
(
key
);
}
else
{
expectedDataKeys
[
expando
]
=
[
key
];
}
}
}
}
};
QUnit
.
config
.
urlConfig
.
push
(
{
id
:
"jqdata"
,
...
...
@@ -258,33 +262,38 @@ var Globals = (function() {
fragmentsLength
=
0
,
cacheLength
=
0
;
// Only look for jQuery data problems if this test actually
// provided some information to compare against.
if
(
QUnit
.
urlParams
.
jqdata
||
this
.
checkJqData
)
{
for
(
i
in
jQuery
.
cache
)
{
expectedKeys
=
expectedDataKeys
[
i
];
actualKeys
=
jQuery
.
cache
[
i
]
?
keys
(
jQuery
.
cache
[
i
]
)
:
jQuery
.
cache
[
i
];
if
(
!
QUnit
.
equiv
(
expectedKeys
,
actualKeys
)
)
{
deepEqual
(
actualKeys
,
expectedKeys
,
"Expected keys exist in jQuery.cache"
);
if
(
jQuery
.
cache
)
{
// Only look for jQuery data problems if this test actually
// provided some information to compare against.
if
(
QUnit
.
urlParams
.
jqdata
||
this
.
checkJqData
)
{
for
(
i
in
jQuery
.
cache
)
{
expectedKeys
=
expectedDataKeys
[
i
];
actualKeys
=
jQuery
.
cache
[
i
]
?
keys
(
jQuery
.
cache
[
i
]
)
:
jQuery
.
cache
[
i
];
if
(
!
QUnit
.
equiv
(
expectedKeys
,
actualKeys
)
)
{
deepEqual
(
actualKeys
,
expectedKeys
,
"Expected keys exist in jQuery.cache"
);
}
delete
jQuery
.
cache
[
i
];
delete
expectedDataKeys
[
i
];
}
// In case it was removed from cache before (or never there in the first place)
for
(
i
in
expectedDataKeys
)
{
deepEqual
(
expectedDataKeys
[
i
],
undefined
,
"No unexpected keys were left in jQuery.cache (#"
+
i
+
")"
);
delete
expectedDataKeys
[
i
];
}
delete
jQuery
.
cache
[
i
];
delete
expectedDataKeys
[
i
];
}
// In case it was removed from cache before (or never there in the first place)
for
(
i
in
expectedDataKeys
)
{
deepEqual
(
expectedDataKeys
[
i
],
undefined
,
"No unexpected keys were left in jQuery.cache (#"
+
i
+
")"
);
delete
expectedDataKeys
[
i
];
}
// Reset data register
expectedDataKeys
=
{};
}
// Reset data register
expectedDataKeys
=
{};
// Allow QUnit.reset to clean up any attached elements before checking for leaks
QUnit
.
reset
();
for
(
i
in
jQuery
.
cache
)
{
++
cacheLength
;
if
(
jQuery
.
cache
)
{
for
(
i
in
jQuery
.
cache
)
{
++
cacheLength
;
}
}
jQuery
.
fragments
=
{};
...
...
@@ -334,7 +343,7 @@ var Globals = (function() {
}
else
{
delete
jQuery
.
ajaxSettings
;
}
// Cleanup globals
Globals
.
cleanup
();
...
...
test/unit/data.js
View file @
d1de3000
module
(
"data"
,
{
teardown
:
moduleTeardown
});
module
(
"data"
,
{
teardown
:
moduleTeardown
});
test
(
"expando"
,
function
()
{
test
(
"expando"
,
function
()
{
expect
(
1
);
equal
(
jQuery
.
expando
!==
undefined
,
true
,
"jQuery is exposing the expando"
);
});
test
(
"jQuery.data & removeData, expected returns"
,
function
()
{
expect
(
2
);
equal
(
jQuery
.
data
(
document
.
body
,
"hello"
,
"world"
),
"world"
,
"jjQuery.data( elem, key, value ) returns value"
);
equal
(
jQuery
.
removeData
(
document
.
body
,
"hello"
),
undefined
,
"jjQuery.removeData( elem, key, value ) returns undefined"
);
});
test
(
"jQuery._data & _removeData, expected returns"
,
function
()
{
expect
(
2
);
equal
(
jQuery
.
_data
(
document
.
body
,
"hello"
,
"world"
),
"world"
,
"jjQuery.data( elem, key, value ) returns value"
);
equal
(
jQuery
.
_removeData
(
document
.
body
,
"hello"
),
undefined
,
"jjQuery.removeData( elem, key, value ) returns undefined"
);
});
function
dataTests
(
elem
)
{
var
oldCacheLength
,
dataObj
,
internalDataObj
,
expected
,
actual
;
...
...
@@ -99,6 +126,7 @@ test("jQuery.data(document)", 25, function() {
QUnit
.
expectJqData
(
document
,
"foo"
);
});
/*
test("Expando cleanup", 4, function() {
var expected, actual,
div = document.createElement("div");
...
...
@@ -132,7 +160,8 @@ test("Expando cleanup", 4, function() {
// Clean up unattached element
jQuery(div).remove();
});
*/
/*
test("jQuery.acceptData", function() {
expect(7);
...
...
@@ -150,7 +179,7 @@ test("jQuery.acceptData", function() {
applet.setAttribute("classid", "clsid:8AD9C840-044E-11D1-B3E9-00805F499D93");
ok( !jQuery.acceptData( applet ), "applet" );
});
*/
test
(
".data()"
,
function
()
{
expect
(
5
);
...
...
@@ -465,8 +494,8 @@ test("jQuery.data should follow html5 specification regarding camel casing", fun
div
.
data
(
"foo-bar"
,
"d"
);
equal
(
div
.
data
(
"fooBar"
),
"d"
,
"Verify updated data-* key"
);
equal
(
div
.
data
(
"foo-bar"
),
"d"
,
"Verify updated data-* key"
);
equal
(
div
.
data
(
"fooBar"
),
"d"
,
"Verify updated data-* key
(fooBar)
"
);
equal
(
div
.
data
(
"foo-bar"
),
"d"
,
"Verify updated data-* key
(foo-bar)
"
);
div
.
remove
();
});
...
...
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