(CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(SQ <'test date parsing and printing'>)} spids: [4] ) ] spids: [4] ) (C {(.)} {(./test-lib.sh)}) (Sentence child: (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TEST_DATE_NOW) op: Equal rhs: {(1251660000)} spids: [17] ) ] spids: [17] ) terminator: <Op_Semi ';'> ) (C {(export)} {(TEST_DATE_NOW)}) (FuncDef name: check_relative body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:t) op: Equal rhs: { (ArithSubPart anode: (ArithBinary op_id: Arith_Minus left: (ArithWord w:{($ VSub_Name '$TEST_DATE_NOW')}) right: (ArithWord w:{($ VSub_Number '$1')}) ) spids: [34 41] ) } spids: [33] ) ] spids: [33] ) (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Name '$t') (' -> ') ($ VSub_Number '$2'))}] redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expect)} spids:[52])] ) (C {(test_expect_) (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(success)}) spids: [57 61] ) } {(DQ ('relative date (') ($ VSub_Number '$2') (')'))} { (DQ ('\n') ('\ttest-date relative ') ($ VSub_Name '$t') (' >actual &&\n') ('\ttest_i18ncmp expect actual\n') ('\t') ) } ) ] spids: [30] ) spids: [26 29] ) (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'>)}) (FuncDef name: check_show body: (BraceGroup children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:format) op: Equal rhs: {($ VSub_Number '$1')} spids: [178] ) ] spids: [178] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:time) op: Equal rhs: {($ VSub_Number '$2')} spids: [182] ) ] spids: [182] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:expect) op: Equal rhs: {($ VSub_Number '$3')} spids: [186] ) ] spids: [186] ) (C {(test_expect_success)} {($ VSub_Number '$4')} {(DQ ('show date (') ($ VSub_Name '$format') (':') ($ VSub_Name '$time') (')'))} { (SQ <'\n'> <'\t\techo "$time -> $expect" >expect &&\n'> <'\t\ttest-date show:$format "$time" >actual &&\n'> <'\t\ttest_cmp expect actual\n'> <'\t'> ) } ) ] spids: [175] ) spids: [170 174] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:TIME) op: Equal rhs: {(SQ <'1466000000 +0200'>)} spids: [216] ) ] spids: [216] ) (C {(check_show)} {(iso8601)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'2016-06-15 16:13:20 +0200'>)}) (C {(check_show)} {(iso8601-strict)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'2016-06-15T16:13:20+02:00'>)}) (C {(check_show)} {(rfc2822)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'Wed, 15 Jun 2016 16:13:20 +0200'>)}) (C {(check_show)} {(short)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <2016-06-15>)}) (C {(check_show)} {(default)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'Wed Jun 15 16:13:20 2016 +0200'>)}) (C {(check_show)} {(raw)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'1466000000 +0200'>)}) (C {(check_show)} {(unix)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <1466000000>)}) (C {(check_show)} {(iso-local)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'2016-06-15 14:13:20 +0000'>)}) (C {(check_show)} {(raw-local)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <'1466000000 +0000'>)}) (C {(check_show)} {(unix-local)} {(DQ ($ VSub_Name '$TIME'))} {(SQ <1466000000>)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:FUTURE) op: Equal rhs: {(DQ ('5758122296 -0400'))} spids: [345] ) ] spids: [345] ) (C {(check_show)} {(iso)} {(DQ ($ VSub_Name '$FUTURE'))} {(DQ ('2152-06-19 18:24:56 -0400'))} {(LONG_IS_64BIT)} ) (C {(check_show)} {(iso-local)} {(DQ ($ VSub_Name '$FUTURE'))} {(DQ ('2152-06-19 22:24:56 +0000'))} {(LONG_IS_64BIT)} ) (FuncDef name: check_parse body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Number '$1') (' -> ') ($ VSub_Number '$2'))}] redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expect)} spids:[394])] ) (C {(test_expect_) (BracedVarSub token: <VSub_Number 4> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(success)}) spids: [399 403] ) } { (DQ ('parse date (') ($ VSub_Number '$1') (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id: VTest_ColonPlus arg_word: {(' TZ=') ($ VSub_Number '$3')} ) spids: [408 413] ) (')') ) } { (DQ ('\n') ('\tTZ=') (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{($ VSub_Name '$TZ')}) spids: [420 424] ) (" test-date parse '") ($ VSub_Number '$1') ("' >actual &&\n") ('\ttest_cmp expect actual\n') ('\t') ) } ) ] spids: [383] ) spids: [379 382] ) (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)}) (FuncDef name: check_approxidate body: (BraceGroup children: [ (SimpleCommand words: [{(echo)} {(DQ ($ VSub_Number '$1') (' -> ') ($ VSub_Number '$2') (' +0000'))}] redirects: [(Redir op_id:Redir_Great fd:16777215 arg_word:{(expect)} spids:[562])] ) (C {(test_expect_) (BracedVarSub token: <VSub_Number 3> suffix_op: (StringUnary op_id:VTest_ColonHyphen arg_word:{(success)}) spids: [567 571] ) } {(DQ ('parse approxidate (') ($ VSub_Number '$1') (')'))} { (DQ ('\n') ("\ttest-date approxidate '") ($ VSub_Number '$1') ("' >actual &&\n") ('\ttest_cmp expect actual\n') ('\t') ) } ) ] spids: [550] ) spids: [546 549] ) (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)}) ] )