'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() })