@extract
Feature: osrm-extract lua ways:get_nodes()

    Scenario: osrm-extract - Passing base file
        Given the profile file
        """
        functions = require('testbot')

        functions.process_way = function(profile, way, result)
          for _, node in ipairs(way:get_nodes()) do
            print('node id ' .. node:id())
          end
          result.forward_mode = mode.driving
          result.forward_speed = 1
        end

        return functions
        """
        And the node map
            """
            a b
            """
        And the ways
            | nodes |
            | ab    |
        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 "node id 1"
        And stdout should contain "node id 2"


    Scenario: osrm-extract location-dependent data without add-locations-to-ways preprocessing and node locations cache
        Given the profile file
        """
        functions = require('testbot')

        functions.process_way = function(profile, way, result, relations)
           print(way:get_location_tag('driving_side'))
        end

        return functions
        """
        And the node map
            """
            a b
            """
        And the ways
            | nodes |
            | ab    |
        And the data has been saved to disk

        When I try to run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --disable-location-cache"
        Then it should exit with an error
        And stderr should contain "invalid location"

    Scenario: osrm-extract location-dependent data
        Given the profile file
        """
        functions = require('testbot')

        functions.process_way = function(profile, way, result, relations)
           for _, key in ipairs({'answer', 'boolean', 'object', 'array'}) do
             print (key .. ' ' .. tostring(way:get_location_tag(key)))
           end
           result.forward_mode = mode.driving
           result.forward_speed = 1
        end

        return functions
        """
        And the node map
            """
            a b
            """
        And the ways with locations
            | nodes |
            | ab    |
        And the data has been saved to disk

        When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson  --disable-location-cache"
        Then it should exit successfully
        And stdout should contain "answer 42"
        And stdout should contain "boolean true"
        And stdout should contain "array nil"
        And stdout should contain "object nil"


    Scenario: osrm-extract location-dependent data with multi-polygons
        Given the profile file
        """
        functions = require('testbot')

        functions.process_way = function(profile, way, result, relations)
           print('ISO3166-1 ' .. (way:get_location_tag('ISO3166-1') or 'none'))
           print('answer ' .. (way:get_location_tag('answer') or 'none'))
           result.forward_mode = mode.driving
           result.forward_speed = 1
        end

        return functions
        """
        And the node locations
            | node |        lat |         lon | id |
            | a    | 22.4903670 | 113.9455227 |  1 |
            | b    | 22.4901701 | 113.9455899 |  2 |
            | c    | 22.4901852 | 113.9458608 |  3 |
            | d    | 22.4904033 | 113.9456999 |  4 |
            | e    |        1.1 |           1 |  5 |
            | f    |        1.2 |           1 |  6 |
        And the ways with locations
            | nodes | #              |
            | ab    | Hong Kong      |
            | cd    | China Mainland |
            | ef    | Null Island    |
        And the data has been saved to disk

        When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson --location-dependent-data test/data/regions/hong-kong.geojson --disable-location-cache"
        Then it should exit successfully
        And stdout should not contain "1 GeoJSON polygon"
        And stdout should contain "2 GeoJSON polygons"
        And stdout should contain "ISO3166-1 HK"
        And stdout should contain "ISO3166-1 none"
        And stdout should contain "answer 42"

    Scenario: osrm-extract location-dependent data via locations cache
        Given the profile file
        """
        functions = require('testbot')

        functions.process_node = function(profile, node, result, relations)
           print ('node ' .. tostring(node:get_location_tag('answer')))
        end

        functions.process_way = function(profile, way, result, relations)
           print ('way ' .. tostring(way:get_location_tag('answer')))
           result.forward_mode = mode.driving
           result.forward_speed = 1
        end

        return functions
        """
        And the node map
            """
            a b
            """
        And the ways
            | nodes |
            | ab    |
        And the data has been saved to disk

        When I run "osrm-extract --profile {profile_file} {osm_file} --location-dependent-data test/data/regions/null-island.geojson"
        Then it should exit successfully
        And stdout should contain "node 42"
        And stdout should contain "way 42"