00001 #!/usr/bin/php
00002 <?PHP
00003 # Unit tester for Axis--Date object
00004
00005 require_once('Axis--Date--crh.php');
00006
00007 # Adds leading zeros to months and days
00008 function lz($data)
00009 {
00010 return (($data<10)?"0":"").$data ;
00011 }
00012
00013
00014 # FormatDate -- Generate one of the formats that Axis--Date should be able to parse
00015 # $FmtNo -- a format number :
00016 # ( 0) 1999-9
00017 # ( 1) Sep-1999
00018 # ( 2) Sep 1999
00019 # ( 3) 199909
00020 # ( 4) 1999-9-19
00021 # ( 5) 9-19-1999
00022 # ( 6) 19-9-1999
00023 # ( 7) Sep 9 1999
00024 # ( 8) September 9th, 1999
00025 # ( 9) 9/19/99
00026 # (10) 9-19-99
00027 # (11) 19990919
00028 # (12) 09-Sep-1999
00029 # (13) 09 Sep 1999
00030 # (14) c1999
00031
00032 function FormatDate( $FmtNo, $Year, $Month, $Day )
00033 {
00034 $MonthNames = array (
00035 1 => "January",
00036 2 => "February",
00037 3 => "March",
00038 4 => "April",
00039 5 => "May",
00040 6 => "June",
00041 7 => "July",
00042 8 => "August",
00043 9 => "September",
00044 10 => "October",
00045 11 => "November",
00046 12 => "December"
00047 );
00048
00049 $LongMonthName = $MonthNames[$Month];
00050 $ShortMonthName = substr($LongMonthName,0,3);
00051
00052 # Suffix for long-form month numbers
00053 $Sfx = ($Day % 10) == 1 ? "st" :
00054 ($Day % 10) == 2 ? "nd" :
00055 ($Day % 10) == 3 ? "rd" : "th";
00056 $Values = array (
00057 $Year."-".$Month,
00058 $ShortMonthName."-".$Year,
00059 $ShortMonthName." ".$Year,
00060 $Year.lz($Month),
00061 $Year."-".$Month."-".$Day,
00062 $Month."-".$Day."-".$Year,
00063 $Day."-".$Month."-".$Year,
00064 $ShortMonthName." ".$Day." ".$Year,
00065 $LongMonthName." ".$Day.$Sfx.", ".$Year,
00066 $Month."/".$Day."/".substr($Year,2),
00067 $Month."-".$Day."-".substr($Year,2),
00068 $Year.lz($Month).lz($Day),
00069 lz($Day)."-".$ShortMonthName."-".$Year,
00070 lz($Day)." ".$ShortMonthName." ".$Year,
00071 "c".$Year,
00072 );
00073
00074 return $Values[$FmtNo];
00075 }
00076
00077 $NumberOfFormats = 13;
00078
00079 $ExitStatus = 0 ;
00080
00081 # We want to test years both above and below 2000
00082 foreach ( array(1999,2001) as $Year )
00083 {
00084 # Test each month, to make sure that none of the long/short name parsing is
00085 # messed up for a particular month.
00086 for ( $Month = 1; $Month <= 12; $Month++ )
00087 {
00088 # We don't need to test every day of every month
00089 # 1-4 will have different suffixes in the long-format (1st, 2nd, etc)
00090 # so those should be tested.
00091 # We should be testing both single and double-digit dates
00092 # 1-4,15 should exercise all the important parts.
00093 foreach( array(1,2,3,4,15,21,22,23) as $Day )
00094 {
00095 # Index through each of the formats.
00096 for ( $Ix=0; $Ix<=$NumberOfFormats; $Ix++)
00097 {
00098
00099 # Try parsing a single date:
00100 $TestValue = FormatDate( $Ix, $Year, $Month, $Day );
00101 $TestDate = new Date($TestValue);
00102 $Parsed = $TestDate->BeginDate();
00103
00104 # Construct the expected result
00105 $Expected = $Year."-".lz($Month)."-".(($Ix<=3)?"00":lz($Day));
00106 if( $Parsed != $Expected )
00107 {
00108 # We expect to fail on D-M-Y when D<=12, because we can't
00109 # Distinguish that from M-D-Y
00110 if( $Ix == 6 && $Day <= 12 )
00111 {
00112 print("Exfail Parsing '".$TestValue."': "
00113 ."Expected '".$Expected."' but got '".$Parsed."'\n");
00114 }
00115 else
00116 {
00117 $ExitStatus = 1 ;
00118 print("FAIL Parsing '".$TestValue."': "
00119 ."Expected '".$Expected."' but got '".$Parsed."'\n");
00120 }
00121 }
00122
00123 # Now for a date range
00124 # Try an end date in each possible format
00125 # We'll go from the starting date till 2 years later.
00126 for( $Ix2 = 0; $Ix2<=$NumberOfFormats; $Ix2++ )
00127 {
00128 $TestValue = FormatDate( $Ix, $Year, $Month, $Day ) . " - " .
00129 FormatDate( $Ix2, $Year+2, $Month, $Day );
00130 $TestDate = new Date($TestValue);
00131 $Parsed = $TestDate->BeginDate()." - ".$TestDate->EndDate();
00132
00133 $Expected = $Year."-".lz($Month)."-".(($Ix <=3)?"00":lz($Day))." - ".
00134 ($Year+2)."-".lz($Month)."-".(($Ix2<=3)?"00":lz($Day));
00135 if( $Parsed != $Expected )
00136 {
00137 if( ($Ix == 6 || $Ix2 == 6 ) && $Day <= 12 )
00138 {
00139 # Again, expected failures on D-M-Y when D<=12
00140 print("Exfail Parsing '".$TestValue."': "
00141 ."Expected '".$Expected."' but got '".$Parsed."'\n");
00142 }
00143 else
00144 {
00145 $ExitStatus = 1 ;
00146 print("FAIL Parsing '".$TestValue."': "
00147 ."Expected '".$Expected."' but got '".$Parsed."'\n");
00148 }
00149 }
00150 }
00151 }
00152 }
00153 }
00154 }
00155
00156 # If any tests failed, exit with an error.
00157 exit ($ExitStatus) ;
00158 ?>