#!/usr/bin/env python3 """tests for dates.py""" import os import random import re from subprocess import getstatusoutput, getoutput from Bio import SeqIO prg = './dates.py' short = 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split() long = ('January February March April May June July August ' 'September October November December').split() num_tests = 10 # -------------------------------------------------- def gen_date(month='num'): """generate a random date""" year = random.choice(range(1950, 2019)) month = random.choice(short) if month == 'short' else random.choice( long) if month == 'long' else random.choice(range(1, 13)) day = random.choice(range(1, 28)) hour = random.choice(range(1, 25)) minute = random.choice(range(1, 60)) seconds = random.choice(range(1, 60)) return (year, month, day, hour, minute, seconds) # -------------------------------------------------- def gen_short_month(): year = random.choice(range(1950, 2019)) month = random.choice(short) day = random.choice(range(1, 28)) hour = random.choice(range(1, 25)) minute = random.choice(range(1, 60)) seconds = random.choice(range(1, 60)) return (year, month, day, hour, minute, seconds) # -------------------------------------------------- def test_usage(): """usage""" out = getoutput('{}'.format(prg)) assert re.match("usage", out, re.IGNORECASE) # -------------------------------------------------- def test_00(): """20120309""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() out = getoutput('{} {}{:02d}{:02d}'.format(prg, year, month, day)) expected = '{:02d}-{:02d}-{:02d}'.format(year, month, day) assert out == expected # -------------------------------------------------- def test_01(): """2012-03-09T08:59""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() dt = '{}-{:02d}-{:02d}T{:02d}:{:02d}'.format(year, month, day, hour, minute) out = getoutput('{} {}'.format(prg, dt)) expected = '{:02d}-{:02d}-{:02d}'.format(year, month, day) assert out == expected # -------------------------------------------------- def test_02(): """2012-03-09T08:59:03""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() dt = '{}-{:02d}-{:02d}T{:02d}:{:02d}{:02d}'.format( year, month, day, hour, minute, sec) out = getoutput('{} {}'.format(prg, dt)) expected = '{:02d}-{:02d}-{:02d}'.format(year, month, day) assert out == expected # -------------------------------------------------- def test_03(): """2017-06-16Z""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() dt = '{}-{:02d}-{:02d}Z'.format(year, month, day) out = getoutput('{} {}'.format(prg, dt)) expected = '{:02d}-{:02d}-{:02d}'.format(year, month, day) assert out == expected # -------------------------------------------------- def test_04(): """2015-01""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() out = getoutput('{} {}-{}'.format(prg, year, month)) expected = '{:02d}-{:02d}-01'.format(year, month) assert out == expected # -------------------------------------------------- def test_05(): """2015-01/2015-02""" for _ in range(num_tests): year1, month1, day1, hour1, minute1, sec1 = gen_date() year2, month2, day2, hour2, minute2, sec2 = gen_date() dt = '{}-{}/{}-{}'.format(year1, month1, year2, month2) out = getoutput('{} {}'.format(prg, dt)) expected = '{:02d}-{:02d}-01'.format(year1, month1) assert out == expected # -------------------------------------------------- def test_06(): """2015-01-03/2015-02-14""" for _ in range(num_tests): year1, month1, day1, hour1, minute1, sec1 = gen_date() year2, month2, day2, hour2, minute2, sec2 = gen_date() dt = '{}-{}-{}/{}-{}-{}'.format(year1, month1, day1, year2, month2, day2) out = getoutput('{} {}'.format(prg, dt)) expected = '{:02d}-{:02d}-{:02d}'.format(year1, month1, day1) assert out == expected # -------------------------------------------------- def test_07(): """12/06""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date() year = str(year)[2:] out = getoutput('{} {}/{}'.format(prg, month, year)) expected = '20{:02d}-{:02d}-01'.format(int(year), month) assert out == expected # -------------------------------------------------- def test_08(): """2/14-12/15""" for _ in range(num_tests): year1, month1, day1, hour1, minute1, sec1 = gen_date() year2, month2, day2, hour2, minute2, sec2 = gen_date() year1 = str(year1)[2:] year2 = str(year1)[2:] out = getoutput('{} {}/{}-{}/{}'.format(prg, month1, year1, month2, year2)) expected = '20{:02d}-{:02d}-01'.format(int(year1), month1) assert out == expected # -------------------------------------------------- def test_09(): """Dec-2015""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date(month='short') sep = ', ' if random.choice([0, 1]) else '-' out = getoutput('{} "{}{}{}"'.format(prg, month, sep, year)) d = dict(map(reversed, enumerate(short, 1))) expected = '{}-{:02d}-01'.format(year, d[month]) assert out == expected # -------------------------------------------------- def test_10(): """December-2015""" for _ in range(num_tests): year, month, day, hour, minute, sec = gen_date(month='long') sep = ', ' if random.choice([0, 1]) else '-' out = getoutput('{} "{}{}{}"'.format(prg, month, sep, year)) d = dict(map(reversed, enumerate(long, 1))) expected = '{}-{:02d}-01'.format(year, d[month]) assert out == expected # -------------------------------------------------- def test_bad_input(): """fails on bad input""" year, month, day, hour, minute, sec = gen_date() sep = random.choice(list('!@@#$%^&*():[]:;/?,.~|')) out = getoutput('{} "{}"'.format(prg, sep.join(map(str, [year, month, day])))) assert out == 'No match'