mirror of
https://github.com/rstudio/shiny.git
synced 2026-01-08 22:48:21 -05:00
57 lines
1.8 KiB
R
57 lines
1.8 KiB
R
# Assume the working dir is the root dir of the shiny source package, and the
|
|
# shiny-examples repo (https://github.com/rstudio/shiny-examples) is under the
|
|
# same dir as the shiny package
|
|
library(shiny)
|
|
|
|
|
|
# Get the current locale settings in a named vector. According to
|
|
# ?Sys.setlocale, only some categories are set when setting LC_ALL. Since these
|
|
# tests set LC_ALL, we only need to keep these categories to restore later. Also,
|
|
# trying to restore some categories with Sys.setlocale will result in an error;
|
|
# these categories should be OK.
|
|
getLocale <- function() {
|
|
categories <- c("LC_COLLATE", "LC_CTYPE", "LC_MONETARY", "LC_TIME")
|
|
|
|
locale <- strsplit(Sys.getlocale(), ";")[[1]]
|
|
names(locale) <- sub("=.*", "", locale)
|
|
locale <- sub(".*=", "", locale)
|
|
locale <- locale[names(locale) %in% categories]
|
|
locale
|
|
}
|
|
|
|
restoreLocale <- function(locale) {
|
|
mapply(Sys.setlocale, names(locale), locale)
|
|
}
|
|
|
|
withLocale <- function(locale, expr) {
|
|
oldLocale <- getLocale()
|
|
on.exit(restoreLocale(oldLocale))
|
|
Sys.setlocale(locale = locale)
|
|
|
|
force(expr)
|
|
}
|
|
|
|
|
|
if (.Platform$OS.type == 'windows') {
|
|
locales <- c('Chinese', 'English')
|
|
} else {
|
|
# On non-Windows, only test with the default locale
|
|
locales <- getLocale()["LC_CTYPE"]
|
|
}
|
|
|
|
apps <- list.files('tests/test-encoding/', '^[0-9]{2}-', full.names = TRUE)
|
|
apps <- c(apps, '../shiny-examples/022-unicode-chinese/')
|
|
|
|
# Run these apps in the RStudio preview window one by one in different locales.
|
|
# Note 022-unicode-chinese may not work well in the English locale (explained at
|
|
# https://github.com/rstudio/shiny/pull/968)
|
|
for (app in apps) {
|
|
for (locale in locales) {
|
|
withLocale(locale, {
|
|
cat("Running app: ", app, "\n")
|
|
cat("Locale: ", Sys.setlocale(locale = locale))
|
|
tryCatch(shiny::runApp(app), interrupt = function(e) {})
|
|
})
|
|
}
|
|
}
|