# -*- encoding:utf-8 -*-

import py
import validator
import re

def test_minsize():
    v = validator.minsize(5)
    assert v.validate(None) == None
    assert v.validate('foobar') == 'foobar'
    py.test.raises(ValueError, "v.validate('foo')")
    py.test.raises(ValueError, "v.validate('')")
    try:
        v.validate('foo')
    except ValueError, e:
        assert e.args[0] == 'field should contain at least 5 characters'
    else:
        py.test.fail(e.args[0])

def test_id():
    v = validator.id()
    assert v.validate(None) == None
    assert v.validate('') == ''
    assert v.validate('foobar') == 'foobar'
    assert v.validate('foo_bar') == 'foo_bar'
    assert v.validate('foo123_.bar') == 'foo123_.bar'
    py.test.raises(ValueError, "v.validate('_foo')")
    py.test.raises(ValueError, "v.validate('.foo')")
    py.test.raises(ValueError, "v.validate('1foo')")

def test_regvalidator():
    v = validator.regvalidator(reg=re.compile('^\w{3}$'), msg='foo bar')
    v.validate(None)
    v.validate('') # might not be mandatory...
    v.validate('foo')
    v.validate('bar')
    py.test.raises(ValueError, "v.validate('quux')")
    py.test.raises(ValueError, "v.validate('fo')")
    py.test.raises(ValueError, "v.validate('...')")
    try:
        v.validate('foobar')
    except ValueError, e:
        assert e.args[0] == 'foo bar'
    else:
        raise AssertionError('unexpected message on ValueError')

def test_email():
    v = validator.email()
    v.validate(None)
    v.validate('')
    v.validate('foo@bar.com')
    v.validate(u'新游戏@新游戏.com')
    v.validate('test.foo.bar_whatever@some.strange.toplevel')
    py.test.raises(ValueError, "v.validate('foobar')")
    py.test.raises(ValueError, "v.validate('foo@bar')")
    py.test.raises(ValueError, "v.validate('foo@.bar')")

