--- /dev/null
+'use strict';
+/*jshint asi: true*/
+
+var test = require('tap').test
+ , util = require('util')
+ , redeyed = require('..')
+
+function inspect (obj) {
+ return util.inspect(obj, false, 5, true)
+}
+
+test('function - config passing idx and tokens', function (t) {
+
+ var args = []
+ , opts001 = {
+ Boolean: {
+ _default: identity
+ }
+ , Keyword: {
+ _default: identity
+ }
+ , Identifier: {
+ _default: identity
+ }
+ , Punctuator: {
+ _default: identity
+ }
+ }
+ , code = 'var fn = function () { return true; }'
+
+ function identity (s, info) {
+ args.push( { value: s, idx: info.tokenIndex, tokens: info.tokens, code: info.code })
+ // returning unchanged string will keep the splits be equal to the original tokens
+ return s
+ }
+
+ function tokenValue (t) { return t.value; }
+
+ t.test(inspect(opts001) + ' -- ' + code, function (t) {
+
+ var result = redeyed(code, opts001, { splits: true })
+ , tokens = result.tokens
+
+ t.equals(args.length, tokens.length, 'called with all tokens')
+
+ for (var i = 0; i < tokens.length; i++) {
+ var token = tokens[i]
+ , arg = args[i]
+
+ t.equals(arg.value, token.value, 'passes correct value: ' + inspect([ arg.value, token.value ]))
+ t.equals(arg.idx, i, 'passes correct index')
+ t.equals(arg.code, code, 'passes code')
+ t.deepEquals(arg.tokens, tokens, 'passes all tokens')
+ }
+ t.end()
+ })
+})