1import pytest 2 3from UM.Qt.Duration import Duration, DurationFormat 4 5test_data = [ 6 {"total_time": 22, "seconds": 22, "minutes": 0, "hours": 0, "days": 0}, 7 {"total_time": 60, "seconds": 0, "minutes": 1, "hours": 0, "days": 0}, 8 {"total_time": 3600, "seconds": 0, "minutes": 0, "hours": 1, "days": 0}, 9 {"total_time": 86400, "seconds": 0, "minutes": 0, "hours": 0, "days": 1}, 10 {"total_time": 90061, "seconds": 1, "minutes": 1, "hours": 1, "days": 1}, 11] 12 13@pytest.mark.parametrize("data", test_data) 14def test_durationCreation(data): 15 duration = Duration(data["total_time"]) 16 assert duration.days == data["days"] 17 assert duration.seconds == data["seconds"] 18 assert duration.minutes == data["minutes"] 19 assert duration.hours == data["hours"] 20 assert int(duration) == data["total_time"] 21 assert duration.valid 22 assert not duration.isTotalDurationZero 23 24def test_invalidDuration(): 25 duration = Duration() 26 assert not duration.valid 27 28 29def test_zeroDuration(): 30 zero_duration = Duration(0) 31 assert zero_duration.isTotalDurationZero 32 assert zero_duration.valid 33 34 35def test_negativeDuration(): 36 negative_duration = Duration(-10) 37 assert not negative_duration.valid 38 39 40def test_hugeDuration(): 41 duration = Duration(2147483648) 42 # Reaaaaaaly big numbers should be reset to zero because of python C++ conversion issues. 43 assert duration.isTotalDurationZero 44 45 46def test_getDisplayString(): 47 # We only test the ones that are not depending on translations. 48 assert Duration(1).getDisplayString(DurationFormat.Format.Seconds) == "1" 49 assert Duration(1).getDisplayString(9002) == "" # Unkown format. 50 assert Duration(1).getDisplayString(DurationFormat.Format.ISO8601) == "00:00:01" 51 assert Duration(86401).getDisplayString(DurationFormat.Format.ISO8601) == "24:00:01"