import java.util.Arrays;
import java.util.Collections;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
/**
@VisibleForTesting
static String formatFloatAttribute(float value) {
if (value != (int) value) {
- return String.format("%.2f", value); //$NON-NLS-1$
+ // Run String.format without a locale, because we don't want locale-specific
+ // conversions here like separating the decimal part with a comma instead of a dot!
+ return String.format((Locale) null, "%.2f", value); //$NON-NLS-1$
} else {
return Integer.toString((int) value);
}
import com.android.ide.common.api.INode;
import com.android.ide.common.api.IViewRule;
import com.android.ide.common.api.MenuAction;
+import com.android.ide.common.api.MenuAction.Choices;
import com.android.ide.common.api.Point;
import com.android.ide.common.api.Rect;
-import com.android.ide.common.api.MenuAction.Choices;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
/** Test the {@link LinearLayoutRule} */
assertEquals("-1", LinearLayoutRule.formatFloatAttribute(-1f));
}
+ public void testFormatFloatValueLocale() throws Exception {
+ // Ensure that the layout float values aren't affected by
+ // locale settings, like using commas instead of of periods
+ Locale originalDefaultLocale = Locale.getDefault();
+
+ try {
+ Locale.setDefault(Locale.FRENCH);
+
+ // Ensure that this is a locale which uses a comma instead of a period:
+ assertEquals("5,24", String.format("%.2f", 5.236f));
+
+ // Ensure that the formatFloatAttribute is immune
+ assertEquals("1.50", LinearLayoutRule.formatFloatAttribute(1.5f));
+ } finally {
+ Locale.setDefault(originalDefaultLocale);
+ }
+ }
+
// Left to test:
// Check inserting at last pos with multiple children
// Check inserting with no bounds rectangle for dragged element