From 46f97d32414542383fda2c7cc5a233aa0df3e23b Mon Sep 17 00:00:00 2001 From: Matheus Date: Tue, 12 Jul 2016 23:15:40 -0300 Subject: [PATCH] Do not attempt to translate from and/or to unsupported languages --- index.js | 15 +++++++++++++++ test.js | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/index.js b/index.js index 9c5f44de..fd95da9a 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,21 @@ var languages = require('./languages'); function translate(text, opts) { opts = opts || {}; + + var e; + [opts.from, opts.to].forEach(function (lang) { + if (lang && lang !== 'auto' && !languages.isSupported(lang)) { + e = new Error(); + e.code = 400; + e.message = 'The language \'' + lang + '\' is not supported'; + } + }); + if (e) { + return new Promise(function (resolve, reject) { + reject(e); + }); + } + return token.get(text).then(function (token) { var url = 'https://translate.google.com/translate_a/single'; var data = { diff --git a/test.js b/test.js index 3c344803..eb31fdfa 100644 --- a/test.js +++ b/test.js @@ -96,3 +96,23 @@ test('get a language code by its name', t => { test('get an unsupported language code by its name', t => { t.false(languages.getCode('javascript')); }); + +test('try to translate from an unsupported language', async t => { + try { + await translate('something', {from: 'js', to: 'en'}); + t.fail(); + } catch (err) { + t.is(err.code, 400); + t.is(err.message, 'The language \'js\' is not supported'); + } +}); + +test('try to translate to an unsupported language', async t => { + try { + await translate('something', {from: 'en', to: 'js'}); + t.fail(); + } catch (err) { + t.is(err.code, 400); + t.is(err.message, 'The language \'js\' is not supported'); + } +});