// 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.gui.mappaint.LabelCompositionStrategy.DeriveLabelFromNameTagsCompositionStrategy 
import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.StaticLabelCompositionStrategy;
import org.openstreetmap.josm.gui.mappaint.LabelCompositionStrategy.TagLookupCompositionStrategy 
import org.openstreetmap.josm.data.osm.Node;

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"        
    }
}

