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

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

class LabelCompositionStrategyTest {

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

    @Test
    public void createStaticLabelCompositionStrategy() {
        def n = new Node()

        def strat = new StaticLabelCompositionStrategy(null)
        assert strat.compose(n) == null

        strat = new StaticLabelCompositionStrategy("a label")
        assert strat.compose(n) == "a label"
    }

    @Test
    public void createTagLookupCompositionStrategy() {
        def n = new Node()
        n.put("my-tag", "my-value")

        def strat = new TagLookupCompositionStrategy(null)
        assert strat.compose(n) == null

        strat = new TagLookupCompositionStrategy("name")
        assert strat.compose(n) == null

        strat = new TagLookupCompositionStrategy("my-tag")
        assert strat.compose(n) == "my-value"
    }

    @Test
    public void createDeriveLabelFromNameTagsCompositionStrategy() {
        def n
        def strat

        strat = new DeriveLabelFromNameTagsCompositionStrategy()
        strat.setNameTags(null)
        assert strat.getNameTags() == []

        strat = new DeriveLabelFromNameTagsCompositionStrategy()
        strat.setNameTags(["name", "brand"])
        assert strat.getNameTags() == ["name", "brand"]

        n = new Node()
        n.put("brand", "my brand")
        assert strat.compose(n) == "my brand"

        n = new Node()
        n.put("name", "my name")
        n.put("brand", "my brand")
        assert strat.compose(n) == "my name"
    }
}

