RegressionTests__TimeAndDateTest.st
changeset 1886 6deb0e9fa0d2
parent 1652 df3c6ccdb0e7
child 1924 cc644916d874
--- a/RegressionTests__TimeAndDateTest.st	Wed Oct 18 15:01:01 2017 +0200
+++ b/RegressionTests__TimeAndDateTest.st	Thu Nov 09 10:43:21 2017 +0100
@@ -12,44 +12,98 @@
 
 !TimeAndDateTest methodsFor:'Testing'!
 
-test_01_ReadingTimes
+test_01a_ReadingTimes
+    self assert:(Time readFrom:'0:00'    ) = (Time hours:0 minutes:0 seconds:0).
+    self assert:(Time readFrom:'2:00'    ) = (Time hours:2 minutes:0 seconds:0).
+    self assert:(Time readFrom:'12:00'   ) = (Time hours:12 minutes:0 seconds:0).
+    self assert:(Time readFrom:'14:00'   ) = (Time hours:14 minutes:0 seconds:0).
+    self assert:(Time readFrom:'23:00'   ) = (Time hours:23 minutes:0 seconds:0).
 
-     self assert:(Time readFrom:'0:00'    ) = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'2:00'    ) = (Time hours:2 minutes:0 seconds:0).
-     self assert:(Time readFrom:'12:00'   ) = (Time hours:12 minutes:0 seconds:0).
-     self assert:(Time readFrom:'14:00'   ) = (Time hours:14 minutes:0 seconds:0).
-     self assert:(Time readFrom:'23:00'   ) = (Time hours:23 minutes:0 seconds:0).
-     self assert:(Time readFrom:'24:00'   ) = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'2:30 am' ) = (Time hours:2 minutes:30 seconds:0).
-     self assert:(Time readFrom:'2:30 pm' ) = (Time hours:14 minutes:30 seconds:0).
-     self assert:(Time readFrom:'14'      ) = (Time hours:14 minutes:0 seconds:0).
-     self assert:(Time readFrom:'2 am'    ) = (Time hours:2 minutes:0 seconds:0).
-     self assert:(Time readFrom:'2 pm'    ) = (Time hours:14 minutes:0 seconds:0).
-     self assert:(Time readFrom:'12:05 pm') = (Time hours:12 minutes:5 seconds:0).
-     self assert:(Time readFrom:'12:06 am') = (Time hours:0 minutes:6 seconds:0).
+    self assert:(Time readFrom:'18:22:00') = (Time hours:18 minutes:22 seconds:0).
+    self assert:(Time readFrom:'14:00:11') = (Time hours:14 minutes:0 seconds:11).
+    self assert:(Time readFrom:'7:00:11' ) = (Time hours:7 minutes:0 seconds:11).
+    self assert:(Time readFrom:'0:00:00' ) = (Time hours:0 minutes:0 seconds:0).
+    self assert:(Time readFrom:'12:00:00') = (Time hours:12 minutes:0 seconds:0).
+    self assert:(Time readFrom:'0:00:00' ) = (Time hours:0 minutes:0 seconds:0).
+
+    self assert:(Time readFrom:'14'      ) = (Time hours:14 minutes:0 seconds:0).
+
+    self assert:(Time readFrom:'2 am'    ) = (Time hours:2 minutes:0 seconds:0).
+    self assert:(Time readFrom:'2 pm'    ) = (Time hours:14 minutes:0 seconds:0).
 
-     self assert:(Time readFrom:'18:22:00') = (Time hours:18 minutes:22 seconds:0).
-     self assert:(Time readFrom:'14:00:11') = (Time hours:14 minutes:0 seconds:11).
-     self assert:(Time readFrom:'7:00:11' ) = (Time hours:7 minutes:0 seconds:11).
-     self assert:(Time readFrom:'24:00:00') = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'0:00:00' ) = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'12:00:00') = (Time hours:12 minutes:0 seconds:0).
-     self assert:(Time readFrom:'0:00:00' ) = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'6:22:00 pm' ) = (Time hours:18 minutes:22 seconds:0).
-     self assert:(Time readFrom:'2:00:11 pm' ) = (Time hours:14 minutes:0 seconds:11).
-     self assert:(Time readFrom:'7:00:11 am' ) = (Time hours:7 minutes:0 seconds:11).
-     self assert:(Time readFrom:'12:00:00 am') = (Time hours:0 minutes:0 seconds:0).
-     self assert:(Time readFrom:'0:00:00 am' ) = (Time hours:0 minutes:0 seconds:0).
-     self should:[ Time readFrom:'24:00:00 am' ] raise:TimeConversionError.
-     self assert:(Time readFrom:'12:00:00 pm') = (Time hours:12 minutes:0 seconds:0).
-     self assert:(Time readFrom:'0:00:00 pm' onError:'invalid') = 'invalid'.
-     self should:[ Time readFrom:'24:00:00 pm' ] raise:TimeConversionError.
+    self assert:(Time readFrom:'2:30 am' ) = (Time hours:2 minutes:30 seconds:0).
+    self assert:(Time readFrom:'2:30 pm' ) = (Time hours:14 minutes:30 seconds:0).
+    self assert:(Time readFrom:'12:05 pm') = (Time hours:12 minutes:5 seconds:0).
+    self assert:(Time readFrom:'12:06 am') = (Time hours:0 minutes:6 seconds:0).
+
+    self assert:(Time readFrom:'6:22:00 pm' ) = (Time hours:18 minutes:22 seconds:0).
+    self assert:(Time readFrom:'2:00:11 pm' ) = (Time hours:14 minutes:0 seconds:11).
+    self assert:(Time readFrom:'7:00:11 am' ) = (Time hours:7 minutes:0 seconds:11).
+    self assert:(Time readFrom:'12:00:00 am') = (Time hours:0 minutes:0 seconds:0).
+    self assert:(Time readFrom:'0:00:00 am' ) = (Time hours:0 minutes:0 seconds:0).
+    self assert:(Time readFrom:'12:00:00 pm') = (Time hours:12 minutes:0 seconds:0).
+    self assert:(Time readFrom:'0:00:00 pm' onError:'invalid') = 'invalid'.
+
+    self assert:(Time readFrom:'24:00'   ) = (Time hours:0 minutes:0 seconds:0).
+    self assert:(Time readFrom:'24:00:00') = (Time hours:0 minutes:0 seconds:0).
+
+    self should:[Time readFrom:'24:00:00 am' ] raise:TimeConversionError.
+    self should:[Time readFrom:'24:00:00 pm' ] raise:TimeConversionError.
 
     "
-     self new test_01_Reading
+     self new test_01a_ReadingTimes
+    "
+
+    "Created: / 09-11-2017 / 10:17:37 / cg"
+!
+
+test_01b_ReadingTimeDurations
+    self assert:(TimeDuration readFrom:'0:00'    ) = (TimeDuration hours:0 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'2:00'    ) = (TimeDuration hours:2 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'12:00'   ) = (TimeDuration hours:12 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'14:00'   ) = (TimeDuration hours:14 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'23:00'   ) = (TimeDuration hours:23 minutes:0 seconds:0).
+
+    self assert:(TimeDuration readFrom:'18:22:00') = (TimeDuration hours:18 minutes:22 seconds:0).
+    self assert:(TimeDuration readFrom:'14:00:11') = (TimeDuration hours:14 minutes:0 seconds:11).
+    self assert:(TimeDuration readFrom:'7:00:11' ) = (TimeDuration hours:7 minutes:0 seconds:11).
+    self assert:(TimeDuration readFrom:'0:00:00' ) = (TimeDuration hours:0 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'12:00:00') = (TimeDuration hours:12 minutes:0 seconds:0).
+    self assert:(TimeDuration readFrom:'0:00:00' ) = (TimeDuration hours:0 minutes:0 seconds:0).
+
+    self assert:(TimeDuration readFrom:'14'      ) = (TimeDuration hours:0 minutes:0 seconds:14).
+
+    "
+     self new test_01b_ReadingTimeDurations
     "
 
-    "Modified: / 27-07-2017 / 20:49:38 / mawalch"
+    "Created: / 09-11-2017 / 10:16:58 / cg"
+!
+
+test_01c_ReadingTimeStamps
+    self assert:(Timestamp readFrom:'2017-11-09 10:18:03.236') = (Timestamp year:2017 month:11 day:9 hour:10 minute:18 second:3 millisecond:236).
+
+    "/ standard format
+    self assert:(Timestamp readFrom:'2017-11-09') = (Timestamp year:2017 month:11 day:9 hour:0 minute:0 second:0).
+
+    "/ US format
+    self assert:(Timestamp readFrom:'12/09/2017') = (Timestamp year:2017 month:12 day:9 hour:0 minute:0 second:0).
+
+    "/ european format
+    self assert:(Timestamp readFrom:'9.11.2017') = (Timestamp year:2017 month:11 day:9 hour:0 minute:0 second:0).
+
+    "/ explicit format
+    self assert:(Timestamp readFrom:'9-nov-2017') = (Timestamp year:2017 month:11 day:9 hour:0 minute:0 second:0).
+    "/ explicit format
+    self assert:(Timestamp readFrom:'9. nov 2017') = (Timestamp year:2017 month:11 day:9 hour:0 minute:0 second:0).
+    "/ explicit format
+    self assert:(Timestamp readFrom:'9 nov 2017') = (Timestamp year:2017 month:11 day:9 hour:0 minute:0 second:0).
+
+    "
+     self new test_01c_ReadingTimeStamps
+    "
+
+    "Created: / 09-11-2017 / 10:19:19 / cg"
 !
 
 test_02_ReadingDates
@@ -743,6 +797,39 @@
     "
      self new test_16_readingOtherFormats
     "
+!
+
+test_17_readingBrokenStrings
+    "endless loop happened with:
+        Timestamp readFrom:'0' onError:#foo
+    "
+    
+    #(
+        ''
+        '0'
+        '1'
+        '1-'
+        '1-1'
+        '1-1-'
+        '1-1-1 10'
+        '0-0-0'
+    ) do:[:eachBadString |    
+        | ts |
+
+        "/ should not run into an endless loop
+        [
+            ts := Timestamp readFrom:eachBadString onError:#foo.
+        ] valueWithTimeout:(50 milliseconds).
+    
+        self assert: (ts notNil) description:'timestamp reading leads to endless loop'.
+        self assert: ts == #foo.
+    ].
+    
+    "
+     self new test_17_readingBrokenStrings
+    "
+
+    "Created: / 09-11-2017 / 10:00:30 / cg"
 ! !
 
 !TimeAndDateTest class methodsFor:'documentation'!