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"