|
1 | | -use bstr::ByteSlice; |
2 | | -use gix_date::{time::Sign, SecondsSinceUnixEpoch, Time}; |
| 1 | +use gix_date::Time; |
3 | 2 |
|
4 | 3 | mod baseline; |
5 | 4 | mod format; |
@@ -32,57 +31,114 @@ fn is_set() { |
32 | 31 | .is_set()); |
33 | 32 | } |
34 | 33 |
|
35 | | -#[test] |
36 | | -fn write_to() -> Result<(), Box<dyn std::error::Error>> { |
37 | | - for (time, expected) in [ |
38 | | - ( |
39 | | - Time { |
40 | | - seconds: SecondsSinceUnixEpoch::MAX, |
41 | | - offset: 0, |
42 | | - sign: Sign::Minus, |
43 | | - }, |
44 | | - "9223372036854775807 -0000", |
45 | | - ), |
46 | | - ( |
47 | | - Time { |
48 | | - seconds: SecondsSinceUnixEpoch::MIN, |
49 | | - offset: 0, |
50 | | - sign: Sign::Minus, |
51 | | - }, |
52 | | - "-9223372036854775808 -0000", |
53 | | - ), |
54 | | - ( |
55 | | - Time { |
56 | | - seconds: 500, |
57 | | - offset: 9000, |
58 | | - sign: Sign::Plus, |
59 | | - }, |
60 | | - "500 +0230", |
61 | | - ), |
62 | | - ( |
63 | | - Time { |
64 | | - seconds: 189009009, |
65 | | - offset: -36000, |
66 | | - sign: Sign::Minus, |
67 | | - }, |
68 | | - "189009009 -1000", |
69 | | - ), |
70 | | - ( |
71 | | - Time { |
72 | | - seconds: 0, |
73 | | - offset: 0, |
74 | | - sign: Sign::Minus, |
75 | | - }, |
76 | | - "0 -0000", |
77 | | - ), |
78 | | - ] { |
79 | | - let mut output = Vec::new(); |
80 | | - time.write_to(&mut output)?; |
81 | | - assert_eq!(output.as_bstr(), expected); |
82 | | - assert_eq!(time.size(), output.len()); |
| 34 | +mod write_to { |
| 35 | + use bstr::ByteSlice; |
| 36 | + use gix_date::time::Sign; |
| 37 | + use gix_date::{SecondsSinceUnixEpoch, Time}; |
| 38 | + |
| 39 | + #[test] |
| 40 | + fn invalid() { |
| 41 | + let time = Time { |
| 42 | + seconds: 0, |
| 43 | + offset: (100 * 60 * 60) + 30 * 60, |
| 44 | + sign: Sign::Plus, |
| 45 | + }; |
| 46 | + let err = time.write_to(&mut Vec::new()).unwrap_err(); |
| 47 | + assert_eq!(err.to_string(), "Cannot represent offsets larger than +-9900"); |
| 48 | + } |
83 | 49 |
|
84 | | - let actual = gix_date::parse(&output.as_bstr().to_string(), None).expect("round-trippable"); |
85 | | - assert_eq!(time, actual); |
| 50 | + #[test] |
| 51 | + fn valid_roundtrips() -> Result<(), Box<dyn std::error::Error>> { |
| 52 | + for (time, expected) in [ |
| 53 | + ( |
| 54 | + Time { |
| 55 | + seconds: SecondsSinceUnixEpoch::MAX, |
| 56 | + offset: 0, |
| 57 | + sign: Sign::Minus, |
| 58 | + }, |
| 59 | + "9223372036854775807 -0000", |
| 60 | + ), |
| 61 | + ( |
| 62 | + Time { |
| 63 | + seconds: SecondsSinceUnixEpoch::MIN, |
| 64 | + offset: 0, |
| 65 | + sign: Sign::Minus, |
| 66 | + }, |
| 67 | + "-9223372036854775808 -0000", |
| 68 | + ), |
| 69 | + ( |
| 70 | + Time { |
| 71 | + seconds: 500, |
| 72 | + offset: 9000, |
| 73 | + sign: Sign::Plus, |
| 74 | + }, |
| 75 | + "500 +0230", |
| 76 | + ), |
| 77 | + ( |
| 78 | + Time { |
| 79 | + seconds: 189009009, |
| 80 | + offset: -36000, |
| 81 | + sign: Sign::Minus, |
| 82 | + }, |
| 83 | + "189009009 -1000", |
| 84 | + ), |
| 85 | + ( |
| 86 | + Time { |
| 87 | + seconds: 0, |
| 88 | + offset: 0, |
| 89 | + sign: Sign::Minus, |
| 90 | + }, |
| 91 | + "0 -0000", |
| 92 | + ), |
| 93 | + ( |
| 94 | + Time { |
| 95 | + seconds: 0, |
| 96 | + offset: -24 * 60 * 60, |
| 97 | + sign: Sign::Minus, |
| 98 | + }, |
| 99 | + "0 -2400", |
| 100 | + ), |
| 101 | + ( |
| 102 | + Time { |
| 103 | + seconds: 0, |
| 104 | + offset: 24 * 60 * 60, |
| 105 | + sign: Sign::Plus, |
| 106 | + }, |
| 107 | + "0 +2400", |
| 108 | + ), |
| 109 | + ( |
| 110 | + Time { |
| 111 | + seconds: 0, |
| 112 | + offset: (25 * 60 * 60) + 30 * 60, |
| 113 | + sign: Sign::Plus, |
| 114 | + }, |
| 115 | + "0 +2530", |
| 116 | + ), |
| 117 | + ( |
| 118 | + Time { |
| 119 | + seconds: 0, |
| 120 | + offset: (-25 * 60 * 60) - 30 * 60, |
| 121 | + sign: Sign::Minus, |
| 122 | + }, |
| 123 | + "0 -2530", |
| 124 | + ), |
| 125 | + ( |
| 126 | + Time { |
| 127 | + seconds: 0, |
| 128 | + offset: (99 * 60 * 60) + 59 * 60, |
| 129 | + sign: Sign::Plus, |
| 130 | + }, |
| 131 | + "0 +9959", |
| 132 | + ), |
| 133 | + ] { |
| 134 | + let mut output = Vec::new(); |
| 135 | + time.write_to(&mut output)?; |
| 136 | + assert_eq!(output.as_bstr(), expected); |
| 137 | + assert_eq!(time.size(), output.len()); |
| 138 | + |
| 139 | + let actual = gix_date::parse(&output.as_bstr().to_string(), None).expect("round-trippable"); |
| 140 | + assert_eq!(time, actual); |
| 141 | + } |
| 142 | + Ok(()) |
86 | 143 | } |
87 | | - Ok(()) |
88 | 144 | } |
0 commit comments