* Added approach on the opposite side of the road. * Additional test and docs coverage for opposite approach --------- Co-authored-by: Aleksandrs Saveljevs <Aleksandrs.Saveljevs@gmail.com>
663 lines
19 KiB
Gherkin
663 lines
19 KiB
Gherkin
@routing @approach @testbot
|
|
Feature: Approach parameter
|
|
|
|
Background:
|
|
Given a grid size of 10 meters
|
|
|
|
Scenario: Start End same approach, option unrestricted for Start and End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: Start End same approach, option unrestricted for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc,bc |
|
|
|
|
Scenario: Start End same approach, option unrestricted for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc |
|
|
|
|
Scenario: Start End same approach, option opposite for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | opposite curb | ab,bc,bc |
|
|
|
|
Scenario: Start End different approach, option unrestricted for Start and End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: Start End different approach, option unrestricted for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc |
|
|
|
|
Scenario: Start End different approach, option unrestricted for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc,bc |
|
|
|
|
Scenario: Start End different approach, option curb for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
e
|
|
a------b------c-----------d
|
|
s
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
| cd |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | curb opposite | cd,cd,ab,ab |
|
|
|
|
|
|
###############
|
|
# Oneway Test #
|
|
###############
|
|
|
|
|
|
Scenario: Test on oneway segment, Start End same approach, option unrestricted for Start and End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End same approach, option unrestricted for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End same approach, option unrestricted for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End same approach, option opposite for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | opposite curb | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End different approach, option unrestricted for Start and End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End different approach, option unrestricted for Start and curb for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End different approach, option unrestricted for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc |
|
|
|
|
Scenario: Test on oneway segment, Start End different approach, option curb for Start and opposite for End
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | oneway |
|
|
| ab | yes |
|
|
| bc | yes |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | curb opposite | ab,bc |
|
|
|
|
##############
|
|
# UTurn Test #
|
|
##############
|
|
|
|
Scenario: UTurn test, router can't found a route because uturn unauthorized on the segment selected
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
And the relations
|
|
| type | way:from | way:to | node:via | restriction |
|
|
| restriction | bc | bc | c | no_u_turn |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | |
|
|
|
|
Scenario: UTurn test, router can find a route because uturn authorized to reach opposite side
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
e s
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
And the relations
|
|
| type | way:from | way:to | node:via | restriction |
|
|
| restriction | bc | bc | c | no_u_turn |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | curb opposite | bc,ab,ab |
|
|
|
|
|
|
Scenario: UTurn test, router can find a route because he can use the roundabout
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
h
|
|
s e / \
|
|
a------b------c g
|
|
\ /
|
|
f
|
|
"""
|
|
|
|
And the ways
|
|
| nodes | junction |
|
|
| ab | |
|
|
| bc | |
|
|
| cfghc | roundabout |
|
|
|
|
And the relations
|
|
| type | way:from | way:to | node:via | restriction |
|
|
| restriction | bc | bc | c | no_u_turn |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc,bc |
|
|
| s | e | opposite curb | ab,bc,bc |
|
|
|
|
|
|
Scenario: Start End same approach, option unrestricted for Start and curb for End, left-hand driving
|
|
Given the profile file
|
|
"""
|
|
local functions = require('testbot')
|
|
local testbot_process_way = functions.process_way
|
|
functions.process_way = function(profile, way, result)
|
|
testbot_process_way(profile, way, result)
|
|
result.is_left_hand_driving = true
|
|
end
|
|
return functions
|
|
"""
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc |
|
|
|
|
Scenario: Start End same approach, option unrestricted for Start and opposite for End, left-hand driving
|
|
Given the profile file
|
|
"""
|
|
local functions = require('testbot')
|
|
local testbot_process_way = functions.process_way
|
|
functions.process_way = function(profile, way, result)
|
|
testbot_process_way(profile, way, result)
|
|
result.is_left_hand_driving = true
|
|
end
|
|
return functions
|
|
"""
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc,bc |
|
|
|
|
|
|
#######################
|
|
# Left-side countries #
|
|
#######################
|
|
|
|
Scenario: [Left-hand-side] Start End same approach, option unrestricted for Start and End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End same approach, option unrestricted for Start and curb for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End same approach, option unrestricted for Start and opposite for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s e
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End same approach, option opposite for Start and curb for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
e s
|
|
a------b------c
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | opposite curb | bc,ab,ab |
|
|
|
|
Scenario: [Left-hand-side] Start End different approach, option unrestricted for Start and End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted unrestricted | ab,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End different approach, option unrestricted for Start and curb for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted curb | ab,bc,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End different approach, option unrestricted for Start and opposite for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | unrestricted opposite | ab,bc |
|
|
|
|
Scenario: [Left-hand-side] Start End different approach, option curb for Start and opposite for End
|
|
Given the profile file "car" initialized with
|
|
"""
|
|
profile.properties.left_hand_driving = true
|
|
"""
|
|
And the node map
|
|
"""
|
|
s
|
|
a------b------c
|
|
e
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
|
|
When I route I should get
|
|
| from | to | approaches | route |
|
|
| s | e | curb opposite | ab,bc |
|
|
|
|
|
|
|
|
Scenario: Routes with more than two waypoints - uturns allowed
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
2 1
|
|
a------b------c-----------d
|
|
|
|
|
3 | 4
|
|
e------f------g-----------h
|
|
|
|
|
|
|
|
i
|
|
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
| cd |
|
|
| bf |
|
|
| ef |
|
|
| fg |
|
|
| gh |
|
|
| ei |
|
|
|
|
And the query options
|
|
| continue_straight | false |
|
|
|
|
When I route I should get
|
|
| waypoints | approaches | locations | # |
|
|
| 1,2,3,4 | curb curb curb curb | _,_,_,a,b,f,_,_,i,h,_ | 1,2,2,a,b,f,3,3,i,h,4 (Only u-turn at end of roads) |
|
|
| 1,2,3,4 | curb unrestricted unrestricted curb | _,_,_,b,f,_,_,h,_ | 1,2,2,b,f,3,3,h,4 (Can u-turn at 2 and 3) |
|
|
| 1,2,3,4 | opposite opposite opposite opposite | _,d,a,_,_,b,f,i,_,_,_ | 1,d,a,2,2,b,f,i,3,3,4 (Only u-turn at end of roads) |
|
|
| 1,2,3,4 | opposite unrestricted unrestricted opposite | _,d,_,_,b,f,_,_,_ | 1,d,2,2,b,f,3,3,4 (Can u-turn at 2 and 3) |
|
|
|
|
|
|
Scenario: Routes with more than two waypoints - uturns forbidden
|
|
Given the profile "testbot"
|
|
And the node map
|
|
"""
|
|
2 1
|
|
a------b------c-----------d
|
|
|
|
|
3 | 4
|
|
e------f------g-----------h
|
|
|
|
|
|
|
|
i
|
|
|
|
"""
|
|
|
|
And the ways
|
|
| nodes |
|
|
| ab |
|
|
| bc |
|
|
| cd |
|
|
| bf |
|
|
| ef |
|
|
| fg |
|
|
| gh |
|
|
| ei |
|
|
|
|
And the query options
|
|
| continue_straight | true |
|
|
|
|
When I route I should get
|
|
| waypoints | approaches | locations | # |
|
|
| 1,2,3,4 | curb curb curb curb | _,_,_,a,b,f,_,_,i,h,_ | 1,2,2,a,b,f,3,3,i,h,4 (Only u-turn at end of roads) |
|
|
| 1,2,3,4 | curb opposite opposite curb | _,a,_,_,b,f,i,_,_,h,_ | 1,a,2,2,b,f,i,3,3,h,4 (switches stops with u-turns) |
|
|
| 1,2,3,4 | opposite opposite opposite opposite | _,d,a,_,_,b,f,i,_,_,_ | 1,d,a,2,2,b,f,i,3,3,4 (Only u-turn at end of roads) |
|
|
| 1,2,3,4 | opposite curb curb opposite | _,d,_,_,a,b,f,_,_,i,_ | 1,d,2,2,a,b,f,3,3,i,4 (switches stops with u-turns) |
|