ez-localize
Version:
Super-simple localization of strings in a Node/Browserify application
128 lines (117 loc) • 3.33 kB
text/typescript
import { assert } from "chai"
import * as stringExtractor from "../src/extractor/stringExtractor"
describe("stringExtractor", function () {
this.timeout(20000)
describe("findInJs", function () {
it("finds strings", function () {
const code = `\
var func = function() {
var x = 5;
console.log(T("test1"));
console.log(T('test2'));
console.log(T('test"quote'));
console.log(T("test\\"quote2"));
console.log(T\`test3\`);
console.log(T\`test4 \${x}\ \${y}\`);
console.log(T({locale: "es", text: "dog"}));
console.log(\`Not this \${x}\ \${y}\`);
console.log(S\`Not this \${x}\ \${y}\`);
console.log(T({locale: "en", text: { _base: "en", en: "NOT THIS" }}));
}\
`
assert.deepEqual(stringExtractor.findInJs(code), ["test1", "test2", 'test"quote', 'test"quote2', "test3", "test4 {0} {1}", "dog"])
})
it("ignores non-strings", function () {
const code = `\
var func = function() {
var x = 5;
console.log(T(3));
console.log(T(x));
console.log(T("test"));
}\
`
assert.deepEqual(stringExtractor.findInJs(code), ["test"])
})
return it("finds T calls on objects", function () {
const code = `\
var func = function() {
var ctx = {};
var obj = {};
console.log(ctx.T("test1"));
console.log(obj.ctx.T("test2"));
console.log(this.ctx.T("test3"));
console.log(ctx.T({locale: "es", text: "dog"}));
}\
`
assert.deepEqual(stringExtractor.findInJs(code), ["test1", "test2", "test3", "dog"])
})
})
describe("findInHbs", function () {
it("finds strings", function () {
const code = `\
{{T 'some string'}}
T 'not this'
{{T "another string"}}\
`
assert.deepEqual(stringExtractor.findInHbs(code), ["some string", "another string"])
})
it("finds strings in clauses", function () {
const code = `\
{{#if x}}
{{T 'some string'}}
{{#each y}}
{{T "another string"}}
{{/each}}
{{/if}}\
`
return assert.deepEqual(stringExtractor.findInHbs(code), ["some string", "another string"])
})
it("allows empty clauses", function () {
const code = `\
{{#if x}}{{/if}}
{{#each y}}{{/each}}\
`
return assert.deepEqual(stringExtractor.findInHbs(code), [])
})
return it("finds strings in else clauses", function () {
const code = `\
{{#if x}}
{{T 'some string'}}
{{else}}
{{T "another string"}}
{{/if}}\
`
return assert.deepEqual(stringExtractor.findInHbs(code), ["some string", "another string"])
})
})
describe("findInTs", function () {
it("finds strings", function () {
const code = `\
export default function(x: any) {
window.T("SDFSDF")
return x
}\
`
return assert.deepEqual(stringExtractor.findInTs(code), ["SDFSDF"])
})
return it("finds strings in tsx", function () {
const code = `\
class Chip extends React.Component<any, any> {
render() {
return (
<div className="chip">{T("SDFSDF")}</div>
<div>{T\`ABC\`}</div>
);
}
}\
`
return assert.deepEqual(stringExtractor.findInTsx(code), ["SDFSDF", "ABC"])
})
})
return describe("findFromRoot", () =>
it("finds in coffee and hbs", (done) =>
stringExtractor.findFromRootDirs([__dirname + "/requireSample"], (strings: any) => {
assert.deepEqual(strings.sort(), ["a", "b", "c", "d"])
return done()
})))
})