diff --git a/test/attributes.js b/test/attributes.js
index 3a17ca9..bc2cf3b 100644
--- a/test/attributes.js
+++ b/test/attributes.js
@@ -49,7 +49,7 @@ describe('attribute.js', function(){
it('should get correct attributes', function(){
var lis = $(document.getElementById('container').getElementsByTagName('li'))
- lis.handle(function(element, index){
+ lis.forEach(function(element, index){
var self = $(element)
switch (index){
case 0: expect(self.getAttribute('class')).to.be('first'); break
diff --git a/test/elements.js b/test/elements.js
index 33c99f0..1c9e915 100644
--- a/test/elements.js
+++ b/test/elements.js
@@ -3,35 +3,39 @@
var $ = require('../lib/elements')
var expect = require('expect.js')
-describe('elements.js', function(){
+var reset = function(){
+
+ var container = document.getElementById('container')
+ if (container) document.body.removeChild(container)
+
+ container = document.createElement('div')
+ container.id = 'container'
+ container.style.display = 'none'
+ container.style.position = 'absolute'
+ container.top = 0
+ container.left = 0
+
+ document.body.appendChild(container)
+
+ container.innerHTML = ['',
+ '
',
+ '- 1
',
+ '- 2
',
+ '- 3
',
+ '
',
+ '',
+ 'library',
+ ''
+ ].join('')
+}
+
+describe('elements constructor', function(){
// prepare the environment
- beforeEach(function(){
- var body = document.getElementsByTagName('body')[0]
- var container = document.getElementById('container')
- if (!container){
- container = document.createElement('div')
- container.id = 'container'
- container.style.display = 'none'
- container.style.position = 'absolute'
- container.top = 0
- container.left = 0
- }
- body.appendChild(container)
- container.innerHTML = ['',
- '',
- '- 1
',
- '- 2
',
- '- 3
',
- '
',
- '',
- 'library',
- ''
- ].join('')
- })
+ beforeEach(reset)
it('should receive null and return null', function(){
expect($(null)).to.be(null)
@@ -66,81 +70,29 @@ describe('elements.js', function(){
expect(res2.length).to.be(2)
})
- describe('expose a handle method that ', function(){
-
- var setRel = function(element, index){
- element.setAttribute('rel', 'handled' + index)
- return element
- }
-
- it('is a sort of Array.map', function(){
- var lis = $(document.getElementById('container').getElementsByTagName('li'))
- expect(lis.length).to.be(3)
- var res = lis.handle(setRel)
- expect(res[0].getAttribute('rel')).to.be('handled0')
- expect(res[1].getAttribute('rel')).to.be('handled1')
- })
-
- it('is a sort of Array.filter', function(){
- var lis = $(document.getElementById('container').getElementsByTagName('li'))
- var res = $(lis.handle(function(element){
- return element.className ? element : null
- }))
-
- expect(res.length).to.be(1)
- })
-
- it('can be used as Array.some', function(){
- var someHasRelHandled1 = function(element, index, buffer){
- if (element.getAttribute('rel') == 'handled1'){
- buffer.push(true)
- return true
- }
- }
- var lis = $(document.getElementById('container').getElementsByTagName('li'))
- var res
- lis.handle(setRel)
- res = lis.handle(someHasRelHandled1)
-
- expect(res.length).to.be(1)
- expect(res[0]).to.be.ok()
-
- var options = $(document.getElementById('container').getElementsByTagName('option'))
- res = options.handle(someHasRelHandled1)
- expect(res.length).to.be(0)
- })
+ describe('selector engine implementation', function(){
- it('can be used as Array.every', function(){
- var lis = $(document.getElementById('container').getElementsByTagName('li'))
- lis.handle(setRel)
- var everyHasRel = function(element){
- if (null === element.getAttribute('rel')) return false
- return this
- }
- var res = lis.handle(everyHasRel)
- expect(res.length).to.be(lis.length)
- var options = $(document.getElementById('container').getElementsByTagName('option'))
- res = options.handle(everyHasRel)
- expect(res.length).to.not.be(options.length)
- })
-
- it('allow to implement custom selector engine', function(){
+ it('implement custom selector engine', function(){
$.implement({
search: function(expression){ // stupid tagName selector
- var res = this.handle(function(node, i, buffer){
+ var buffer = []
+
+ this.forEach(function(node){
var nodes = Array.prototype.slice.call(node.getElementsByTagName(expression))
buffer.push.apply(buffer, nodes)
})
- return $(res)
+ return $(buffer)
}
})
expect($("input").length).to.be(1)
+
+ delete $.prototype.search
})
- it('allow to implement custom sorter', function(){
+ it('implement custom element sorter', function(){
var lis = $(document.getElementById('container').getElementsByTagName('li'))
$.implement({
@@ -157,6 +109,8 @@ describe('elements.js', function(){
expect(lis2[0] == lis[1]).to.be.ok()
expect(lis2[1] == lis[0]).to.be.ok()
expect(lis2[2] == lis[2]).to.be.ok()
+
+ delete $.prototype.sort
})
})
@@ -175,3 +129,61 @@ describe('elements.js', function(){
})
})
+
+describe('list methods', function(){
+
+ // prepare the environment
+ beforeEach(reset)
+
+ describe('$ should implement es5 list prototypes', function(){
+
+ it('implement forEach', function(){
+ var ul = $(document.getElementById('container').firstChild)
+ var lis = $(ul[0].childNodes)
+ lis.forEach(function(el, i){
+ expect(el.innerHTML).to.be('' + (i + 1))
+ })
+ })
+
+ it('implement map', function(){
+ var lis = $(document.getElementById('container').firstChild.childNodes)
+ var maps = lis.map(function(el){
+ return el.innerHTML
+ })
+ expect(maps[0]).to.be('1')
+ expect(maps[1]).to.be('2')
+ expect(maps[2]).to.be('3')
+ })
+
+ it('implement filter', function(){
+ var lis = $(document.getElementById('container').firstChild.childNodes)
+ var maps = lis.filter(function(el){
+ return el.innerHTML - 0 < 3
+ })
+ expect(maps.length).to.be(2)
+ })
+
+ it('implement every', function(){
+ var lis = $(document.getElementById('container').firstChild.childNodes)
+ expect(lis.every(function(el){
+ return el.tagName.toLowerCase() == 'li'
+ })).to.be.ok()
+ expect(lis.every(function(el){
+ return el.innerHTML == '1'
+ })).to.be(false)
+ })
+
+ it('implement some', function(){
+ var lis = $(document.getElementById('container').firstChild.childNodes)
+ expect(lis.some(function(el){
+ return el.tagName == 'p'
+ })).to.be(false)
+ expect(lis.some(function(el){
+ return el.innerHTML == '1'
+ })).to.be.ok()
+ })
+
+ })
+
+})
+
diff --git a/test/index.html b/test/index.html
index 2195265..b67becd 100644
--- a/test/index.html
+++ b/test/index.html
@@ -24,7 +24,6 @@
elements
events
insertion
- list
-
-back
-
-
-
diff --git a/test/insertion.js b/test/insertion.js
index 406d889..6a602cd 100644
--- a/test/insertion.js
+++ b/test/insertion.js
@@ -46,7 +46,7 @@ describe('insertion.js', function(){
ul.appendChild($E('li', 'insertedLI'))
var found = false
var index = 0
- $(document.getElementById('container').firstChild.childNodes).handle(function(element, i){
+ $(document.getElementById('container').firstChild.childNodes).forEach(function(element, i){
if (element.id == 'insertedLI'){
found = true
index = i
@@ -68,7 +68,7 @@ describe('insertion.js', function(){
ul.insertBefore(bef, ins)
- $(document.getElementById('container').firstChild.childNodes).handle(function(element, i){
+ $(document.getElementById('container').firstChild.childNodes).forEach(function(element, i){
if (element.id == 'beforeLI'){
found = true
index = i
diff --git a/test/list.html b/test/list.html
deleted file mode 100644
index b239267..0000000
--- a/test/list.html
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
-
-
-
nodes list tests
-
-
-
-
-
-
-
-
-
-