# -*- coding: utf-8 -*- """novelWriter Common Class Tester """ import time import pytest from nw.common import ( checkString, checkBool, checkInt, colRange, formatInt, transferCase, fuzzyTime, checkHandle, formatTimeStamp, formatTime ) from nwtools import cmpList @pytest.mark.core def testCheckString(): assert checkString(None, "NotNone", True) is None assert checkString("None", "NotNone", True) is None assert checkString("None", "NotNone", False) == "None" assert checkString(None, "NotNone", False) == "NotNone" assert checkString(1, "NotNone", False) == "NotNone" assert checkString(1.0, "NotNone", False) == "NotNone" assert checkString(True, "NotNone", False) == "NotNone" @pytest.mark.core def testCheckInt(): assert checkInt(None, 3, True) is None assert checkInt("None", 3, True) is None assert checkInt(None, 3, False) == 3 assert checkInt(1, 3, False) == 1 assert checkInt(1.0, 3, False) == 1 assert checkInt(True, 3, False) == 1 @pytest.mark.core def testCheckBool(): assert checkBool(None, 3, True) is None assert checkBool("None", 3, True) is None assert checkBool("True", False, False) assert not checkBool("False", True, False) assert checkBool("Boo", None, False) is None assert not checkBool(0, None, False) assert checkBool(1, None, False) assert checkBool(2, None, False) is None assert checkBool(0.0, None, False) is None assert checkBool(1.0, None, False) is None assert checkBool(2.0, None, False) is None @pytest.mark.core def testCheckHandle(): assert checkHandle("None", 1, True) is None assert checkHandle("None", 1, False) == 1 assert checkHandle(None, 1, True) is None assert checkHandle(None, 1, False) == 1 assert checkHandle("47666c91c7ccf", None, False) == "47666c91c7ccf" assert checkHandle("h7666c91c7ccf", None, False) is None @pytest.mark.core def testColRange(): assert colRange([0, 0], [0, 0], 0) is None assert cmpList( colRange([200, 50, 0], [50, 200, 0], 1), [200, 50, 0] ) assert cmpList( colRange([200, 50, 0], [50, 200, 0], 2), [[200, 50, 0], [50, 200, 0]] ) assert cmpList( colRange([200, 50, 0], [50, 200, 0], 3), [[200, 50, 0], [125, 125, 0], [50, 200, 0]] ) assert cmpList( colRange([200, 50, 0], [50, 200, 0], 4), [[200, 50, 0], [150, 100, 0], [100, 150, 0], [50, 200, 0]] ) assert cmpList( colRange([200, 50, 0], [50, 200, 0], 5), [[200, 50, 0], [162, 87, 0], [124, 124, 0], [86, 161, 0], [50, 200, 0]] ) @pytest.mark.core def testFormatTimeStamp(): tTime = time.mktime(time.gmtime(0)) assert formatTimeStamp(tTime, False) == "1970-01-01 00:00:00" assert formatTimeStamp(tTime, True) == "1970-01-01 00.00.00" @pytest.mark.core def testFormatTime(): assert formatTime("1") == "ERROR" assert formatTime(1.0) == "ERROR" assert formatTime(1) == "00:00:01" assert formatTime(59) == "00:00:59" assert formatTime(60) == "00:01:00" assert formatTime(180) == "00:03:00" assert formatTime(194) == "00:03:14" assert formatTime(3540) == "00:59:00" assert formatTime(3599) == "00:59:59" assert formatTime(3600) == "01:00:00" assert formatTime(11640) == "03:14:00" assert formatTime(11655) == "03:14:15" assert formatTime(86399) == "23:59:59" assert formatTime(86400) == "1-00:00:00" assert formatTime(360000) == "4-04:00:00" @pytest.mark.core def testFormatInt(): assert formatInt(1000) == "1000" assert formatInt(1234) == "1.23\u2009k" assert formatInt(12345) == "12.3\u2009k" assert formatInt(123456) == "123\u2009k" assert formatInt(1234567) == "1.23\u2009M" assert formatInt(12345678) == "12.3\u2009M" assert formatInt(123456789) == "123\u2009M" assert formatInt(1234567890) == "1.23\u2009G" @pytest.mark.core def testTransferCase(): assert transferCase(1, "TaRgEt") == "TaRgEt" assert transferCase("source", 1) == 1 assert transferCase("", "TaRgEt") == "TaRgEt" assert transferCase("source", "") == "" assert transferCase("Source", "target") == "Target" assert transferCase("SOURCE", "target") == "TARGET" assert transferCase("source", "TARGET") == "target" @pytest.mark.core def testFuzzyTime(): assert fuzzyTime(-1) == "in the future" assert fuzzyTime(0) == "just now" assert fuzzyTime(29) == "just now" assert fuzzyTime(30) == "a minute ago" assert fuzzyTime(89) == "a minute ago" assert fuzzyTime(90) == "2 minutes ago" assert fuzzyTime(149) == "2 minutes ago" assert fuzzyTime(151) == "3 minutes ago" assert fuzzyTime(3299) == "55 minutes ago" assert fuzzyTime(3300) == "an hour ago" assert fuzzyTime(5399) == "an hour ago" assert fuzzyTime(5400) == "2 hours ago" assert fuzzyTime(84599) == "23 hours ago" assert fuzzyTime(84600) == "a day ago" assert fuzzyTime(129599) == "a day ago" assert fuzzyTime(129600) == "2 days ago" assert fuzzyTime(561599) == "6 days ago" assert fuzzyTime(561600) == "a week ago" assert fuzzyTime(907199) == "a week ago" assert fuzzyTime(907200) == "2 weeks ago" assert fuzzyTime(2419199) == "4 weeks ago" assert fuzzyTime(2419200) == "a month ago" assert fuzzyTime(3887999) == "a month ago" assert fuzzyTime(3888000) == "2 months ago" assert fuzzyTime(29807999) == "11 months ago" assert fuzzyTime(29808000) == "a year ago" assert fuzzyTime(47336399) == "a year ago" assert fuzzyTime(47336400) == "2 years ago"