From 61aa0957221ebd1b2e6097b35b2cab60655f25d7 Mon Sep 17 00:00:00 2001 From: Emil Tin Date: Sun, 19 Feb 2012 20:36:29 +0100 Subject: [PATCH] cuke testing of travel times --- features/step_definitions/routing.rb | 22 ++-- features/time.feature | 182 +++++++++++++++++++++++++++ 2 files changed, 196 insertions(+), 8 deletions(-) create mode 100644 features/time.feature diff --git a/features/step_definitions/routing.rb b/features/step_definitions/routing.rb index 0f9db6523f6..29a0dfcf472 100644 --- a/features/step_definitions/routing.rb +++ b/features/step_definitions/routing.rb @@ -157,8 +157,6 @@ def computed_route table.hashes.each_with_index do |row,i| got = row.dup attempts = [] - row['way'] = "w#{i}" - got['way'] = "w#{i}" ['forw','backw'].each do |direction| if table.headers.include? direction if direction == 'forw' @@ -168,10 +166,13 @@ def computed_route end got[direction] = route_status response json = JSON.parse(response.body) - if got[direction] == 'x' + if got[direction].empty? == false route = way_list json['route_instructions'] if route != "w#{i}" - got[direction] = "#{route}?" + got[direction] = "testing w#{i}, but got #{route}!?" + elsif row[direction] =~ /\d+s/ + time = json['route_summary']['total_time'] + got[direction] = "#{time}s" end end if got[direction] != row[direction] @@ -203,7 +204,7 @@ def computed_route instructions = way_list json['route_instructions'] end end - + got = {'from' => row['from'], 'to' => row['to'] } if table.headers.include? 'start' got['start'] = instructions ? json['route_summary']['start_point'] : nil @@ -213,15 +214,20 @@ def computed_route end if table.headers.include? 'route' got['route'] = (instructions || '').strip - end - if table.headers.include? 'distance' - got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + if table.headers.include? 'distance' + got['distance'] = instructions ? json['route_summary']['total_distance'].to_s : nil + end + if table.headers.include? 'time' + raise "*** time must be specied in seconds. (ex: 60s)" unless row['time'] =~ /\d+s/ + got['time'] = instructions ? "#{json['route_summary']['total_time'].to_s}s" : nil + end end if row != got failed = { :attempt => 'route', :query => @query, :response => response } log_fail row,got,[failed] end + actual << got end end diff --git a/features/time.feature b/features/time.feature new file mode 100644 index 00000000000..24f0a448bb0 --- /dev/null +++ b/features/time.feature @@ -0,0 +1,182 @@ +@routing @time +Feature: Estimation of travel time + Note: + 15km/h = 15000m/3600s = 150m/36s = 100m/24s + 5km/h = 5000m/3600s = 50m/36s = 100m/72s + + Background: Use specific speeds + Given the speedprofile "bicycle" + And the speedprofile settings + | primary | 15 | + | footway | 5 | + + Scenario: Basic travel time, 1m scale + Given a grid size of 1 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 0s | + | x | b | xb | 0s | + | x | c | xc | 0s | + | x | d | xd | 0s | + | x | e | xe | 0s | + | x | f | xf | 0s | + | x | g | xg | 0s | + | x | h | xh | 0s | + + Scenario: Basic travel time, 100m scale + Given a grid size of 100 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 24s | + | x | b | xb | 34s | + | x | c | xc | 24s | + | x | d | xd | 34s | + | x | e | xe | 24s | + | x | f | xf | 34s | + | x | g | xg | 24s | + | x | h | xh | 34s | + + Scenario: Basic travel time, 10km scale + Given a grid size of 10000 meters + Given the nodes + | h | a | b | + | g | x | c | + | f | e | d | + + And the ways + | nodes | highway | + | xa | primary | + | xb | primary | + | xc | primary | + | xd | primary | + | xe | primary | + | xf | primary | + | xg | primary | + | xh | primary | + + When I route I should get + | from | to | route | time | + | x | a | xa | 2400s | + | x | b | xb | 3400s | + | x | c | xc | 2400s | + | x | d | xd | 3400s | + | x | e | xe | 2400s | + | x | f | xf | 3400s | + | x | g | xg | 2400s | + | x | h | xh | 3400s | + + Scenario: Time of travel depending on way type + Given the nodes + | a | b | + | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | cd | footway | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | c | d | cd | 72s | + + Scenario: Time of travel on a series of ways + Given the nodes + | a | b | c | d | + + And the ways + | nodes | highway | + | ab | primary | + | bc | primary | + | cd | primary | + + When I route I should get + | from | to | route | time | + | a | b | ab | 24s | + | a | c | ab,bc | 48s | + | a | d | ab,bc,cd | 72s | + + Scenario: Time of travel on a winding way + Given the nodes + | a | b | | | | | + | | c | d | e | | i | + | | | | f | g | h | + + And the ways + | nodes | highway | + | abcdefghi | primary | + + When I route I should get + | from | to | route | time | + | a | b | abcdefghi | 24s | + | a | e | abcdefghi | 96s | + | a | i | abcdefghi | 192s | + + Scenario: Time of travel on combination of road types + Given the nodes + | a | b | c | d | e | + + And the ways + | nodes | highway | + | abc | primary | + | cde | footway | + + When I route I should get + | from | to | route | time | + | b | c | abc | 24s | + | c | e | cde | 72s | + | b | d | abc,cde | 144s | + | a | e | abc,cde | 192s | + + Scenario: Time of travel on part of a way + Given the nodes + | a | 1 | + | | 2 | + | | 3 | + | b | 4 | + + And the ways + | nodes | highway | + | ab | primary | + + When I route I should get + | from | to | route | time | + | 1 | 2 | ab | 24s | + | 1 | 3 | ab | 48s | + | 1 | 4 | ab | 72s | + | 4 | 3 | ab | 24s | + | 4 | 2 | ab | 48s | + | 4 | 1 | ab | 72s | +