smlng 3893f04d00 tests: move testrunner import up
Testrunner is now impported as a package found in PYTHONPATH, so
import can be placed at the top of the script as usual.
2018-08-13 14:11:24 +02:00

124 lines
3.9 KiB
Python
Executable File

#!/usr/bin/env python3
# Copyright (C) 2017 Inria
#
# This file is subject to the terms and conditions of the GNU Lesser
# General Public License v2.1. See the file LICENSE in the top level
# directory for more details.
import sys
import calendar
import datetime
from testrunner import run
def _check_help(child):
child.sendline('help')
child.expect_exact('Command Description')
child.expect_exact('---------------------------------------')
child.expect_exact('days_in '
'Tells you the number of days in a month.')
child.expect_exact('leap_year '
'Tells you if a supplied year is a leap year.')
child.expect_exact('doomsday '
'Tells you the wday Doomsday of the supplied year.')
child.expect_exact('day '
'Tells you the day of the supplied date.')
def _check_days_in(child):
# verify usage
child.sendline('days_in')
child.expect_exact('Usage: days_in <Month[1..12]>')
# send an invalid month
child.sendline('days_in 13')
child.expect_exact('Usage: days_in <Month[1..12]>')
child.sendline('days_in 0')
child.expect_exact('Usage: days_in <Month[1..12]>')
year = 2017 # not a leap year so february has 28 days
for m in range(12):
days = calendar.monthrange(year, m + 1)[1]
mon = datetime.datetime(year, m + 1, 1).strftime('%b').upper()
child.sendline('days_in {}'.format(m + 1))
child.expect_exact('There are {} days in {} in common years.'
.format(days, mon))
def _check_leap_year(child):
# verify usage
child.sendline('leap_year')
child.expect_exact('Usage: leap_year <Year>')
# send an invalid year
child.sendline('leap_year aaaa')
child.expect_exact('Usage: leap_year <Year>')
for (year, leap) in ((2000, 'YES'),
(2016, 'YES'),
(2017, 'NO'),
(2018, 'NO')):
child.sendline('leap_year {}'.format(year))
child.expect_exact('Was {} a leap year? {}.'.format(year, leap))
def _check_doomsday(child):
# verify usage
child.sendline('doomsday')
child.expect_exact('Usage: doomsday <Year>')
for year in (2016, 2017):
dt = (datetime.datetime(year, 3, 1) - datetime.timedelta(days=1))
doomsday = dt.strftime('%a').upper()
child.sendline('doomsday {}'.format(year))
child.expect_exact('What weekday was MAR 0 of {}? {}.'
.format(year, doomsday))
def _check_day(child):
# verify usage
child.sendline('day')
child.expect_exact('Usage: day <Year> <Month[1..12]> <Day[1..31]>')
# loop over a list of valid dates
for year in (2017, 2018):
for month in (1, 4, 11):
for day in (1, 15, 28):
dt = datetime.datetime(year, month, day)
count = dt.timetuple().tm_yday
day_str = dt.strftime('%a').upper()
child.sendline('day {} {} {}'.format(year, month, day))
child.expect_exact('What weekday was {}-{:02}-{:02}? '
'The {}(th) day of the year was a {}.'
.format(year, month, day, count, day_str))
# 2016 is a leap year
child.sendline('day 2016 2 29')
child.expect_exact('What weekday was 2016-02-29? '
'The 60(th) day of the year was a MON.')
# 2017 is a leap year
child.sendline('day 2017 2 29')
child.expect_exact('The supplied date is invalid, '
'but no error should occur.')
def _wait_prompt(child):
child.sendline('')
child.expect('>')
def testfunc(child):
_wait_prompt(child)
_check_help(child)
_check_days_in(child)
_check_leap_year(child)
_check_doomsday(child)
_check_day(child)
if __name__ == "__main__":
sys.exit(run(testfunc))