2016-12-08 16:26:38 +03:00
|
|
|
import { expect } from 'chai';
|
|
|
|
|
2016-12-08 16:28:59 +03:00
|
|
|
import { ServiceParser } from '../../src/parsers/service.parser';
|
2016-12-08 16:26:38 +03:00
|
|
|
|
2017-03-20 17:32:49 +03:00
|
|
|
class TestServiceParser extends ServiceParser {
|
2016-12-08 16:26:38 +03:00
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
describe('ServiceParser', () => {
|
|
|
|
|
|
|
|
const componentFilename: string = 'test.component.ts';
|
|
|
|
|
2017-03-20 17:32:49 +03:00
|
|
|
let parser: TestServiceParser;
|
2016-12-08 16:26:38 +03:00
|
|
|
|
|
|
|
beforeEach(() => {
|
2017-03-20 17:32:49 +03:00
|
|
|
parser = new TestServiceParser();
|
2016-12-08 16:26:38 +03:00
|
|
|
});
|
|
|
|
|
2019-06-13 12:23:37 +03:00
|
|
|
it('should support extracting binary expressions', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
const message = 'The Message';
|
|
|
|
this._translateService.get(message || 'Fallback message');
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Fallback message']);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should support conditional operator', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
const message = 'The Message';
|
|
|
|
this._translateService.get(message ? message : 'Fallback message');
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Fallback message']);
|
|
|
|
});
|
|
|
|
|
2016-12-08 17:24:23 +03:00
|
|
|
it('should extract strings in TranslateService\'s get() method', () => {
|
2016-12-08 16:26:38 +03:00
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.get('Hello World');
|
|
|
|
}
|
|
|
|
`;
|
2016-12-09 07:18:04 +03:00
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello World']);
|
2016-12-08 16:26:38 +03:00
|
|
|
});
|
|
|
|
|
2016-12-08 17:24:23 +03:00
|
|
|
it('should extract strings in TranslateService\'s instant() method', () => {
|
2016-12-08 16:26:38 +03:00
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.instant('Hello World');
|
|
|
|
}
|
|
|
|
`;
|
2016-12-09 07:18:04 +03:00
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello World']);
|
2016-12-08 16:26:38 +03:00
|
|
|
});
|
|
|
|
|
2017-07-05 16:18:41 +03:00
|
|
|
it('should extract strings in TranslateService\'s stream() method', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.stream('Hello World');
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello World']);
|
|
|
|
});
|
|
|
|
|
2016-12-08 17:24:23 +03:00
|
|
|
it('should extract array of strings in TranslateService\'s get() method', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.get(['Hello', 'World']);
|
|
|
|
}
|
|
|
|
`;
|
2016-12-09 07:18:04 +03:00
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello', 'World']);
|
2016-12-08 17:24:23 +03:00
|
|
|
});
|
|
|
|
|
|
|
|
it('should extract array of strings in TranslateService\'s instant() method', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.instant(['Hello', 'World']);
|
|
|
|
}
|
|
|
|
`;
|
2016-12-09 07:18:04 +03:00
|
|
|
const key = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(key).to.deep.equal(['Hello', 'World']);
|
2016-12-08 17:24:23 +03:00
|
|
|
});
|
|
|
|
|
2017-07-05 16:18:41 +03:00
|
|
|
it('should extract array of strings in TranslateService\'s stream() method', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.stream(['Hello', 'World']);
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const key = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(key).to.deep.equal(['Hello', 'World']);
|
|
|
|
});
|
|
|
|
|
2019-08-26 13:29:52 +03:00
|
|
|
it('should extract string arrays encapsulated in backticks', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.get([\`Hello\`, \`World\`]);
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello', 'World']);
|
|
|
|
});
|
|
|
|
|
2017-07-05 16:18:41 +03:00
|
|
|
it('should not extract strings in get()/instant()/stream() methods of other services', () => {
|
2016-12-08 16:26:38 +03:00
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(
|
|
|
|
protected _translateService: TranslateService,
|
|
|
|
protected _otherService: OtherService
|
|
|
|
) { }
|
|
|
|
public test() {
|
|
|
|
this._otherService.get('Hello World');
|
|
|
|
this._otherService.instant('Hi there');
|
2017-07-05 16:18:41 +03:00
|
|
|
this._otherService.stream('Hi there');
|
2016-12-08 16:26:38 +03:00
|
|
|
}
|
|
|
|
`;
|
2016-12-09 07:18:04 +03:00
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal([]);
|
2016-12-08 16:26:38 +03:00
|
|
|
});
|
|
|
|
|
2016-12-13 17:17:03 +03:00
|
|
|
it('should extract strings with liberal spacing', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(
|
|
|
|
protected _translateService: TranslateService,
|
|
|
|
protected _otherService: OtherService
|
|
|
|
) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.instant('Hello');
|
|
|
|
this._translateService.get ( 'World' );
|
|
|
|
this._translateService.instant ( ['How'] );
|
|
|
|
this._translateService.get([ 'Are' ]);
|
|
|
|
this._translateService.get([ 'You' , 'Today' ]);
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello', 'World', 'How', 'Are', 'You', 'Today']);
|
|
|
|
});
|
|
|
|
|
2017-01-28 17:06:05 +03:00
|
|
|
it('should not extract string when not accessing property', () => {
|
2017-01-16 09:13:18 +03:00
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected trans: TranslateService) { }
|
|
|
|
public test() {
|
2017-03-20 17:29:41 +03:00
|
|
|
trans.get("You are expected at {{time}}", {time: moment.format('H:mm')}).subscribe();
|
2017-01-16 09:13:18 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
2017-01-28 17:06:05 +03:00
|
|
|
expect(keys).to.deep.equal([]);
|
2017-01-16 09:13:18 +03:00
|
|
|
});
|
|
|
|
|
2017-03-20 17:29:41 +03:00
|
|
|
it('should extract string with params on same line', () => {
|
2017-01-28 17:22:08 +03:00
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService: TranslateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.get('You are expected at {{time}}', {time: moment.format('H:mm')});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['You are expected at {{time}}']);
|
2017-03-20 17:29:41 +03:00
|
|
|
});
|
2017-01-28 17:22:08 +03:00
|
|
|
|
2017-05-05 12:31:30 +03:00
|
|
|
it('should not crash when constructor parameter has no type', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected _translateService) { }
|
|
|
|
public test() {
|
|
|
|
this._translateService.instant('Hello World');
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal([]);
|
|
|
|
});
|
|
|
|
|
2019-07-08 15:36:44 +03:00
|
|
|
it('should not extract variables', () => {
|
|
|
|
const contents = `
|
|
|
|
@Component({ })
|
|
|
|
export class AppComponent {
|
|
|
|
public constructor(protected translateService: TranslateService) { }
|
|
|
|
public test() {
|
2019-07-17 14:00:29 +03:00
|
|
|
this.translateService.get(["yes", variable]).then(translations => {
|
2019-07-08 15:36:44 +03:00
|
|
|
console.log(translations[variable]);
|
|
|
|
});
|
|
|
|
}
|
2019-09-16 17:40:37 +03:00
|
|
|
}
|
2019-07-08 15:36:44 +03:00
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['yes']);
|
|
|
|
});
|
|
|
|
|
2017-05-09 21:08:44 +03:00
|
|
|
it('should extract strings from all classes in the file', () => {
|
|
|
|
const contents = `
|
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { TranslateService } from '@ngx-translate/core';
|
|
|
|
export class Stuff {
|
|
|
|
thing: string;
|
2017-05-10 15:10:13 +03:00
|
|
|
translate: any;
|
2017-05-09 21:08:44 +03:00
|
|
|
constructor(thing: string) {
|
2017-05-10 15:10:13 +03:00
|
|
|
this.translate.get('Not me');
|
2017-05-09 21:08:44 +03:00
|
|
|
this.thing = thing;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@Injectable()
|
2017-05-10 15:10:13 +03:00
|
|
|
export class MyComponent {
|
|
|
|
constructor(public translate: TranslateService) {
|
|
|
|
this.translate.instant("Extract me!");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
export class OtherClass {
|
|
|
|
constructor(thing: string, _translate: TranslateService) {
|
|
|
|
this._translate.get("Do not extract me");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@Injectable()
|
2017-05-09 21:08:44 +03:00
|
|
|
export class AuthService {
|
|
|
|
constructor(public translate: TranslateService) {
|
2017-05-10 15:10:13 +03:00
|
|
|
this.translate.instant("Hello!");
|
2017-05-09 21:08:44 +03:00
|
|
|
}
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
2017-05-10 15:10:13 +03:00
|
|
|
expect(keys).to.deep.equal(['Extract me!', 'Hello!']);
|
2017-05-09 21:08:44 +03:00
|
|
|
});
|
|
|
|
|
2019-09-16 17:40:37 +03:00
|
|
|
it('should extract strings when TranslateService is declared as a property', () => {
|
|
|
|
const contents = `
|
|
|
|
export class MyComponent {
|
|
|
|
protected translateService: TranslateService;
|
|
|
|
public constructor() {
|
|
|
|
this.translateService = new TranslateService();
|
|
|
|
}
|
|
|
|
public test() {
|
|
|
|
this.translateService.instant('Hello World');
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Hello World']);
|
|
|
|
});
|
|
|
|
|
|
|
|
it('should extract strings passed to TranslateServices methods only', () => {
|
|
|
|
const contents = `
|
|
|
|
export class AppComponent implements OnInit {
|
|
|
|
constructor(protected config: Config, protected translateService: TranslateService) {}
|
|
|
|
|
|
|
|
public ngOnInit(): void {
|
|
|
|
this.localizeBackButton();
|
|
|
|
}
|
|
|
|
|
|
|
|
protected localizeBackButton(): void {
|
|
|
|
this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {
|
|
|
|
this.config.set('backButtonText', this.translateService.instant('Back'));
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
`;
|
|
|
|
const keys = parser.extract(contents, componentFilename).keys();
|
|
|
|
expect(keys).to.deep.equal(['Back']);
|
|
|
|
});
|
|
|
|
|
2016-12-08 16:26:38 +03:00
|
|
|
});
|