Skip to content

Commit d30824a

Browse files
committed
Make tests running on alternative locale
1 parent fff2b98 commit d30824a

File tree

5 files changed

+92
-61
lines changed

5 files changed

+92
-61
lines changed

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/jupyter/SampleNotebooksTests.kt

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import org.jetbrains.jupyter.parser.notebook.Output
66
import org.junit.Ignore
77
import org.junit.Test
88
import java.io.File
9+
import java.util.Locale
910

1011
class SampleNotebooksTests : DataFrameJupyterTest() {
1112
@Test
@@ -39,13 +40,23 @@ class SampleNotebooksTests : DataFrameJupyterTest() {
3940
)
4041

4142
@Test
42-
fun netflix() = exampleTest(
43-
"netflix",
44-
replacer = CodeReplacer.byMap(
45-
testFile("netflix", "country_codes.csv"),
46-
testFile("netflix", "netflix_titles.csv"),
47-
)
48-
)
43+
fun netflix() {
44+
val currentLocale = Locale.getDefault()
45+
try {
46+
// Set explicit locale as of test data contains locale-dependent values (date for parsing)
47+
Locale.setDefault(Locale.forLanguageTag("en-US"))
48+
49+
exampleTest(
50+
"netflix",
51+
replacer = CodeReplacer.byMap(
52+
testFile("netflix", "country_codes.csv"),
53+
testFile("netflix", "netflix_titles.csv"),
54+
)
55+
)
56+
} finally {
57+
Locale.setDefault(currentLocale)
58+
}
59+
}
4960

5061
@Test
5162
@Ignore

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/puzzles/BasicTests.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.jetbrains.kotlinx.dataframe.api.*
55
import org.jetbrains.kotlinx.dataframe.api.columnOf
66
import org.jetbrains.kotlinx.dataframe.api.dataFrameOf
77
import org.junit.Test
8+
import java.text.DecimalFormatSymbols
89
import kotlin.reflect.typeOf
910

1011
class BasicTests {
@@ -135,7 +136,8 @@ class BasicTests {
135136
fun `append and drop new row`() {
136137
val modifiedDf = df.append("dog", 5.5, 2, "no")
137138

138-
modifiedDf[10].toString() shouldBe "{ animal:dog, age:5.500000, visits:2, priority:no }"
139+
val d = DecimalFormatSymbols.getInstance().decimalSeparator
140+
modifiedDf[10].toString() shouldBe "{ animal:dog, age:5${d}500000, visits:2, priority:no }"
139141

140142
modifiedDf.dropLast() shouldBe df
141143
}

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/rendering/PrecisionTests.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import org.jetbrains.kotlinx.dataframe.io.RendererDecimalFormat
88
import org.jetbrains.kotlinx.dataframe.io.defaultPrecision
99
import org.jetbrains.kotlinx.dataframe.io.format
1010
import org.junit.Test
11+
import java.text.DecimalFormatSymbols
1112

1213
class PrecisionTests {
1314

@@ -26,8 +27,9 @@ class PrecisionTests {
2627

2728
@Test
2829
fun format() {
30+
val d = DecimalFormatSymbols.getInstance().decimalSeparator
2931
val value = 1.2341
30-
val expected = "1.23"
32+
val expected = "1${d}23"
3133
val digits = 2
3234
val formatter = RendererDecimalFormat.fromPrecision(digits)
3335
value.format(formatter) shouldBe expected

core/src/test/kotlin/org/jetbrains/kotlinx/dataframe/rendering/RenderingTests.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import org.jetbrains.kotlinx.dataframe.jupyter.RenderedContent
2323
import org.jsoup.Jsoup
2424
import org.junit.Test
2525
import java.net.URL
26+
import java.text.DecimalFormatSymbols
2627
import kotlin.reflect.typeOf
2728

2829
class RenderingTests {
@@ -108,10 +109,11 @@ class RenderingTests {
108109

109110
@Test
110111
fun `render double with exponent`() {
112+
val d = DecimalFormatSymbols.getInstance().decimalSeparator
111113
listOf(
112-
dataFrameOf("col")(1E27) to "1.000000e+27",
113-
dataFrameOf("col")(1.123) to "1.123",
114-
dataFrameOf("col")(1.0) to "1.0",
114+
dataFrameOf("col")(1E27) to "1${d}000000e+27",
115+
dataFrameOf("col")(1.123) to "1${d}123",
116+
dataFrameOf("col")(1.0) to "1${d}0",
115117
).forEach { (df, rendered) ->
116118
df.toHTML().script shouldContain rendered
117119
}

tests/src/test/kotlin/org/jetbrains/kotlinx/dataframe/api/parse.kt

Lines changed: 63 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import org.jetbrains.kotlinx.dataframe.type
99
import org.junit.Test
1010
import java.time.LocalTime
1111
import java.time.Month
12+
import java.util.Locale
1213
import kotlin.reflect.typeOf
1314
import kotlin.time.Duration.Companion.days
1415
import kotlin.time.Duration.Companion.hours
@@ -18,61 +19,74 @@ import kotlin.time.Duration.Companion.seconds
1819
class ParseTests {
1920
@Test
2021
fun parseDate() {
21-
val date by columnOf("January 1, 2020")
22-
val pattern = "MMMM d, yyyy"
23-
24-
val parsed = date.parse(ParserOptions(dateTimePattern = pattern)).cast<LocalDate>()
25-
26-
parsed.type() shouldBe typeOf<LocalDate>()
27-
with(parsed[0]) {
28-
month shouldBe Month.JANUARY
29-
dayOfMonth shouldBe 1
30-
year shouldBe 2020
22+
val currentLocale = Locale.getDefault()
23+
try {
24+
Locale.setDefault(Locale.forLanguageTag("en-US"))
25+
val date by columnOf("January 1, 2020")
26+
val pattern = "MMMM d, yyyy"
27+
28+
val parsed = date.parse(ParserOptions(dateTimePattern = pattern)).cast<LocalDate>()
29+
30+
parsed.type() shouldBe typeOf<LocalDate>()
31+
with(parsed[0]) {
32+
month shouldBe Month.JANUARY
33+
dayOfMonth shouldBe 1
34+
year shouldBe 2020
35+
}
36+
37+
date.convertToLocalDate(pattern) shouldBe parsed
38+
with(date.toDataFrame()) {
39+
convert { date }.toLocalDate(pattern)[date] shouldBe parsed
40+
parse(ParserOptions(dateTimePattern = pattern))[date] shouldBe parsed
41+
}
42+
43+
DataFrame.parser.addDateTimePattern(pattern)
44+
45+
date.parse() shouldBe parsed
46+
date.convertToLocalDate() shouldBe parsed
47+
48+
DataFrame.parser.resetToDefault()
49+
} finally {
50+
Locale.setDefault(currentLocale)
3151
}
32-
33-
date.convertToLocalDate(pattern) shouldBe parsed
34-
with(date.toDataFrame()) {
35-
convert { date }.toLocalDate(pattern)[date] shouldBe parsed
36-
parse(ParserOptions(dateTimePattern = pattern))[date] shouldBe parsed
37-
}
38-
39-
DataFrame.parser.addDateTimePattern(pattern)
40-
41-
date.parse() shouldBe parsed
42-
date.convertToLocalDate() shouldBe parsed
43-
44-
DataFrame.parser.resetToDefault()
4552
}
4653

4754
@Test
4855
fun parseDateTime() {
49-
val dateTime by columnOf("3 Jun 2008 13:05:30")
50-
val pattern = "d MMM yyyy HH:mm:ss"
51-
52-
val parsed = dateTime.parse(ParserOptions(dateTimePattern = pattern)).cast<LocalDateTime>()
53-
54-
parsed.type() shouldBe typeOf<LocalDateTime>()
55-
with(parsed[0]) {
56-
month shouldBe Month.JUNE
57-
dayOfMonth shouldBe 3
58-
year shouldBe 2008
59-
hour shouldBe 13
60-
minute shouldBe 5
61-
second shouldBe 30
62-
}
63-
64-
dateTime.convertToLocalDateTime(pattern) shouldBe parsed
65-
with(dateTime.toDataFrame()) {
66-
convert { dateTime }.toLocalDateTime(pattern)[dateTime] shouldBe parsed
67-
parse(ParserOptions(dateTimePattern = pattern))[dateTime] shouldBe parsed
56+
val currentLocale = Locale.getDefault()
57+
try {
58+
Locale.setDefault(Locale.forLanguageTag("en-US"))
59+
val dateTime by columnOf("3 Jun 2008 13:05:30")
60+
val pattern = "d MMM yyyy HH:mm:ss"
61+
val locale = Locale.forLanguageTag("en-US")
62+
63+
val parsed = dateTime.parse(ParserOptions(dateTimePattern = pattern, locale = locale)).cast<LocalDateTime>()
64+
65+
parsed.type() shouldBe typeOf<LocalDateTime>()
66+
with(parsed[0]) {
67+
month shouldBe Month.JUNE
68+
dayOfMonth shouldBe 3
69+
year shouldBe 2008
70+
hour shouldBe 13
71+
minute shouldBe 5
72+
second shouldBe 30
73+
}
74+
75+
dateTime.convertToLocalDateTime(pattern, locale) shouldBe parsed
76+
with(dateTime.toDataFrame()) {
77+
convert { dateTime }.toLocalDateTime(pattern)[dateTime] shouldBe parsed
78+
parse(ParserOptions(dateTimePattern = pattern))[dateTime] shouldBe parsed
79+
}
80+
81+
DataFrame.parser.addDateTimePattern(pattern)
82+
83+
dateTime.parse(ParserOptions(locale = locale)) shouldBe parsed
84+
dateTime.convertToLocalDateTime(pattern, locale) shouldBe parsed
85+
86+
DataFrame.parser.resetToDefault()
87+
} finally {
88+
Locale.setDefault(currentLocale)
6889
}
69-
70-
DataFrame.parser.addDateTimePattern(pattern)
71-
72-
dateTime.parse() shouldBe parsed
73-
dateTime.convertToLocalDateTime() shouldBe parsed
74-
75-
DataFrame.parser.resetToDefault()
7690
}
7791

7892
@Test

0 commit comments

Comments
 (0)