187 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Gherkin
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			8.0 KiB
		
	
	
	
		
			Gherkin
		
	
	
	
	
	
@routing @testbot @turn_function
 | 
						|
Feature: Turn Function Information
 | 
						|
 | 
						|
 | 
						|
    Background:
 | 
						|
        Given the profile file
 | 
						|
        """
 | 
						|
        functions = require('car')
 | 
						|
 | 
						|
        function test_setup()
 | 
						|
          profile = functions.setup()
 | 
						|
          profile.highway_turn_classification = {
 | 
						|
              ['motorway'] = 4,
 | 
						|
              ['motorway_link'] = 4,
 | 
						|
              ['trunk'] = 4,
 | 
						|
              ['trunk_link'] = 4,
 | 
						|
              ['primary'] = 4,
 | 
						|
              ['primary_link'] = 4,
 | 
						|
              ['secondary'] = 3,
 | 
						|
              ['secondary_link'] = 3,
 | 
						|
              ['tertiary'] = 2,
 | 
						|
              ['tertiary_link'] = 2,
 | 
						|
              ['residential'] = 1,
 | 
						|
              ['living_street'] = 1,
 | 
						|
          }
 | 
						|
 | 
						|
          profile.access_turn_classification = {
 | 
						|
              ['discouraged'] = 1;
 | 
						|
              ['permissive'] = 1;
 | 
						|
              ['private'] = 1;
 | 
						|
              ['customers'] = 1;
 | 
						|
              ['dismount'] = 1;
 | 
						|
          }
 | 
						|
          return profile
 | 
						|
        end
 | 
						|
 | 
						|
        function turn_leg_string (leg)
 | 
						|
          return 'speed: ' .. tostring(leg.speed)
 | 
						|
             .. ', is_incoming: ' .. tostring(leg.is_incoming)
 | 
						|
             .. ', is_outgoing: ' .. tostring(leg.is_outgoing)
 | 
						|
             .. ', highway_turn_classification: ' .. tostring(leg.highway_turn_classification)
 | 
						|
             .. ', access_turn_classification: ' .. tostring(leg.access_turn_classification)
 | 
						|
             .. ', priority_class: ' .. tostring(leg.priority_class)
 | 
						|
        end
 | 
						|
 | 
						|
        function print_turn (profile, turn)
 | 
						|
          print ('source_restricted ' .. string.format("%s", tostring(turn.source_restricted)))
 | 
						|
          print ('source_is_motorway ' .. string.format("%s", tostring(turn.source_is_motorway)))
 | 
						|
          print ('source_is_link ' .. string.format("%s", tostring(turn.source_is_link)))
 | 
						|
          print ('source_number_of_lanes ' .. string.format("%s", tostring(turn.source_number_of_lanes)))
 | 
						|
          print ('source_highway_turn_classification ' .. string.format("%s", tostring(turn.source_highway_turn_classification)))
 | 
						|
          print ('source_access_turn_classification ' .. string.format("%s", tostring(turn.source_access_turn_classification)))
 | 
						|
          print ('source_speed ' .. string.format("%s", tostring(turn.source_speed)))
 | 
						|
          print ('source_priority_class ' .. string.format("%s", tostring(turn.source_priority_class)))
 | 
						|
          print ('source_mode ' .. string.format("%s", tostring(turn.source_mode)))
 | 
						|
 | 
						|
          print ('target_restricted ' .. string.format("%s", tostring(turn.target_restricted)))
 | 
						|
          print ('target_is_motorway ' .. string.format("%s", tostring(turn.target_is_motorway)))
 | 
						|
          print ('target_is_link ' .. string.format("%s", tostring(turn.target_is_link)))
 | 
						|
          print ('target_number_of_lanes ' .. string.format("%s", tostring(turn.target_number_of_lanes)))
 | 
						|
          print ('target_highway_turn_classification ' .. string.format("%s", tostring(turn.target_highway_turn_classification)))
 | 
						|
          print ('target_access_turn_classification ' .. string.format("%s", tostring(turn.target_access_turn_classification)))
 | 
						|
          print ('target_speed ' .. string.format("%s", tostring(turn.target_speed)))
 | 
						|
          print ('target_priority_class ' .. string.format("%s", tostring(turn.target_priority_class)))
 | 
						|
          print ('target_mode ' .. string.format("%s", tostring(turn.target_mode)))
 | 
						|
 | 
						|
          print ('number_of_roads ' .. string.format("%s", tostring(turn.number_of_roads)))
 | 
						|
          if not turn.is_u_turn then
 | 
						|
          for roadCount, road in ipairs(turn.roads_on_the_right) do
 | 
						|
              print('roads_on_the_right [' .. tostring(roadCount) .. '] ' .. turn_leg_string(road))
 | 
						|
            end
 | 
						|
 | 
						|
            for roadCount, road in ipairs(turn.roads_on_the_left) do
 | 
						|
              print('roads_on_the_left [' .. tostring(roadCount) .. '] ' .. turn_leg_string(road))
 | 
						|
            end
 | 
						|
          end
 | 
						|
        end
 | 
						|
 | 
						|
        return {
 | 
						|
            setup = test_setup,
 | 
						|
            process_way = functions.process_way,
 | 
						|
            process_node = functions.process_node,
 | 
						|
            process_turn = print_turn
 | 
						|
        }
 | 
						|
        """
 | 
						|
 | 
						|
    Scenario: Turns should have correct information of source and target
 | 
						|
        Given the node map
 | 
						|
            """
 | 
						|
 | 
						|
            a b c
 | 
						|
 | 
						|
            """
 | 
						|
        And the ways
 | 
						|
            | nodes | highway  |
 | 
						|
            | ab    | motorway |
 | 
						|
            | bc    | motorway |
 | 
						|
        And the data has been saved to disk
 | 
						|
 | 
						|
        When I run "osrm-extract --profile {profile_file} {osm_file}"
 | 
						|
        Then it should exit successfully
 | 
						|
        And stdout should contain "source_is_motorway true"
 | 
						|
        And stdout should contain "target_is_motorway true"
 | 
						|
        And stdout should contain "source_is_link false"
 | 
						|
        And stdout should contain "source_priority_class 0"
 | 
						|
        And stdout should contain "target_is_motorway true"
 | 
						|
        And stdout should contain "target_is_link false"
 | 
						|
        And stdout should contain "target_priority_class 0"
 | 
						|
 | 
						|
 | 
						|
    Scenario: Turns should detect when turn is leaving highway
 | 
						|
        Given the node map
 | 
						|
            """
 | 
						|
 | 
						|
            a b c
 | 
						|
 | 
						|
            """
 | 
						|
        And the ways
 | 
						|
            | nodes | highway       | lanes |
 | 
						|
            | ab    | motorway      | 3     |
 | 
						|
            | bc    | motorway_link |       |
 | 
						|
 | 
						|
        And the data has been saved to disk
 | 
						|
 | 
						|
        When I run "osrm-extract --profile {profile_file} {osm_file}"
 | 
						|
        Then it should exit successfully
 | 
						|
        And stdout should contain "source_is_motorway true"
 | 
						|
        And stdout should contain "source_is_link false"
 | 
						|
        And stdout should contain "source_number_of_lanes 3"
 | 
						|
        And stdout should contain "target_is_motorway false"
 | 
						|
        And stdout should contain "target_is_link true"
 | 
						|
        And stdout should contain "target_number_of_lanes 0"
 | 
						|
        And stdout should contain "number_of_roads 2"
 | 
						|
 | 
						|
    Scenario: Turns should have correct information of other roads at intersection I
 | 
						|
        Given the node map
 | 
						|
            """
 | 
						|
               d
 | 
						|
               ^
 | 
						|
               |
 | 
						|
            a->b->c
 | 
						|
            """
 | 
						|
        And the ways
 | 
						|
            | nodes | highway     | oneway |
 | 
						|
            | ab    | primary     | yes    |
 | 
						|
            | bc    | motorway    | yes    |
 | 
						|
            | bd    | residential | yes    |
 | 
						|
        And the data has been saved to disk
 | 
						|
 | 
						|
        When I run "osrm-extract --profile {profile_file} {osm_file}"
 | 
						|
        Then it should exit successfully
 | 
						|
        And stdout should contain "number_of_roads 3"
 | 
						|
        And stdout should contain "source_priority_class 4"
 | 
						|
        And stdout should contain "target_priority_class 0"
 | 
						|
        And stdout should contain "target_priority_class 11"
 | 
						|
        # turning abd, give information about bc
 | 
						|
        And stdout should contain /roads_on_the_right \[1\] speed: [0-9]+, is_incoming: false, is_outgoing: true, highway_turn_classification: 4, access_turn_classification: 0/
 | 
						|
        # turning abc, give information about bd
 | 
						|
        And stdout should contain /roads_on_the_left \[1\] speed: [0-9]+, is_incoming: false, is_outgoing: true, highway_turn_classification: 1, access_turn_classification: 0/
 | 
						|
 | 
						|
    Scenario: Turns should have correct information of other roads at intersection II
 | 
						|
        Given the node map
 | 
						|
            """
 | 
						|
               d
 | 
						|
               |
 | 
						|
               v
 | 
						|
            a->b->c
 | 
						|
            """
 | 
						|
        And the ways
 | 
						|
            | nodes | highway      | oneway | access      |
 | 
						|
            | ab    | secondary    | yes    |             |
 | 
						|
            | bc    | motorway     | yes    |             |
 | 
						|
            | db    | unclassified | yes    | discouraged |
 | 
						|
        And the data has been saved to disk
 | 
						|
 | 
						|
        When I run "osrm-extract --profile {profile_file} {osm_file}"
 | 
						|
        Then it should exit successfully
 | 
						|
        And stdout should contain "number_of_roads 3"
 | 
						|
        # turning dbc, give information about about ab
 | 
						|
        And stdout should contain /roads_on_the_right \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: false, highway_turn_classification: 3, access_turn_classification: 0/
 | 
						|
        # turning abc, give information about about db
 | 
						|
        And stdout should contain /roads_on_the_left \[1\] speed: [0-9]+, is_incoming: true, is_outgoing: false, highway_turn_classification: 0, access_turn_classification: 1/
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 |