patterns
Version:
Match a string against a list of patterns
88 lines (78 loc) • 1.9 kB
JavaScript
var test = require('tape')
var murl = require('murl')
var Patterns = require('./')
test('no patterns', function (t) {
var p = Patterns()
var match = p.match('foo')
t.equal(match, null)
t.end()
})
test('string patterns', function (t) {
var p = Patterns()
p.add('foo', 1)
p.add('bar', 2)
p.add('baz', 3)
var match = p.match('bar')
t.equal(match.target, 'bar')
t.equal(match.pattern, 'bar')
t.deepEqual(match.params, murl('bar')('bar'))
t.equal(match.value, 2)
t.ok(typeof match.next, 'function')
t.end()
})
test('murl patterns', function (t) {
var p = Patterns()
p.add('/{hello}/{world}?')
var match = p.match('/foo/bar')
t.deepEqual(match.params, { hello: 'foo', world: 'bar' })
match = p.match('/foo')
t.deepEqual(match.params, { hello: 'foo', world: undefined })
t.end()
})
test('RegExp patterns', function (t) {
var p = Patterns()
p.add(/foo/, 1)
p.add(/bar/, 2)
p.add(/baz/, 3)
var match = p.match('bar')
t.equal(match.target, 'bar')
t.deepEqual(match.pattern, /bar/)
t.deepEqual(match.params, 'bar'.match(/bar/))
t.equal(match.value, 2)
t.ok(typeof match.next, 'function')
t.end()
})
test('next function', function (t) {
var p = Patterns()
p.add(/foo/, 1)
p.add(/bar/, 2)
p.add(/baz/, 3)
var match = p.match('foobar')
t.equal(match.value, 1)
match = match.next()
t.equal(match.value, 2)
match = match.next()
t.equal(match, null)
t.end()
})
test('last next function', function (t) {
var p = Patterns()
p.add(/foo/, 1)
var match = p.match('foo')
t.equal(match.value, 1)
match = match.next()
t.equal(match, null)
t.end()
})
test('matchAll', function (t) {
var p = Patterns()
p.add(/foo/, 1)
p.add(/foo/, 2)
p.add(/foo/, 3)
var matches = p.matchAll('foo')
t.equal(matches[0].value, 1)
t.equal(matches[1].value, 2)
t.equal(matches[2].value, 3)
t.end()
})