// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.mappaint
import java.awt.Color

import org.junit.*
import org.openstreetmap.josm.JOSMFixture
import org.openstreetmap.josm.data.osm.Node
import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy
import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.TagLookupCompositionStrategy
import org.openstreetmap.josm.gui.mappaint.MapPaintStyles.TagKeyReference

class MapCSSWithExtendedTextDirectivesTest {

    @BeforeClass
    public static void createJOSMFixture(){
        JOSMFixture.createUnitTestFixture().init()
    }

    @Test
    public void createAutoTextElement() {
        MultiCascade mc = new MultiCascade()
        Cascade c = mc.getOrCreateCascade("default")
        c.put("text", new Keyword("auto"))
        Node osm = new Node()
        osm.put("ref", "A456");
        Environment env = new Environment(osm, mc, "default", null)

        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
        assert te.labelCompositionStrategy != null
        assert te.labelCompositionStrategy instanceof DeriveLabelFromNameTagsCompositionStrategy
    }

    @Test
    public void createTextElementComposingTextFromTag() {
        MultiCascade mc = new MultiCascade()
        Cascade c = mc.getOrCreateCascade("default")
        c.put("text", new TagKeyReference("my_name"))
        Node osm = new Node()
        osm.put("my_name", "foobar");
        Environment env = new Environment(osm, mc, "default", null)

        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
        assert te.labelCompositionStrategy != null
        assert te.labelCompositionStrategy instanceof TagLookupCompositionStrategy
        assert te.labelCompositionStrategy.getDefaultLabelTag() == "my_name"
    }

    @Test
    public void createNullStrategy() {
        MultiCascade mc = new MultiCascade()
        Node osm = new Node()
        Environment env = new Environment(osm, mc, "default", null)

        TextElement te = TextElement.create(env, Color.WHITE, false /* no default annotate */)
        assert te == null
    }
}
