diff -r 000000000000 -r ea0e45971cea test/test_parser.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test/test_parser.py Wed Oct 19 17:09:00 2011 +0900 @@ -0,0 +1,76 @@ +import unittest + +import os +import sys +sys.path.append('../') + +import time + +import simplejson +from glob import glob + +from pywhois.parser import WhoisEntry, cast_date + +class TestParser(unittest.TestCase): + def test_com_expiration(self): + data = """ + Status: ok + Updated Date: 14-apr-2008 + Creation Date: 14-apr-2008 + Expiration Date: 14-apr-2009 + + >>> Last update of whois database: Sun, 31 Aug 2008 00:18:23 UTC <<< + """ + w = WhoisEntry.load('urlowl.com', data) + expires = w.get('expiration_date') + self.assertEquals(expires, ['14-apr-2009']) + + def test_cast_date(self): + dates = ['14-apr-2008', '2008-04-14'] + for d in dates: + r = time.strftime('%Y-%m-%d', cast_date(d)) + self.assertEquals(r, '2008-04-14') + + def test_com_allsamples(self): + """ + Iterate over all of the sample/whois/*.com files, read the data, + parse it, and compare to the expected values in sample/expected/. + Only keys defined in keys_to_test will be tested. + + To generate fresh expected value dumps, see NOTE below. + """ + keys_to_test = ['domain_name', 'expiration_date', 'updated_date', 'creation_date', 'status'] + fail = 0 + for path in glob('test/samples/whois/*.com'): + # Parse whois data + domain = os.path.basename(path) + whois_fp = open(path) + data = whois_fp.read() + + w = WhoisEntry.load(domain, data) + results = {} + for key in keys_to_test: + results[key] = w.get(key) + + # Load expected result + expected_fp = open(os.path.join('test/samples/expected/', domain)) + expected_results = simplejson.load(expected_fp) + + # NOTE: Toggle condition below to write expected results from the parse results + # This will overwrite the existing expected results. Only do this if you've manually + # confirmed that the parser is generating correct values at its current state. + if False: + expected_fp = open(os.path.join('test/samples/expected/', domain), 'w') + expected_results = simplejson.dump(results, expected_fp) + continue + + # Compare each key + for key in results: + result = results.get(key) + expected = expected_results.get(key) + if expected != result: + print "%s \t(%s):\t %s != %s" % (domain, key, result, expected) + fail += 1 + + if fail: + self.fail("%d sample whois attributes were not parsed properly!" % fail) \ No newline at end of file