Index: trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/conflict/nodes/NodeListMergerTest.java	(revision 1707)
@@ -0,0 +1,72 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.conflict.nodes;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JFrame;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+
+public class NodeListMergerTest extends JFrame {
+
+
+    private NodeListMerger nodeListMerger;
+
+    protected void populate() {
+        Way w1 = new Way();
+        Node n1;
+        w1.nodes.add(n1 = new Node(1));
+        for (int i=0; i < 20; i++) {
+            n1.put("key" + i, "value" + i);
+        }
+        String note = "";
+        for (int i=0; i < 50; i++) {
+            note += " A very long text ";
+        }
+        n1.put("note", note);
+        w1.nodes.add(new Node(2));
+        w1.nodes.add(new Node(3));
+
+        Way w2 = new Way();
+        w2.nodes.add(new Node(4));
+        w2.nodes.add(new Node(5));
+        w2.nodes.add(new Node(6));
+
+        nodeListMerger.populate(w1, w2);
+
+    }
+
+    protected void populateLong() {
+        Way w1 = new Way();
+        for (int i = 0; i < 100; i++) {
+            w1.nodes.add(new Node(i));
+        }
+
+        Way w2 = new Way();
+        for (int i = 1; i < 200; i+=2) {
+            w2.nodes.add(new Node(i));
+        }
+        nodeListMerger.populate(w1, w2);
+
+    }
+
+    protected void build() {
+        nodeListMerger = new NodeListMerger();
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(nodeListMerger, BorderLayout.CENTER);
+    }
+
+    public NodeListMergerTest() {
+        build();
+        populate();
+    }
+
+    static public void main(String args[]) {
+        NodeListMergerTest test = new NodeListMergerTest();
+        test.setSize(600,600);
+        test.setVisible(true);
+    }
+
+
+}
Index: trunk/test/functional/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergerTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergerTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergerTest.java	(revision 1707)
@@ -0,0 +1,46 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.conflict.properties;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JFrame;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.projection.Epsg4326;
+
+public class PropertiesMergerTest extends JFrame{
+
+    private PropertiesMerger merger;
+
+    protected void build() {
+        Main.proj = new Epsg4326();
+
+        setLayout(new BorderLayout());
+        add(merger = new PropertiesMerger(), BorderLayout.CENTER);
+    }
+
+    protected void populate() {
+        Node my = new Node(1);
+        my.setCoor(new LatLon(1,1));
+        my.deleted = true;
+
+        Node their = new Node(2);
+        their.setCoor(new LatLon(10,10));
+
+        merger.getModel().populate(my, their);
+    }
+
+    public PropertiesMergerTest() {
+        build();
+        populate();
+    }
+
+    static public void main(String args[]) {
+        PropertiesMergerTest app = new PropertiesMergerTest();
+        app.setSize(600, 400);
+        app.setVisible(true);
+    }
+
+}
Index: trunk/test/functional/org/openstreetmap/josm/gui/conflict/relation/RelationMemberMergerTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/conflict/relation/RelationMemberMergerTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/conflict/relation/RelationMemberMergerTest.java	(revision 1707)
@@ -0,0 +1,51 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.conflict.relation;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JFrame;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Relation;
+import org.openstreetmap.josm.data.osm.RelationMember;
+import org.openstreetmap.josm.data.osm.Way;
+import org.openstreetmap.josm.gui.conflict.nodes.NodeListMerger;
+import org.openstreetmap.josm.gui.conflict.nodes.NodeListMergerTest;
+
+public class RelationMemberMergerTest extends JFrame {
+    
+    private RelationMemberMerger merger;
+    
+    protected void populate() {
+        Relation r1 = new Relation();
+        r1.members.add(new RelationMember("role1", new Node(1)));
+        r1.members.add(new RelationMember("role2", new Way(2)));
+        r1.members.add(new RelationMember("role3", new Relation(3)));
+
+        
+        Relation r2 = new Relation();
+        r2.members.add(new RelationMember("role1", new Node(1)));
+        r2.members.add(new RelationMember("role2", new Way(2)));
+        r2.members.add(new RelationMember("role3", new Relation(3)));
+        
+        merger.populate(r1, r2);
+
+    }
+    
+    protected void build() {
+        merger = new RelationMemberMerger();
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(merger, BorderLayout.CENTER);
+    }
+    
+    public RelationMemberMergerTest() {
+        build();
+        populate();
+    }
+    
+    static public void main(String args[]) {
+        RelationMemberMergerTest test = new RelationMemberMergerTest();
+        test.setSize(600,600);
+        test.setVisible(true);
+    }
+}
Index: trunk/test/functional/org/openstreetmap/josm/gui/conflict/tags/TagMergerTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/conflict/tags/TagMergerTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/conflict/tags/TagMergerTest.java	(revision 1707)
@@ -0,0 +1,38 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.conflict.tags;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JFrame;
+
+import org.openstreetmap.josm.gui.conflict.tags.TagMergeItem;
+import org.openstreetmap.josm.gui.conflict.tags.TagMerger;
+
+public class TagMergerTest extends JFrame {
+
+    private TagMerger tagMerger;
+    
+    protected void build() {
+        tagMerger = new TagMerger();
+        getContentPane().setLayout(new BorderLayout());
+        getContentPane().add(tagMerger, BorderLayout.CENTER);        
+    }
+    
+    public TagMergerTest() {
+        build();
+        tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", "theirvalue"));
+        tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", null));
+        tagMerger.getModel().addItem(new TagMergeItem("key", null, "theirvalue"));
+        tagMerger.getModel().addItem(new TagMergeItem("a very long key asdfasdf asdfasdf", "a very long value asdfasdf", "a very long value asdfasdf"));
+        for (int i=0; i< 50; i++) {
+          tagMerger.getModel().addItem(new TagMergeItem("key", "myvalue", "theirvalue"));
+        }
+    }
+    
+    public static void main(String args[]) {
+        TagMergerTest test  = new TagMergerTest();
+        test.setSize(600,600);
+        test.setVisible(true);
+    }
+    
+}
Index: trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialogTest.java	(revision 1707)
@@ -0,0 +1,46 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.dialogs;
+
+import javax.swing.JFrame;
+
+import org.openstreetmap.josm.data.osm.Node;
+import org.openstreetmap.josm.data.osm.Way;
+
+public class ConflictResolutionDialogTest extends JFrame {
+
+    private ConflictResolutionDialog dialog;
+    
+    protected void build() {
+        setSize(100,100);
+        dialog = new ConflictResolutionDialog(this);
+        dialog.setSize(600,600);
+        
+        
+    }
+    protected void populate() {
+        Way w1 = new Way(1);
+          w1.nodes.add(new Node(10));
+          w1.nodes.add(new Node(11));
+        
+        Way w2 = new Way(1);
+          w2.nodes.add(new Node(10));
+          w2.nodes.add(new Node(11));
+    
+       dialog.getConflictResolver().populate(w1, w2);
+    }
+    
+    public void showDialog() {
+        dialog.setVisible(true);
+    }
+    
+    public ConflictResolutionDialogTest() {
+        build();
+    }
+    
+    static public void main(String args[]) {
+        ConflictResolutionDialogTest test = new ConflictResolutionDialogTest();
+        test.setVisible(true);
+        test.populate();
+        test.showDialog();
+    }
+}
Index: trunk/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java
===================================================================
--- trunk/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java	(revision 1707)
+++ trunk/test/functional/org/openstreetmap/josm/gui/history/HistoryBrowserTest.java	(revision 1707)
@@ -0,0 +1,94 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.history;
+
+import static org.junit.Assert.fail;
+
+import java.awt.BorderLayout;
+import java.io.File;
+import java.text.MessageFormat;
+import java.util.Properties;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.swing.JFrame;
+
+import org.junit.BeforeClass;
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
+import org.openstreetmap.josm.data.osm.history.History;
+import org.openstreetmap.josm.data.osm.history.HistoryDataSet;
+import org.openstreetmap.josm.data.projection.Mercator;
+import org.openstreetmap.josm.gui.PleaseWaitDialog;
+import org.openstreetmap.josm.io.OsmServerHistoryReader;
+import org.openstreetmap.josm.io.OsmTransferException;
+
+public class HistoryBrowserTest extends JFrame {
+
+    static private Logger logger = Logger.getLogger(HistoryBrowserTest.class.getName());
+
+    static Properties testProperties;
+
+    @BeforeClass
+    static public void init() {
+        testProperties = new Properties();
+
+        // load properties
+        //
+        try {
+            testProperties.load(HistoryBrowserTest.class.getResourceAsStream("/test-functional-env.properties"));
+        } catch(Exception e){
+            logger.log(Level.SEVERE, MessageFormat.format("failed to load property file ''{0}''", "test-functional-env.properties"));
+            fail(MessageFormat.format("failed to load property file ''{0}''", "test-functional-env.properties"));
+        }
+
+        // check josm.home
+        //
+        String josmHome = testProperties.getProperty("josm.home");
+        if (josmHome == null) {
+            fail(MessageFormat.format("property ''{0}'' not set in test environment", "josm.home"));
+        } else {
+            File f = new File(josmHome);
+            if (! f.exists() || ! f.canRead()) {
+                fail(MessageFormat.format("property ''{0}'' points to ''{1}'' which is either not existing or not readable", "josm.home", josmHome));
+            }
+        }
+        System.setProperty("josm.home", josmHome);
+        Main.pleaseWaitDlg = new PleaseWaitDialog(null);
+        Main.pref.init(false);
+
+        // init projection
+        Main.proj = new Mercator();
+    }
+
+    private HistoryBrowser browser;
+
+    protected void build() {
+        setSize(500,500);
+        getContentPane().setLayout(new BorderLayout());
+        browser = new HistoryBrowser();
+        getContentPane().add(browser, BorderLayout.CENTER);
+    }
+
+    protected void populate(OsmPrimitiveType type, long id) {
+        OsmServerHistoryReader reader = new OsmServerHistoryReader(type, id);
+        HistoryDataSet ds = null;
+        try {
+            ds = reader.parseHistory();
+        } catch(OsmTransferException e) {
+            e.printStackTrace();
+            return;
+        }
+        History h = ds.getHistory(id);
+        browser.populate(h);
+    }
+
+    public HistoryBrowserTest(){
+        build();
+        populate(OsmPrimitiveType.NODE,354117);
+    }
+
+    static public void main(String args[]) {
+        HistoryBrowserTest.init();
+        new HistoryBrowserTest().setVisible(true);
+    }
+}
