#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os

from nose.tools import eq_
from nose.plugins.skip import SkipTest

import mapnik

from .utilities import execution_path, run_all


def setup():
    # All of the paths used are relative, if we run the tests
    # from another directory we need to chdir()
    os.chdir(execution_path('.'))


def test_arbitrary_parameters_attached_to_map():
    if not os.path.exists('../data/good_maps/extra_arbitary_map_parameters.xml'):
        raise SkipTest

    m = mapnik.Map(256, 256)
    mapnik.load_map(m, '../data/good_maps/extra_arbitary_map_parameters.xml')
    eq_(len(m.parameters), 5)
    eq_(m.parameters['key'], 'value2')
    eq_(m.parameters['key3'], 'value3')
    eq_(m.parameters['unicode'], u'iván')
    eq_(m.parameters['integer'], 10)
    eq_(m.parameters['decimal'], .999)
    m2 = mapnik.Map(256, 256)
    for k, v in m.parameters:
        m2.parameters.append(mapnik.Parameter(k, v))
    eq_(len(m2.parameters), 5)
    eq_(m2.parameters['key'], 'value2')
    eq_(m2.parameters['key3'], 'value3')
    eq_(m2.parameters['unicode'], u'iván')
    eq_(m2.parameters['integer'], 10)
    eq_(m2.parameters['decimal'], .999)
    map_string = mapnik.save_map_to_string(m)
    m3 = mapnik.Map(256, 256)
    mapnik.load_map_from_string(m3, map_string)
    eq_(len(m3.parameters), 5)
    eq_(m3.parameters['key'], 'value2')
    eq_(m3.parameters['key3'], 'value3')
    eq_(m3.parameters['unicode'], u'iván')
    eq_(m3.parameters['integer'], 10)
    eq_(m3.parameters['decimal'], .999)


def test_serializing_arbitrary_parameters():
    m = mapnik.Map(256, 256)
    m.parameters.append(mapnik.Parameter('width', m.width))
    m.parameters.append(mapnik.Parameter('height', m.height))

    m2 = mapnik.Map(1, 1)
    mapnik.load_map_from_string(m2, mapnik.save_map_to_string(m))
    eq_(m2.parameters['width'], m.width)
    eq_(m2.parameters['height'], m.height)

if __name__ == "__main__":
    setup()
    exit(run_all(eval(x) for x in dir() if x.startswith("test_")))
