"""
Unit test for recursive string functions.

Author: Walker M. White (wmw2)
Date:   October 10, 2017 (Python 3 Version)
"""
import cornell
import stringfun

def test_length():
    """
    Test the function length
    """
    cornell.assert_equals(0,  stringfun.length(''))
    cornell.assert_equals(1,  stringfun.length('e'))
    cornell.assert_equals(7,  stringfun.length('ceceddd'))
    cornell.assert_equals(15, stringfun.length('*0;jh=52y;jh=`5'))


def test_num_e():
    """
    Test the function num_e
    """
    cornell.assert_equals(0,  stringfun.num_e(''))
    cornell.assert_equals(1,  stringfun.num_e('e'))
    cornell.assert_equals(0,  stringfun.num_e('c'))
    cornell.assert_equals(2,  stringfun.num_e('ceceddd'))
    cornell.assert_equals(0,  stringfun.num_e('asdfasdfadsf'))


def test_deblank():
    """
    Test the function deblank
    """
    cornell.assert_equals('',   stringfun.deblank(''));
    cornell.assert_equals('',   stringfun.deblank(' '));
    cornell.assert_equals('B',  stringfun.deblank('B'));
    cornell.assert_equals('BG', stringfun.deblank('B G'));
    cornell.assert_equals('',   stringfun.deblank('         '));


def test_depunct():
    """
    Test the function depunct
    """
    cornell.assert_equals('',    stringfun.depunct('(@$*&@'));
    cornell.assert_equals('foo', stringfun.depunct('  f,o**o!!!'));
    cornell.assert_equals('foo', stringfun.depunct('f  (!*@&,.<>:\'  oo'));


def test_reverse():
    """
    Test the function reverse
    """
    cornell.assert_equals('',        stringfun.reverse(''));
    cornell.assert_equals('esrever', stringfun.reverse('reverse'));
    cornell.assert_equals('amanaplanacanalpanama',
                          stringfun.reverse('amanaplanacanalpanama'));
    cornell.assert_equals('a man a plan a canal panama',
                          stringfun.reverse('amanap lanac a nalp a nam a'));


# Application Code
if __name__ == '__main__':
    test_length()
    test_num_e()
    test_deblank()
    test_depunct()
    test_reverse()
    print('Module stringfun is working properly')