summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Noordhuis <info@bnoordhuis.nl>2017-02-11 14:00:22 +0100
committerBen Noordhuis <info@bnoordhuis.nl>2017-02-11 15:23:51 +0100
commit46345b937448dbeac54f33bd3a8d38be4c1dc1ef (patch)
tree19d5223d5a8e44b6a5d9afcba198cc05b927dbcc
parent75019dfa67f37245ff099eebc61199272696e9f4 (diff)
downloadandroid-node-v8-46345b937448dbeac54f33bd3a8d38be4c1dc1ef.tar.gz
android-node-v8-46345b937448dbeac54f33bd3a8d38be4c1dc1ef.tar.bz2
android-node-v8-46345b937448dbeac54f33bd3a8d38be4c1dc1ef.zip
src: make --icu-data-dir= switch testable
Move some code around so we can properly test whether the switch actually does anything. PR-URL: https://github.com/nodejs/node/pull/11255 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com>
-rw-r--r--lib/internal/process.js4
-rw-r--r--src/node.cc13
-rw-r--r--src/node_config.cc7
-rw-r--r--src/node_i18n.cc3
-rw-r--r--src/node_i18n.h2
-rw-r--r--test/parallel/test-intl-no-icu-data.js7
6 files changed, 15 insertions, 21 deletions
diff --git a/lib/internal/process.js b/lib/internal/process.js
index 3f050b42ca..47c2c69b3e 100644
--- a/lib/internal/process.js
+++ b/lib/internal/process.js
@@ -124,7 +124,7 @@ function setupConfig(_source) {
const oldV8BreakIterator = Intl.v8BreakIterator;
const des = Object.getOwnPropertyDescriptor(Intl, 'v8BreakIterator');
des.value = require('internal/util').deprecate(function v8BreakIterator() {
- if (processConfig.hasSmallICU && !process.icu_data_dir) {
+ if (processConfig.hasSmallICU && !processConfig.icuDataDir) {
// Intl.v8BreakIterator() would crash w/ fatal error, so throw instead.
throw new Error('v8BreakIterator: full ICU data not installed. ' +
'See https://github.com/nodejs/node/wiki/Intl');
@@ -134,8 +134,6 @@ function setupConfig(_source) {
'DEP0017');
Object.defineProperty(Intl, 'v8BreakIterator', des);
}
- // Don’t let icu_data_dir leak through.
- delete process.icu_data_dir;
}
diff --git a/src/node.cc b/src/node.cc
index 040f9f597a..fc4ac88ba3 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -156,7 +156,7 @@ static const char* trace_enabled_categories = nullptr;
#if defined(NODE_HAVE_I18N_SUPPORT)
// Path to ICU data (for i18n / Intl)
-static std::string icu_data_dir; // NOLINT(runtime/string)
+std::string icu_data_dir; // NOLINT(runtime/string)
#endif
// used by C++ modules as well
@@ -3095,17 +3095,6 @@ void SetupProcessObject(Environment* env,
"ares",
FIXED_ONE_BYTE_STRING(env->isolate(), ARES_VERSION_STR));
-#if defined(NODE_HAVE_I18N_SUPPORT) && defined(U_ICU_VERSION)
- // ICU-related versions are now handled on the js side, see bootstrap_node.js
-
- if (!icu_data_dir.empty()) {
- // Did the user attempt (via env var or parameter) to set an ICU path?
- READONLY_PROPERTY(process,
- "icu_data_dir",
- OneByteString(env->isolate(), icu_data_dir.c_str()));
- }
-#endif
-
const char node_modules_version[] = NODE_STRINGIFY(NODE_MODULE_VERSION);
READONLY_PROPERTY(
versions,
diff --git a/src/node_config.cc b/src/node_config.cc
index a096372812..5c9c51585b 100644
--- a/src/node_config.cc
+++ b/src/node_config.cc
@@ -39,8 +39,11 @@ void InitConfig(Local<Object> target,
READONLY_BOOLEAN_PROPERTY("hasSmallICU");
#endif // NODE_HAVE_SMALL_ICU
- if (flag_icu_data_dir)
- READONLY_BOOLEAN_PROPERTY("usingICUDataDir");
+ target->DefineOwnProperty(env->context(),
+ OneByteString(env->isolate(), "icuDataDir"),
+ OneByteString(env->isolate(), icu_data_dir.data()))
+ .FromJust();
+
#endif // NODE_HAVE_I18N_SUPPORT
if (config_preserve_symlinks)
diff --git a/src/node_i18n.cc b/src/node_i18n.cc
index 40d048fa36..648012a506 100644
--- a/src/node_i18n.cc
+++ b/src/node_i18n.cc
@@ -70,8 +70,6 @@ using v8::Object;
using v8::String;
using v8::Value;
-bool flag_icu_data_dir = false;
-
namespace i18n {
const size_t kStorageSize = 1024;
@@ -415,7 +413,6 @@ bool InitializeICUDirectory(const std::string& path) {
#endif // !NODE_HAVE_SMALL_ICU
return (status == U_ZERO_ERROR);
} else {
- flag_icu_data_dir = true;
u_setDataDirectory(path.c_str());
return true; // No error.
}
diff --git a/src/node_i18n.h b/src/node_i18n.h
index 0bfd3c5c85..21567eeb3e 100644
--- a/src/node_i18n.h
+++ b/src/node_i18n.h
@@ -10,7 +10,7 @@
namespace node {
-extern bool flag_icu_data_dir;
+extern std::string icu_data_dir; // NOLINT(runtime/string)
namespace i18n {
diff --git a/test/parallel/test-intl-no-icu-data.js b/test/parallel/test-intl-no-icu-data.js
new file mode 100644
index 0000000000..dd14c14671
--- /dev/null
+++ b/test/parallel/test-intl-no-icu-data.js
@@ -0,0 +1,7 @@
+// Flags: --icu-data-dir=test/fixtures/empty/
+'use strict';
+require('../common');
+const assert = require('assert');
+
+// No-op when ICU case mappings are unavailable.
+assert.strictEqual('ç'.toLocaleUpperCase('el'), 'ç');