diff --git a/src/main/java/eu/siacs/conversations/entities/Conversation.java b/src/main/java/eu/siacs/conversations/entities/Conversation.java index 492f11503aadbb336581951b3ccf65dca6a56b03..175c67be0208f3c1666553a14086403d458d4b33 100644 --- a/src/main/java/eu/siacs/conversations/entities/Conversation.java +++ b/src/main/java/eu/siacs/conversations/entities/Conversation.java @@ -189,6 +189,10 @@ public class Conversation extends AbstractEntity public static final String MODE = "mode"; public static final String ATTRIBUTES = "attributes"; + static String truncatedAttributesColumn() { + return "SUBSTR(" + ATTRIBUTES + ", 0, " + (Short.MAX_VALUE << 1) + ") AS " + ATTRIBUTES; + } + public static final String[] ALL_COLUMNS = new String[] { UUID, NAME, @@ -198,12 +202,7 @@ public class Conversation extends AbstractEntity STATUS, CREATED, MODE, - String.format( - "SUBSTR(%s, 0, %d) AS %s", - ATTRIBUTES, - Short.MAX_VALUE << 1, - ATTRIBUTES - ) + truncatedAttributesColumn() }; diff --git a/src/test/java/eu/siacs/conversations/entities/ConversationAllColumnsLocaleTest.java b/src/test/java/eu/siacs/conversations/entities/ConversationAllColumnsLocaleTest.java new file mode 100644 index 0000000000000000000000000000000000000000..e0866738f56695c0f597237058ee434a442c05f1 --- /dev/null +++ b/src/test/java/eu/siacs/conversations/entities/ConversationAllColumnsLocaleTest.java @@ -0,0 +1,42 @@ +package eu.siacs.conversations.entities; + +import static org.junit.Assert.assertEquals; + +import java.util.Locale; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.ConscryptMode; + +import android.os.Build; +import eu.siacs.conversations.Conversations; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = Build.VERSION_CODES.TIRAMISU, application = Conversations.class) +@ConscryptMode(ConscryptMode.Mode.OFF) +public class ConversationAllColumnsLocaleTest { + private Locale originalLocale; + + @Before + public void setUp() { + originalLocale = Locale.getDefault(); + Locale.setDefault(new Locale("fa")); + } + + @After + public void tearDown() { + Locale.setDefault(originalLocale); + } + + @Test + public void truncatedAttributesColumnUsesAsciiDigits() { + assertEquals( + "SUBSTR(attributes, 0, 65534) AS attributes", + Conversation.truncatedAttributesColumn() + ); + } +}