source: josm/trunk/test/unit/org/openstreetmap/josm/gui/conflict/properties/PropertiesMergeModelTest.java@ 4126

Last change on this file since 4126 was 4126, checked in by bastiK, 13 years ago

memory optimizations for Node & WayPoint (Patch by Gubaer, modified)

The field 'proj' in CachedLatLon is a waste of memory. For the 2 classes where this has the greatest impact, the cache for the projected coordinates is replaced by 2 simple double fields (east & north). On projection change, they have to be invalidated explicitly. This is handled by the DataSet & the GpxLayer.

File size: 4.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.conflict.properties;
3
4import static org.junit.Assert.assertEquals;
5import static org.junit.Assert.assertFalse;
6import static org.junit.Assert.assertTrue;
7
8import java.util.Observable;
9import java.util.Observer;
10
11import org.junit.Before;
12import org.junit.BeforeClass;
13import org.junit.Test;
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.data.Preferences;
16import org.openstreetmap.josm.data.conflict.Conflict;
17import org.openstreetmap.josm.data.coor.LatLon;
18import org.openstreetmap.josm.data.osm.DataSet;
19import org.openstreetmap.josm.data.osm.Node;
20import org.openstreetmap.josm.data.osm.OsmPrimitive;
21import org.openstreetmap.josm.data.osm.Relation;
22import org.openstreetmap.josm.data.osm.Way;
23import org.openstreetmap.josm.data.projection.Epsg4326;
24import org.openstreetmap.josm.gui.conflict.pair.MergeDecisionType;
25import org.openstreetmap.josm.gui.conflict.pair.properties.PropertiesMergeModel;
26
27public class PropertiesMergeModelTest {
28
29 static public class ObserverTest implements Observer {
30 public int numInvocations;
31
32 public void update(Observable o, Object arg) {
33 numInvocations++;
34 test();
35 }
36
37 public void test() {
38 }
39
40 public void assertNumInvocations(int count) {
41 assertEquals(count, numInvocations);
42 }
43 }
44
45 PropertiesMergeModel model;
46
47 @BeforeClass
48 public static void init() {
49 Main.setProjection(new Epsg4326());
50 Main.pref = new Preferences();
51 }
52
53 @Before
54 public void setUp() {
55 model = new PropertiesMergeModel();
56 }
57
58 private void populate(OsmPrimitive my, OsmPrimitive their) {
59 model.populate(new Conflict<OsmPrimitive>(my, their));
60 }
61
62 @Test
63 public void populate() {
64 DataSet d1 = new DataSet();
65 DataSet d2 = new DataSet();
66 Node n1 = new Node(1);
67 Node n2 = new Node(1);
68 d1.addPrimitive(n1);
69 d2.addPrimitive(n2);
70 populate(n1, n2);
71
72 Way w1 = new Way(1);
73 Way w2 = new Way(1);
74 d1.addPrimitive(w1);
75 d2.addPrimitive(w2);
76 populate(w2, w2);
77
78 Relation r1 = new Relation(1);
79 Relation r2 = new Relation(1);
80 d1.addPrimitive(r1);
81 d2.addPrimitive(r2);
82 populate(r1, r2);
83 }
84
85 @Test
86 public void decidingAboutCoords() {
87 DataSet d1 = new DataSet();
88 DataSet d2 = new DataSet();
89
90 Node n1 = new Node(1);
91 Node n2 = new Node(1);
92 d1.addPrimitive(n1);
93 d2.addPrimitive(n2);
94 populate(n1, n2);
95 assertFalse(model.hasCoordConflict());
96
97 n1.setCoor(new LatLon(1,1));
98 populate(n1, n2);
99 assertTrue(model.hasCoordConflict());
100
101
102 n1.cloneFrom(new Node(1));
103 n2.setCoor(new LatLon(2,2));
104 populate(n1, n2);
105 assertTrue(model.hasCoordConflict());
106
107 n1.setCoor(new LatLon(1,1));
108 n2.setCoor(new LatLon(2,2));
109 populate(n1, n2);
110 assertTrue(model.hasCoordConflict());
111
112 // decide KEEP_MINE and ensure notification via Observable
113 //
114 ObserverTest observerTest;
115 model.addObserver(
116 observerTest = new ObserverTest() {
117 @Override
118 public void test() {
119 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
120 }
121 }
122 );
123 model.decideCoordsConflict(MergeDecisionType.KEEP_MINE);
124 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_MINE));
125 observerTest.assertNumInvocations(1);
126
127 // decide KEEP_THEIR and ensure notification via Observable
128 //
129 model.deleteObserver(observerTest);
130 model.addObserver(
131 observerTest = new ObserverTest() {
132 @Override
133 public void test() {
134 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
135 }
136 }
137 );
138 model.decideCoordsConflict(MergeDecisionType.KEEP_THEIR);
139 assertTrue(model.isCoordMergeDecision(MergeDecisionType.KEEP_THEIR));
140 observerTest.assertNumInvocations(1);
141 model.deleteObserver(observerTest);
142 }
143
144
145}
Note: See TracBrowser for help on using the repository browser.