import os, mapnik
from nose.tools import eq_
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_clearing_image_data():
    im = mapnik.Image(256,256)
    # make sure it equals itself
    bytes = im.tostring()
    eq_(im.tostring(),bytes)
    # set background, then clear
    im.fill(mapnik.Color('green'))
    eq_(im.tostring()!=bytes,True)
    # clear image, should now equal original
    im.clear()
    eq_(im.tostring(),bytes)

def make_map():
    ds = mapnik.MemoryDatasource()
    context = mapnik.Context()
    context.push('Name')
    pixel_key = 1
    f = mapnik.Feature(context,pixel_key)
    f['Name'] = str(pixel_key)
    f.geometry=mapnik.Geometry.from_wkt('POLYGON ((0 0, 0 256, 256 256, 256 0, 0 0))')
    ds.add_feature(f)
    s = mapnik.Style()
    r = mapnik.Rule()
    symb = mapnik.PolygonSymbolizer()
    r.symbols.append(symb)
    s.rules.append(r)
    lyr = mapnik.Layer('Places')
    lyr.datasource = ds
    lyr.styles.append('places_labels')
    width,height = 256,256
    m = mapnik.Map(width,height)
    m.append_style('places_labels',s)
    m.layers.append(lyr)
    m.zoom_all()
    return m

if mapnik.has_grid_renderer():
    def test_clearing_grid_data():
        g = mapnik.Grid(256,256)
        utf = g.encode()
        # make sure it equals itself
        eq_(g.encode(),utf)
        m = make_map()
        mapnik.render_layer(m,g,layer=0,fields=['__id__','Name'])
        eq_(g.encode()!=utf,True)
        # clear grid, should now match original
        g.clear()
        eq_(g.encode(),utf)

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