Skip to content

Instantly share code, notes, and snippets.

@madrobby
Created October 25, 2011 15:45
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madrobby/1313203 to your computer and use it in GitHub Desktop.
Save madrobby/1313203 to your computer and use it in GitHub Desktop.
Freckle accepted time formats (in API)
require File.expand_path('../../test_helper', __FILE__)
describe Freckle::Time do
it "should parse hh:mm" do
assert_equal 15, Freckle::Time.parse(':15')
assert_equal 15, Freckle::Time.parse('0:15')
assert_equal 60, Freckle::Time.parse('1:00')
assert_equal 60, Freckle::Time.parse('01:00')
assert_equal 660, Freckle::Time.parse('11:00')
assert_equal 150, Freckle::Time.parse('2:30')
assert_equal 165, Freckle::Time.parse('2:45')
end
it "should choose between minutes and hours" do
assert_equal 15, Freckle::Time.parse('15')
assert_equal 60, Freckle::Time.parse('1')
assert_equal 120, Freckle::Time.parse('2')
assert_equal 540, Freckle::Time.parse('9')
assert_equal 90, Freckle::Time.parse('1.5')
end
it "should honor billing increments" do
assert_equal 15, Freckle::Time.parse('10')
assert_equal 15, Freckle::Time.parse('14')
assert_equal 30, Freckle::Time.parse('30')
assert_equal 180, Freckle::Time.parse('2:49')
assert_equal 180, Freckle::Time.parse('2:59')
assert_equal 179, Freckle::Time.parse('2:59',1)
end
it "should handle integers" do
assert_equal 15, Freckle::Time.parse(10)
assert_equal 180, Freckle::Time.parse(180)
end
it "should default to a 15 minute billing increment" do
1.upto(15){|n| assert_equal 15, Freckle::Time.parse(n) }
46.upto(60){|n| assert_equal 60, Freckle::Time.parse(n) }
end
it "should handle arbitrary billing increments" do
assert_equal 7, Freckle::Time.parse(6, 7)
assert_equal 33, Freckle::Time.parse(27, 11)
assert_equal 10, Freckle::Time.parse(9, 5)
assert_equal 20, Freckle::Time.parse(19, 20)
assert_equal 888, Freckle::Time.parse(631, 444)
end
it 'should handle minutes with no billing increment' do
assert_equal 0, Freckle::Time.parse('0:00',1)
assert_equal 1, Freckle::Time.parse('0:01',1)
assert_equal 2, Freckle::Time.parse('0:02',1)
assert_equal 3, Freckle::Time.parse('0:03',1)
assert_equal 4, Freckle::Time.parse('0:04',1)
assert_equal 5, Freckle::Time.parse('0:05',1)
assert_equal 6, Freckle::Time.parse('0:06',1)
assert_equal 7, Freckle::Time.parse('0:07',1)
assert_equal 8, Freckle::Time.parse('0:08',1)
assert_equal 9, Freckle::Time.parse('0:09',1)
assert_equal 60+0, Freckle::Time.parse('1:00',1)
assert_equal 60+1, Freckle::Time.parse('1:01',1)
assert_equal 60+2, Freckle::Time.parse('1:02',1)
assert_equal 60+3, Freckle::Time.parse('1:03',1)
assert_equal 60+4, Freckle::Time.parse('1:04',1)
assert_equal 60+5, Freckle::Time.parse('1:05',1)
assert_equal 60+6, Freckle::Time.parse('1:06',1)
assert_equal 60+7, Freckle::Time.parse('1:07',1)
assert_equal 60+8, Freckle::Time.parse('1:08',1)
assert_equal 60+9, Freckle::Time.parse('1:09',1)
end
it "should recognize units" do
assert_equal 600, Freckle::Time.parse('10h')
assert_equal 600, Freckle::Time.parse('10hours')
assert_equal 600, Freckle::Time.parse('10 hours')
assert_equal 600, Freckle::Time.parse("10\t\s\r\nh")
assert_equal 600, Freckle::Time.parse('10hrs')
assert_equal 480, Freckle::Time.parse('1d')
assert_equal 480, Freckle::Time.parse('1days')
assert_equal 480, Freckle::Time.parse('1day')
assert_equal 15, Freckle::Time.parse('10m')
assert_equal 15, Freckle::Time.parse('9m')
assert_equal 15, Freckle::Time.parse('10min')
assert_equal 15, Freckle::Time.parse('9minutes')
assert_equal 75, Freckle::Time.parse('1h15m')
assert_equal 15, Freckle::Time.parse('9M')
assert_equal 600, Freckle::Time.parse('10H')
assert_equal 480, Freckle::Time.parse('1D')
assert_equal 270, Freckle::Time.parse('4h30')
assert_equal 75, Freckle::Time.parse('1H15')
end
it "should parse fractions" do
assert_equal 6, Freckle::Time.parse('.10',1)
assert_equal 12, Freckle::Time.parse(',2h',1)
assert_equal 18, Freckle::Time.parse('.3',6)
assert_equal 24, Freckle::Time.parse(' .4',1)
assert_equal 30, Freckle::Time.parse('.5',1)
assert_equal 36, Freckle::Time.parse('0.6 ',1)
assert_equal 42, Freckle::Time.parse('.7',1)
assert_equal 48, Freckle::Time.parse('.80',1)
assert_equal 54, Freckle::Time.parse(',9',6)
assert_equal 15, Freckle::Time.parse('.25',1)
assert_equal 30, Freckle::Time.parse('.50',1)
assert_equal 45, Freckle::Time.parse(',75',1)
assert_equal 45, Freckle::Time.parse('.75',15)
assert_equal 59, Freckle::Time.parse('.99',1)
assert_equal 60+54, Freckle::Time.parse('1.9',1)
assert_equal 60+15, Freckle::Time.parse('1.25',1)
assert_equal 60+30, Freckle::Time.parse('1.50',1)
assert_equal 60+30, Freckle::Time.parse('1.50',1)
assert_equal 60+60+20, Freckle::Time.parse('2.33333',1)
assert_equal 240, Freckle::Time.parse('.5d',60)
assert_equal 1, Freckle::Time.parse('0.5m',1)
end
it "should ignore leading or trailing whitespace" do
assert_equal 15, Freckle::Time.parse(' 15')
assert_equal 15, Freckle::Time.parse(' 15 ')
assert_equal 15, Freckle::Time.parse('15 ')
assert_equal 15, Freckle::Time.parse(" 15\t\t\t\r\n\t ")
end
it "should return nil if it can't parse something" do
assert_equal nil, Freckle::Time.parse(nil)
assert_equal nil, Freckle::Time.parse('')
assert_equal nil, Freckle::Time.parse('m')
assert_equal nil, Freckle::Time.parse('h')
assert_equal nil, Freckle::Time.parse('d')
end
it "should not choke on floats" do
assert_equal 15, Freckle::Time.parse(15.0)
assert_equal 30, Freckle::Time.parse('30.0')
assert_equal 120, Freckle::Time.parse('2.0')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment