test/zhong_test.rb in zhong-0.1.3 vs test/zhong_test.rb in zhong-0.1.4

- old
+ new

@@ -1,7 +1,147 @@ -require 'minitest_helper' +require "test_helper" -class TestZhong < Minitest::Test +# Many At tests lifted from Clockwork (thanks Clockwork!) +class TestAt < Minitest::Test + def time_in_day(hour, minute, day = 0, sec = 0) + Time.new.beginning_of_week(:monday).change(hour: hour, min: minute, sec: sec) + day.days + end + + def test_16_20 + at = Zhong::At.parse("16:20", grace: 0) + + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 15)) + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 20)) + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 20, 0, 10)) + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 20, 0, 59)) + assert_equal time_in_day(16, 20, 1), at.next_at(time_in_day(16, 21)) + assert_equal time_in_day(16, 20, 1), at.next_at(time_in_day(16, 21, 0, 01)) + assert_equal time_in_day(16, 20, 2), at.next_at(time_in_day(16, 21, 1, 30)) + end + + def test_16_20_with_grace + at = Zhong::At.parse("16:20", grace: 5.minutes) + + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 21)) + assert_equal time_in_day(16, 20), at.next_at(time_in_day(16, 25)) + assert_equal time_in_day(16, 20, 1), at.next_at(time_in_day(16, 26)) + end + + def test_8_20_before + at = Zhong::At.parse("8:20") + + assert_equal time_in_day(8, 20), at.next_at(time_in_day(8, 15)) + assert_equal time_in_day(8, 20, 1), at.next_at(time_in_day(8, 21)) + end + + def test_two_star_20 + at = Zhong::At.parse("**:20") + + assert_equal time_in_day(8, 20), at.next_at(time_in_day(8, 15)) + assert_equal time_in_day(9, 20), at.next_at(time_in_day(9, 15)) + assert_equal time_in_day(10, 20), at.next_at(time_in_day(9, 45)) + end + + def test_one_star_20 + at = Zhong::At.parse("*:45") + + assert_equal time_in_day(8, 45), at.next_at(time_in_day(8, 35)) + assert_equal time_in_day(9, 45), at.next_at(time_in_day(9, 35)) + assert_equal time_in_day(10, 45), at.next_at(time_in_day(9, 50)) + end + + def test_one_star_20_with_grace + at = Zhong::At.parse("*:45", grace: 5.minutes) + + assert_equal time_in_day(8, 45), at.next_at(time_in_day(8, 35)) + assert_equal time_in_day(8, 45), at.next_at(time_in_day(8, 50)) + assert_equal time_in_day(9, 45), at.next_at(time_in_day(8, 51)) + assert_equal time_in_day(9, 45), at.next_at(time_in_day(9, 35)) + assert_equal time_in_day(10, 45), at.next_at(time_in_day(9, 55)) + end + + def test_16_two_stars + at = Zhong::At.parse("16:**") + + assert_equal time_in_day(16, 00), at.next_at(time_in_day(8, 45)) + assert_equal time_in_day(16, 00), at.next_at(time_in_day(10, 00)) + assert_equal time_in_day(16, 00), at.next_at(time_in_day(16, 00)) + assert_equal time_in_day(16, 01), at.next_at(time_in_day(16, 01)) + assert_equal time_in_day(16, 30), at.next_at(time_in_day(16, 30)) + assert_equal time_in_day(16, 59), at.next_at(time_in_day(16, 59)) + assert_equal time_in_day(16, 00, 1), at.next_at(time_in_day(17, 00)) + assert_equal time_in_day(16, 00, 1), at.next_at(time_in_day(23, 59)) + end + + def test_8_two_stars + at = Zhong::At.parse("8:**") + + assert_equal time_in_day(8, 00), at.next_at(time_in_day(3, 45)) + assert_equal time_in_day(8, 00), at.next_at(time_in_day(5, 00)) + assert_equal time_in_day(8, 00), at.next_at(time_in_day(8, 00)) + assert_equal time_in_day(8, 01), at.next_at(time_in_day(8, 01)) + assert_equal time_in_day(8, 30), at.next_at(time_in_day(8, 30)) + assert_equal time_in_day(8, 59), at.next_at(time_in_day(8, 59)) + assert_equal time_in_day(8, 00, 1), at.next_at(time_in_day(9, 00)) + assert_equal time_in_day(8, 00, 1), at.next_at(time_in_day(12, 59)) + end + + def test_saturday_12 + at = Zhong::At.parse("Saturday 12:00") + + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(12, 00)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(13, 00, 1)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(23, 59, 3)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(12, 00, 5)) + assert_equal time_in_day(12, 00, 12), at.next_at(time_in_day(12, 01, 5)) + assert_equal time_in_day(12, 00, 12), at.next_at(time_in_day(13, 01, 6, 01)) + end + + def test_sat_12 + at = Zhong::At.parse("sat 12:00") + + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(12, 00)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(13, 00, 1)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(23, 59, 3)) + assert_equal time_in_day(12, 00, 5), at.next_at(time_in_day(12, 00, 5)) + assert_equal time_in_day(12, 00, 12), at.next_at(time_in_day(12, 01, 5)) + assert_equal time_in_day(12, 00, 12), at.next_at(time_in_day(13, 01, 6, 01)) + end + + def test_tue_12_59 + at = Zhong::At.parse("tue 12:59") + + assert_equal time_in_day(12, 59, 1), at.next_at(time_in_day(7, 00)) + assert_equal time_in_day(12, 59, 1), at.next_at(time_in_day(12, 00, 1)) + assert_equal time_in_day(12, 59, 1), at.next_at(time_in_day(12, 59, 1)) + assert_equal time_in_day(12, 59, 8), at.next_at(time_in_day(13, 00, 1)) + assert_equal time_in_day(12, 59, 8), at.next_at(time_in_day(13, 01, 6, 01)) + end + + def test_thr_12_59 + at = Zhong::At.parse("thr 12:59") + + assert_equal time_in_day(12, 59, 3), at.next_at(time_in_day(7, 00)) + assert_equal time_in_day(12, 59, 3), at.next_at(time_in_day(12, 00, 3)) + assert_equal time_in_day(12, 59, 3), at.next_at(time_in_day(12, 59, 3)) + assert_equal time_in_day(12, 59, 10), at.next_at(time_in_day(13, 00, 3)) + assert_equal time_in_day(12, 59, 10), at.next_at(time_in_day(13, 01, 6, 01)) + end + + def test_invalid_time_32 + assert_raises Zhong::At::FailedToParse do + Zhong::At.parse("32:00") + end + end + + def test_invalid_multi_line_time_sat_12 + assert_raises Zhong::At::FailedToParse do + Zhong::At.parse("sat 12:00\nreally invalid time") + end + end +end + +class TestLibrary < Minitest::Test def test_that_it_has_a_version_number refute_nil ::Zhong::VERSION end end