134 lines
6.5 KiB
Perl
Executable File
134 lines
6.5 KiB
Perl
Executable File
#!/usr/bin/env perl
|
|
|
|
use strict;
|
|
use warnings;
|
|
use Test::More;
|
|
use Test::Deep;
|
|
use Test::MockTime qw( :all );
|
|
use DDG::Test::Goodie;
|
|
use DDG::Test::Location;
|
|
|
|
zci answer_type => 'date_math';
|
|
zci is_cached => 0;
|
|
|
|
sub build_structured_answer {
|
|
my ($result, $input) = @_;
|
|
return $result, structured_answer => {
|
|
meta => {
|
|
signal => 'high',
|
|
},
|
|
data => {
|
|
title => "$result",
|
|
subtitle => "$input",
|
|
},
|
|
templates => {
|
|
group => 'text',
|
|
},
|
|
};
|
|
}
|
|
|
|
sub build_test { test_zci(build_structured_answer(@_)) }
|
|
|
|
my @overjan = ('02 Feb 2012', '01 Jan 2012 + 32 days');
|
|
my @first_sec = ('02 Jan 2012', '01 Jan 2012 + 1 day');
|
|
|
|
set_fixed_time("2014-01-12T10:00:00");
|
|
|
|
sub location_test {
|
|
my ($package, %tests) = @_;
|
|
my $location = test_location('in');
|
|
my @location_tests;
|
|
while (my ($query, $test) = each %tests) {
|
|
push @location_tests, (
|
|
DDG::Request->new(
|
|
query_raw => $query,
|
|
location => $location) => $test);
|
|
};
|
|
|
|
return ddg_goodie_test($package, @location_tests);
|
|
}
|
|
|
|
|
|
location_test([ qw( DDG::Goodie::DateMath ) ],
|
|
# 2012 Jan tests
|
|
'Jan 1 2012 plus 32 days' => build_test(@overjan),
|
|
'January 1 2012 plus 32 days' => build_test(@overjan),
|
|
'January 1, 2012 plus 32 days' => build_test(@overjan),
|
|
'January 1st 2012 plus 32 days' => build_test(@overjan),
|
|
'32 days from January 1st 2012' => build_test(@overjan),
|
|
# Relative (to today)
|
|
'6 weeks ago' => build_test('01 Dec 2013', '6 weeks ago'),
|
|
'2 weeks from today' => build_test('26 Jan 2014', '12 Jan 2014 + 2 weeks'),
|
|
'in 3 weeks' => build_test('02 Feb 2014', 'In 3 weeks'),
|
|
'date today' => build_test('12 Jan 2014', 'Today'),
|
|
'January 1st plus 32 days' => build_test('02 Feb 2014', '01 Jan 2014 + 32 days'),
|
|
'5 minutes from now' => build_test('12 Jan 2014 15:35:00 IST', '12 Jan 2014 15:30:00 IST + 5 minutes'),
|
|
'in 5 minutes' => build_test('12 Jan 2014 15:35:00 IST', '12 Jan 2014 15:30:00 IST + 5 minutes'),
|
|
'in 5 minutes.' => build_test('12 Jan 2014 15:35:00 IST', '12 Jan 2014 15:30:00 IST + 5 minutes'),
|
|
'time in 5 minutes' => build_test('12 Jan 2014 15:35:00 IST', '12 Jan 2014 15:30:00 IST + 5 minutes'),
|
|
'twelve seconds ago' => build_test('12 Jan 2014 15:29:48 IST', '12 Jan 2014 15:30:00 IST - 12 seconds'),
|
|
'01 Jan + 12 hours' => build_test('01 Jan 2014 12:00:00 IST', '01 Jan 2014 00:00:00 IST + 12 hours'),
|
|
'date today plus 24 hours' => build_test('13 Jan 2014 15:30:00 IST', '12 Jan 2014 15:30:00 IST + 24 hours'),
|
|
# time form
|
|
'time now' => build_test('12 Jan 2014 15:30:00 IST', 'Now'),
|
|
'time 3 days ago' => build_test('09 Jan 2014 15:30:00 IST', '3 days ago'),
|
|
# Specifying time
|
|
'01 Jan 2012 00:05:00 - 5 minutes' => build_test('01 Jan 2012 00:00:00 IST', '01 Jan 2012 00:05:00 IST - 5 minutes'),
|
|
'03 Mar 2015 07:07:07 GMT + 12 hours' => build_test('03 Mar 2015 19:07:07 UTC', '03 Mar 2015 07:07:07 UTC + 12 hours'),
|
|
# Misc
|
|
'1 jan 2014 plus 2 weeks' => build_test('15 Jan 2014', '01 Jan 2014 + 2 weeks'),
|
|
'2nd Jan 2013 - 3000 seconds' => build_test('01 Jan 2013 23:10:00 IST', '02 Jan 2013 00:00:00 IST - 3,000 seconds'),
|
|
'2nd Jan 2013 subtract 3000 seconds' => build_test('01 Jan 2013 23:10:00 IST', '02 Jan 2013 00:00:00 IST - 3,000 seconds'),
|
|
# / form
|
|
'1/1/2012 plus 32 days' => build_test(@overjan),
|
|
'1/1/2012 add 5 weeks' => build_test('05 Feb 2012', '01 Jan 2012 + 5 weeks'),
|
|
'1/1/2012 PlUs 5 months' => build_test('01 Jun 2012', '01 Jan 2012 + 5 months'),
|
|
'1/1/2012 PLUS 5 years' => build_test('01 Jan 2017', '01 Jan 2012 + 5 years'),
|
|
'1 day from 1/1/2012' => build_test(@first_sec),
|
|
'1/1/2012 plus 1 day' => build_test(@first_sec),
|
|
'1/1/2012 plus 1 days' => build_test(@first_sec),
|
|
'01/01/2012 + 1 day' => build_test(@first_sec),
|
|
'1/1/2012 minus ten days' => build_test('22 Dec 2011', '01 Jan 2012 - 10 days'),
|
|
'1/1/2012 + 1 second' => build_test('01 Jan 2012 00:00:01 IST', '01 Jan 2012 00:00:00 IST + 1 second'),
|
|
# Plurals
|
|
'3 days ago + 1 second' => build_test('09 Jan 2014 15:30:01 IST', '09 Jan 2014 15:30:00 IST + 1 second'),
|
|
'3 days ago + 1 seconds' => build_test('09 Jan 2014 15:30:01 IST', '09 Jan 2014 15:30:00 IST + 1 second'),
|
|
# Feb 29
|
|
'Jan 1st 2012 + 59 days' => build_test('29 Feb 2012', '01 Jan 2012 + 59 days'),
|
|
'Jan 1st 2013 + 59 days' => build_test('01 Mar 2013', '01 Jan 2013 + 59 days'),
|
|
# Casing
|
|
'3 Years Ago' => build_test('12 Jan 2011', '3 years ago'),
|
|
'Time Now + 3 Minutes' => build_test('12 Jan 2014 15:33:00 IST', '12 Jan 2014 15:30:00 IST + 3 minutes'),
|
|
# With wrapping
|
|
'What time will it be in 3 minutes' => build_test('12 Jan 2014 15:33:00 IST', '12 Jan 2014 15:30:00 IST + 3 minutes'),
|
|
'What is the time in 3 minutes' => build_test('12 Jan 2014 15:33:00 IST', '12 Jan 2014 15:30:00 IST + 3 minutes'),
|
|
'What was the time 3 minutes ago' => build_test('12 Jan 2014 15:27:00 IST', '12 Jan 2014 15:30:00 IST - 3 minutes'),
|
|
'What date will it be in 3 days' => build_test('15 Jan 2014', 'In 3 days'),
|
|
'What will the date be in 3 days?' => build_test('15 Jan 2014', 'In 3 days'),
|
|
'What date is it in 3 days' => build_test('15 Jan 2014', 'In 3 days'),
|
|
'What time was it 3 days ago' => build_test('09 Jan 2014 15:30:00 IST', '3 days ago'),
|
|
'What date was it 3 days ago' => build_test('09 Jan 2014', '3 days ago'),
|
|
'What date was it 3 days ago?' => build_test('09 Jan 2014', '3 days ago'),
|
|
'What day was it 3 days ago?' => build_test('09 Jan 2014', '3 days ago'),
|
|
# After/before
|
|
'3 days before 21st March' => build_test('18 Mar 2014', '21 Mar 2014 - 3 days'),
|
|
'3 days after 21st March' => build_test('24 Mar 2014', '21 Mar 2014 + 3 days'),
|
|
'two hours before now' => build_test('12 Jan 2014 13:30:00 IST', '12 Jan 2014 15:30:00 IST - 2 hours'),
|
|
# Specified relative
|
|
'date 21st Jan' => undef,
|
|
'date January 1st' => undef,
|
|
'time 22nd April' => undef,
|
|
'date 3rd Jan 2015' => undef,
|
|
'Jan 1st 2012' => undef,
|
|
# Should not trigger
|
|
'yesterday' => undef,
|
|
'today' => undef,
|
|
'five years' => undef,
|
|
'two months' => undef,
|
|
'2 months' => undef,
|
|
'5 years' => undef,
|
|
'time ago' => undef,
|
|
);
|
|
|
|
done_testing;
|