// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui;
import static org.junit.Assert.assertEquals;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openstreetmap.josm.JOSMFixture;
import org.openstreetmap.josm.data.SystemOfMeasurement;
/**
* Unit tests of {@link SystemOfMeasurement} class.
*/
public class SystemOfMeasurementTest {
/**
* Setup test.
*/
@BeforeClass
public static void setUp() {
JOSMFixture.createUnitTestFixture().init();
}
/**
* Test of {@link SystemOfMeasurement#getDistText} method.
*/
@Test
public void testGetDistText() {
assertEquals("< 0.01 m", SystemOfMeasurement.METRIC.getDistText(-1));
assertEquals("< 0.01 m", SystemOfMeasurement.METRIC.getDistText(-0.99));
assertEquals("< 0.01 m", SystemOfMeasurement.METRIC.getDistText(-0));
assertEquals("< 0.01 m", SystemOfMeasurement.METRIC.getDistText(0));
assertEquals("0.01 m", SystemOfMeasurement.METRIC.getDistText(0.01));
assertEquals("0.99 m", SystemOfMeasurement.METRIC.getDistText(0.99));
assertEquals("1.00 m", SystemOfMeasurement.METRIC.getDistText(1.0));
assertEquals("1.01 m", SystemOfMeasurement.METRIC.getDistText(1.01));
assertEquals("9.99 m", SystemOfMeasurement.METRIC.getDistText(9.99));
assertEquals("10.0 m", SystemOfMeasurement.METRIC.getDistText(10.0));
assertEquals("10.0 m", SystemOfMeasurement.METRIC.getDistText(10.01));
assertEquals("10.0 m", SystemOfMeasurement.METRIC.getDistText(10.049));
assertEquals("10.1 m", SystemOfMeasurement.METRIC.getDistText(10.050));
assertEquals("10.1 m", SystemOfMeasurement.METRIC.getDistText(10.051));
assertEquals("100.0 m", SystemOfMeasurement.METRIC.getDistText(99.99));
assertEquals("100.0 m", SystemOfMeasurement.METRIC.getDistText(100.0));
assertEquals("100.0 m", SystemOfMeasurement.METRIC.getDistText(100.01));
assertEquals("1000.0 m", SystemOfMeasurement.METRIC.getDistText(999.99)); // TODO ? 1.00 km should be better
assertEquals("1000.0 m", SystemOfMeasurement.METRIC.getDistText(1000.0)); // TODO ? 1.00 km should be better
assertEquals("1.00 km", SystemOfMeasurement.METRIC.getDistText(1000.01));
assertEquals("10.00 km", SystemOfMeasurement.METRIC.getDistText(9999.99)); // TODO ? 10.0 km should be better
assertEquals("10.0 km", SystemOfMeasurement.METRIC.getDistText(10000.0));
assertEquals("10.0 km", SystemOfMeasurement.METRIC.getDistText(10000.01));
assertEquals("100.0 km", SystemOfMeasurement.METRIC.getDistText(99999.99));
assertEquals("100.0 km", SystemOfMeasurement.METRIC.getDistText(100000.0));
assertEquals("100.0 km", SystemOfMeasurement.METRIC.getDistText(100000.01));
}
/**
* Test of {@link SystemOfMeasurement#getDistText} method with a non-English locale.
*/
@Test
public void testGetDistTextLocalized() {
final DecimalFormat format = new DecimalFormat("0.000", DecimalFormatSymbols.getInstance(Locale.GERMAN));
assertEquals("0,001 m", SystemOfMeasurement.METRIC.getDistText(0.001, format, 1e-6));
assertEquals("< 0,010 m", SystemOfMeasurement.METRIC.getDistText(0.001, format, 0.01));
assertEquals("10,051 m", SystemOfMeasurement.METRIC.getDistText(10.0514, format, 0.01));
assertEquals("10,052 m", SystemOfMeasurement.METRIC.getDistText(10.0515, format, 0.01));
assertEquals("100,000 km", SystemOfMeasurement.METRIC.getDistText(100000.0, format, 0.01));
}
/**
* Test of {@link SystemOfMeasurement#getAreaText} method.
*/
@Test
public void testGetAreaText() {
assertEquals("< 0.01 m²", SystemOfMeasurement.METRIC.getAreaText(-1));
assertEquals("< 0.01 m²", SystemOfMeasurement.METRIC.getAreaText(-0.99));
assertEquals("< 0.01 m²", SystemOfMeasurement.METRIC.getAreaText(-0));
assertEquals("< 0.01 m²", SystemOfMeasurement.METRIC.getAreaText(0));
assertEquals("0.01 m²", SystemOfMeasurement.METRIC.getAreaText(0.01));
assertEquals("0.99 m²", SystemOfMeasurement.METRIC.getAreaText(0.99));
assertEquals("1.00 m²", SystemOfMeasurement.METRIC.getAreaText(1.0));
assertEquals("1.01 m²", SystemOfMeasurement.METRIC.getAreaText(1.01));
assertEquals("9.99 m²", SystemOfMeasurement.METRIC.getAreaText(9.99));
assertEquals("10.0 m²", SystemOfMeasurement.METRIC.getAreaText(10.0));
assertEquals("10.0 m²", SystemOfMeasurement.METRIC.getAreaText(10.01));
assertEquals("10.0 m²", SystemOfMeasurement.METRIC.getAreaText(10.049));
assertEquals("10.1 m²", SystemOfMeasurement.METRIC.getAreaText(10.050));
assertEquals("10.1 m²", SystemOfMeasurement.METRIC.getAreaText(10.051));
assertEquals("100.0 m²", SystemOfMeasurement.METRIC.getAreaText(99.99));
assertEquals("100.0 m²", SystemOfMeasurement.METRIC.getAreaText(100.0));
assertEquals("100.0 m²", SystemOfMeasurement.METRIC.getAreaText(100.01));
assertEquals("1000.0 m²", SystemOfMeasurement.METRIC.getAreaText(999.99));
assertEquals("1000.0 m²", SystemOfMeasurement.METRIC.getAreaText(1000.0));
assertEquals("1000.0 m²", SystemOfMeasurement.METRIC.getAreaText(1000.01));
assertEquals("10000.0 m²", SystemOfMeasurement.METRIC.getAreaText(9999.99)); // TODO ? 1.00 ha should be better
assertEquals("10000.0 m²", SystemOfMeasurement.METRIC.getAreaText(10000.0)); // TODO ? 1.00 ha should be better
assertEquals("1.00 ha", SystemOfMeasurement.METRIC.getAreaText(10000.01));
assertEquals("10.0 ha", SystemOfMeasurement.METRIC.getAreaText(99999.99));
assertEquals("10.0 ha", SystemOfMeasurement.METRIC.getAreaText(100000.0));
assertEquals("10.0 ha", SystemOfMeasurement.METRIC.getAreaText(100000.01));
assertEquals("100.0 ha", SystemOfMeasurement.METRIC.getAreaText(999999.99)); // TODO ? 1.00 km² should be better
assertEquals("1.00 km²", SystemOfMeasurement.METRIC.getAreaText(1000000.0));
assertEquals("1.00 km²", SystemOfMeasurement.METRIC.getAreaText(1000000.01));
assertEquals("10.0 km²", SystemOfMeasurement.METRIC.getAreaText(9999999.99));
assertEquals("10.0 km²", SystemOfMeasurement.METRIC.getAreaText(10000000.0));
assertEquals("10.0 km²", SystemOfMeasurement.METRIC.getAreaText(10000000.01));
}
}