--- /dev/null
+'use strict'
+
+var assert = require('assert')
+var test = require('tape')
+var remark = require('remark')
+var findAllAfter = require('.')
+
+var tree = remark().parse('Some *emphasis*, **importance**, and `code`.')
+var paragraph = tree.children[0]
+var children = paragraph.children
+
+test('unist-util-find-all-after', function(t) {
+ t.throws(
+ function() {
+ findAllAfter()
+ },
+ /Expected parent node/,
+ 'should fail without parent'
+ )
+
+ t.throws(
+ function() {
+ findAllAfter({type: 'foo'})
+ },
+ /Expected parent node/,
+ 'should fail without parent node'
+ )
+
+ t.doesNotThrow(function() {
+ assert.throws(function() {
+ findAllAfter({type: 'foo', children: []})
+ }, /Expected positive finite index or child node/)
+
+ assert.throws(function() {
+ findAllAfter({type: 'foo', children: []}, -1)
+ }, /Expected positive finite index or child node/)
+
+ assert.throws(function() {
+ findAllAfter({type: 'foo', children: []}, {type: 'bar'})
+ }, /Expected positive finite index or child node/)
+ }, 'should fail without index')
+
+ t.doesNotThrow(function() {
+ assert.throws(function() {
+ findAllAfter(
+ {
+ type: 'foo',
+ children: [{type: 'bar'}, {type: 'baz'}]
+ },
+ 0,
+ false
+ )
+ }, /Expected function, string, or object as test/)
+
+ assert.throws(function() {
+ findAllAfter(
+ {
+ type: 'foo',
+ children: [{type: 'bar'}, {type: 'baz'}]
+ },
+ 0,
+ true
+ )
+ }, /Expected function, string, or object as test/)
+ }, 'should fail for invalid `test`')
+
+ t.doesNotThrow(function() {
+ var res = children.slice(2)
+
+ assert.deepStrictEqual(findAllAfter(paragraph, children[1]), res)
+ assert.deepStrictEqual(findAllAfter(paragraph, 1), res)
+ assert.deepStrictEqual(findAllAfter(paragraph, 7), [])
+ }, 'should return the following node when without `test`')
+
+ t.doesNotThrow(function() {
+ assert.deepStrictEqual(findAllAfter(paragraph, 0, children[6]), [
+ children[6]
+ ])
+ assert.deepStrictEqual(findAllAfter(paragraph, children[0], children[1]), [
+ children[1]
+ ])
+ assert.deepStrictEqual(findAllAfter(paragraph, 0, children[1]), [
+ children[1]
+ ])
+ assert.deepStrictEqual(
+ findAllAfter(paragraph, children[0], children[0]),
+ []
+ )
+ assert.deepStrictEqual(findAllAfter(paragraph, 0, children[0]), [])
+ assert.deepStrictEqual(findAllAfter(paragraph, 1, children[1]), [])
+ }, 'should return `node` when given a `node` and existing')
+
+ t.doesNotThrow(function() {
+ assert.deepStrictEqual(findAllAfter(paragraph, 0, 'strong'), [children[3]])
+ assert.deepStrictEqual(findAllAfter(paragraph, 3, 'strong'), [])
+ assert.deepStrictEqual(findAllAfter(paragraph, children[0], 'strong'), [
+ children[3]
+ ])
+ assert.deepStrictEqual(findAllAfter(paragraph, children[3], 'strong'), [])
+ }, 'should return a child when given a `type` and existing')
+
+ t.doesNotThrow(function() {
+ var res = children.slice(5)
+
+ assert.deepStrictEqual(findAllAfter(paragraph, 0, test), res)
+ assert.deepStrictEqual(findAllAfter(paragraph, 6, test), [])
+ assert.deepStrictEqual(findAllAfter(paragraph, children[4], test), res)
+ assert.deepStrictEqual(findAllAfter(paragraph, children[6], test), [])
+
+ function test(node, n) {
+ return n >= 5
+ }
+ }, 'should return a child when given a `test` and existing')
+
+ t.end()
+})