(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: {(SQ <'test date parsing and printing'>)} spids: [4] ) ] ) (C {<.>} {<'./test-lib.sh'>}) (command.CommandList children: [ (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TEST_DATE_NOW) op: assign_op.Equal rhs: {<1251660000>} spids: [17] ) ] ) terminator: <Id.Op_Semi _> ) (C {<export>} {<TEST_DATE_NOW>}) ] ) (command.ShFunction name: check_relative body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:t) op: assign_op.Equal rhs: { (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Minus left: {($ Id.VSub_DollarName '$TEST_DATE_NOW')} right: {($ Id.VSub_Number '$1')} ) ) } spids: [33] ) ] ) (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_DollarName '$t') <' -> '> ($ Id.VSub_Number '$2'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (C {<test_expect_> (braced_var_sub token: <Id.VSub_Number 3> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<success>}) ) } {(DQ <'relative date ('> ($ Id.VSub_Number '$2') <')'>)} { (DQ <'\n'> <'\ttest-date relative '> ($ Id.VSub_DollarName '$t') <' >actual &&\n'> <'\ttest_i18ncmp expect actual\n'> <'\t'> ) } ) ] ) ) (C {<check_relative>} {<5>} {(SQ <'5 seconds ago'>)}) (C {<check_relative>} {<300>} {(SQ <'5 minutes ago'>)}) (C {<check_relative>} {<18000>} {(SQ <'5 hours ago'>)}) (C {<check_relative>} {<432000>} {(SQ <'5 days ago'>)}) (C {<check_relative>} {<1728000>} {(SQ <'3 weeks ago'>)}) (C {<check_relative>} {<13000000>} {(SQ <'5 months ago'>)}) (C {<check_relative>} {<37500000>} {(SQ <'1 year, 2 months ago'>)}) (C {<check_relative>} {<55188000>} {(SQ <'1 year, 9 months ago'>)}) (C {<check_relative>} {<630000000>} {(SQ <'20 years ago'>)}) (C {<check_relative>} {<31449600>} {(SQ <'12 months ago'>)}) (C {<check_relative>} {<62985600>} {(SQ <'2 years ago'>)}) (command.ShFunction name: check_show body: (BraceGroup children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:format) op: assign_op.Equal rhs: {($ Id.VSub_Number '$1')} spids: [178] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:time) op: assign_op.Equal rhs: {($ Id.VSub_Number '$2')} spids: [182] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:expect) op: assign_op.Equal rhs: {($ Id.VSub_Number '$3')} spids: [186] ) ] ) (C {<test_expect_success>} {($ Id.VSub_Number '$4')} { (DQ <'show date ('> ($ Id.VSub_DollarName '$format') <':'> ($ Id.VSub_DollarName '$time') <')'> ) } { (SQ <'\n'> <'\t\techo "$time -> $expect" >expect &&\n'> <'\t\ttest-date show:$format "$time" >actual &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t'> ) } ) ] ) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:TIME) op: assign_op.Equal rhs: {(SQ <'1466000000 +0200'>)} spids: [216] ) ] ) (C {<check_show>} {<iso8601>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'2016-06-15 16:13:20 +0200'>)} ) (C {<check_show>} {<iso8601-strict>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'2016-06-15T16:13:20+02:00'>)} ) (C {<check_show>} {<rfc2822>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'Wed, 15 Jun 2016 16:13:20 +0200'>)} ) (C {<check_show>} {<short>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <2016-06-15>)}) (C {<check_show>} {<default>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'Wed Jun 15 16:13:20 2016 +0200'>)} ) (C {<check_show>} {<raw>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'1466000000 +0200'>)}) (C {<check_show>} {<unix>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <1466000000>)}) (C {<check_show>} {<iso-local>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'2016-06-15 14:13:20 +0000'>)} ) (C {<check_show>} {<raw-local>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <'1466000000 +0000'>)}) (C {<check_show>} {<unix-local>} {(DQ ($ Id.VSub_DollarName '$TIME'))} {(SQ <1466000000>)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:FUTURE) op: assign_op.Equal rhs: {(DQ <'5758122296 -0400'>)} spids: [345] ) ] ) (C {<check_show>} {<iso>} {(DQ ($ Id.VSub_DollarName '$FUTURE'))} {(DQ <'2152-06-19 18:24:56 -0400'>)} {<LONG_IS_64BIT>} ) (C {<check_show>} {<iso-local>} {(DQ ($ Id.VSub_DollarName '$FUTURE'))} {(DQ <'2152-06-19 22:24:56 +0000'>)} {<LONG_IS_64BIT>} ) (command.ShFunction name: check_parse body: (BraceGroup children: [ (command.Simple words: [{<echo>} {(DQ ($ Id.VSub_Number '$1') <' -> '> ($ Id.VSub_Number '$2'))}] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (C {<test_expect_> (braced_var_sub token: <Id.VSub_Number 4> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<success>}) ) } { (DQ <'parse date ('> ($ Id.VSub_Number '$1') (braced_var_sub token: <Id.VSub_Number 3> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonPlus ':+'> arg_word: {<' TZ='> ($ Id.VSub_Number '$3')} ) ) <')'> ) } { (DQ <'\n'> <'\tTZ='> (braced_var_sub token: <Id.VSub_Number 3> suffix_op: (suffix_op.Unary tok: <Id.VTest_ColonHyphen ':-'> arg_word: {($ Id.VSub_DollarName '$TZ')} ) ) <' test-date parse \''> ($ Id.VSub_Number '$1') <'\' >actual &&\n'> <'\ttest_cmp expect actual\n'> <'\t'> ) } ) ] ) ) (C {<check_parse>} {<2008>} {<bad>}) (C {<check_parse>} {<2008-02>} {<bad>}) (C {<check_parse>} {<2008-02-14>} {<bad>}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45'>)} {(SQ <'2008-02-14 20:30:45 +0000'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -0500'>)} {(SQ <'2008-02-14 20:30:45 -0500'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -0015'>)} {(SQ <'2008-02-14 20:30:45 -0015'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -5'>)} {(SQ <'2008-02-14 20:30:45 +0000'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -5:'>)} {(SQ <'2008-02-14 20:30:45 +0000'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -05'>)} {(SQ <'2008-02-14 20:30:45 -0500'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -:30'>)} {(SQ <'2008-02-14 20:30:45 +0000'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45 -05:00'>)} {(SQ <'2008-02-14 20:30:45 -0500'>)}) (C {<check_parse>} {(SQ <'2008-02-14 20:30:45'>)} {(SQ <'2008-02-14 20:30:45 -0500'>)} {<EST5>}) (command.ShFunction name: check_approxidate body: (BraceGroup children: [ (command.Simple words: [ {<echo>} {(DQ ($ Id.VSub_Number '$1') <' -> '> ($ Id.VSub_Number '$2') <' +0000'>)} ] redirects: [(redir op:<Id.Redir_Great '>'> loc:(redir_loc.Fd fd:1) arg:{<expect>})] do_fork: T ) (C {<test_expect_> (braced_var_sub token: <Id.VSub_Number 3> suffix_op: (suffix_op.Unary tok:<Id.VTest_ColonHyphen ':-'> arg_word:{<success>}) ) } {(DQ <'parse approxidate ('> ($ Id.VSub_Number '$1') <')'>)} { (DQ <'\n'> <'\ttest-date approxidate \''> ($ Id.VSub_Number '$1') <'\' >actual &&\n'> <'\ttest_cmp expect actual\n'> <'\t'> ) } ) ] ) ) (C {<check_approxidate>} {<now>} {(SQ <'2009-08-30 19:20:00'>)}) (C {<check_approxidate>} {(SQ <'5 seconds ago'>)} {(SQ <'2009-08-30 19:19:55'>)}) (C {<check_approxidate>} {<5.seconds.ago>} {(SQ <'2009-08-30 19:19:55'>)}) (C {<check_approxidate>} {<10.minutes.ago>} {(SQ <'2009-08-30 19:10:00'>)}) (C {<check_approxidate>} {<yesterday>} {(SQ <'2009-08-29 19:20:00'>)}) (C {<check_approxidate>} {<3.days.ago>} {(SQ <'2009-08-27 19:20:00'>)}) (C {<check_approxidate>} {<3.weeks.ago>} {(SQ <'2009-08-09 19:20:00'>)}) (C {<check_approxidate>} {<3.months.ago>} {(SQ <'2009-05-30 19:20:00'>)}) (C {<check_approxidate>} {<2.years.3.months.ago>} {(SQ <'2007-05-30 19:20:00'>)}) (C {<check_approxidate>} {(SQ <'6am yesterday'>)} {(SQ <'2009-08-29 06:00:00'>)}) (C {<check_approxidate>} {(SQ <'6pm yesterday'>)} {(SQ <'2009-08-29 18:00:00'>)}) (C {<check_approxidate>} {(SQ <'3:00'>)} {(SQ <'2009-08-30 03:00:00'>)}) (C {<check_approxidate>} {(SQ <'15:00'>)} {(SQ <'2009-08-30 15:00:00'>)}) (C {<check_approxidate>} {(SQ <'noon today'>)} {(SQ <'2009-08-30 12:00:00'>)}) (C {<check_approxidate>} {(SQ <'noon yesterday'>)} {(SQ <'2009-08-29 12:00:00'>)}) (C {<check_approxidate>} {(SQ <'last tuesday'>)} {(SQ <'2009-08-25 19:20:00'>)}) (C {<check_approxidate>} {(SQ <'July 5th'>)} {(SQ <'2009-07-05 19:20:00'>)}) (C {<check_approxidate>} {(SQ <'06/05/2009'>)} {(SQ <'2009-06-05 19:20:00'>)}) (C {<check_approxidate>} {(SQ <06.05.2009>)} {(SQ <'2009-05-06 19:20:00'>)}) (C {<check_approxidate>} {(SQ <'Jun 6, 5AM'>)} {(SQ <'2009-06-06 05:00:00'>)}) (C {<check_approxidate>} {(SQ <'5AM Jun 6'>)} {(SQ <'2009-06-06 05:00:00'>)}) (C {<check_approxidate>} {(SQ <'6AM, June 7, 2009'>)} {(SQ <'2009-06-07 06:00:00'>)}) (C {<check_approxidate>} {(SQ <2008-12-01>)} {(SQ <'2008-12-01 19:20:00'>)}) (C {<check_approxidate>} {(SQ <2009-12-01>)} {(SQ <'2009-12-01 19:20:00'>)}) (C {<test_done>}) ] )