-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
gyp: update xml string encoding conversion #1203
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import sys | ||
import locale | ||
|
||
reload(sys) | ||
|
||
def main(): | ||
encoding = locale.getdefaultlocale()[1] | ||
sys.setdefaultencoding(encoding) | ||
textmap = { | ||
'cp936': u'\u4e2d\u6587', | ||
'cp1252': u'Lat\u012Bna', | ||
'cp932': u'\u306b\u307b\u3093\u3054' | ||
} | ||
if textmap.has_key(encoding): | ||
print textmap[encoding] | ||
return True | ||
|
||
if __name__ == '__main__': | ||
print main() |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,10 +1,35 @@ | ||
'use strict' | ||
|
||
var test = require('tape') | ||
var execFile = require('child_process').execFile | ||
var path = require('path') | ||
var fs = require('graceful-fs') | ||
var child_process = require('child_process') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. question to @nodejs/node-gyp const { execFileSync, execFile } = require('child_process') Or do we test on pre ES6 versions? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I believe the CI still tests 0.10 and 0.12. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Not any more 😄 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @refack There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
var addonPath = path.resolve(__dirname, 'node_modules', 'hello_world') | ||
var nodeGyp = path.resolve(__dirname, '..', 'bin', 'node-gyp.js') | ||
var execFileSync = child_process.execFileSync | ||
var execFile = child_process.execFile | ||
|
||
function runHello() { | ||
var testCode = "console.log(require('hello_world').hello())" | ||
return execFileSync('node', ['-e', testCode], { cwd: __dirname }).toString() | ||
} | ||
|
||
function getEncoding() { | ||
var code = 'import locale;print locale.getdefaultlocale()[1]' | ||
return execFileSync('python', ['-c', code]).toString().trim() | ||
} | ||
|
||
function checkCharmapValid() { | ||
var data | ||
try { | ||
data = execFileSync('python', ['fixtures/test-charmap.py'], | ||
{ cwd: __dirname }) | ||
} catch (err) { | ||
return false | ||
} | ||
var lines = data.toString().trim().split('\n') | ||
return lines.pop() === 'True' | ||
} | ||
|
||
test('build simple addon', function (t) { | ||
t.plan(3) | ||
|
@@ -16,12 +41,72 @@ test('build simple addon', function (t) { | |
var lastLine = logLines[logLines.length-1] | ||
t.strictEqual(err, null) | ||
t.strictEqual(lastLine, 'gyp info ok', 'should end in ok') | ||
t.strictEqual(runHello().trim(), 'world') | ||
}) | ||
proc.stdout.setEncoding('utf-8') | ||
proc.stderr.setEncoding('utf-8') | ||
}) | ||
|
||
test('build simple addon in path with non-ascii characters', function (t) { | ||
t.plan(1) | ||
|
||
if (!checkCharmapValid()) { | ||
return t.skip('python console app can\'t encode non-ascii character.') | ||
} | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @refack I added the character map check, if python app can not convert non-ASCII characters, then skip this test. console output like this:
|
||
var testDirNames = { | ||
'cp936': '文件夹', | ||
'cp1252': 'Latīna', | ||
'cp932': 'フォルダ' | ||
} | ||
// Select non-ascii characters by current encoding | ||
var testDirName = testDirNames[getEncoding()] | ||
// If encoding is UTF-8 or other then no need to test | ||
if (!testDirName) { | ||
return t.skip('no need to test') | ||
} | ||
|
||
t.plan(3) | ||
|
||
var data, configPath = path.join(addonPath, 'build', 'config.gypi') | ||
try { | ||
data = fs.readFileSync(configPath, 'utf8') | ||
} catch (err) { | ||
t.error(err) | ||
return | ||
} | ||
var config = JSON.parse(data.replace(/\#.+\n/, '')) | ||
var nodeDir = config.variables.nodedir | ||
var testNodeDir = path.join(addonPath, testDirName) | ||
// Create symbol link to path with non-ascii characters | ||
try { | ||
fs.symlinkSync(nodeDir, testNodeDir, 'dir') | ||
} catch (err) { | ||
switch (err.code) { | ||
case 'EEXIST': break | ||
case 'EPERM': | ||
t.error(err, 'Please try to running console as an administrator') | ||
return | ||
default: | ||
t.error(err) | ||
return | ||
} | ||
} | ||
|
||
var cmd = [nodeGyp, 'rebuild', '-C', addonPath, | ||
'--loglevel=verbose', '-nodedir=' + testNodeDir] | ||
var proc = execFile(process.execPath, cmd, function (err, stdout, stderr) { | ||
try { | ||
var binding = require('hello_world') | ||
t.strictEqual(binding.hello(), 'world') | ||
} catch (error) { | ||
t.error(error, 'load module') | ||
fs.unlink(testNodeDir) | ||
} catch (err) { | ||
t.error(err) | ||
} | ||
|
||
var logLines = stderr.toString().trim().split(/\r?\n/) | ||
var lastLine = logLines[logLines.length-1] | ||
t.strictEqual(err, null) | ||
t.strictEqual(lastLine, 'gyp info ok', 'should end in ok') | ||
t.strictEqual(runHello().trim(), 'world') | ||
}) | ||
proc.stdout.setEncoding('utf-8') | ||
proc.stderr.setEncoding('utf-8') | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
should test
default_encoding and default_encoding.upper() != encoding.upper():