93 lines
3.0 KiB
TypeScript
93 lines
3.0 KiB
TypeScript
import { expect } from 'chai';
|
||
|
||
import { PipeParser } from '../../src/parsers/pipe.parser';
|
||
|
||
describe('PipeParser', () => {
|
||
|
||
const templateFilename: string = 'test.template.html';
|
||
|
||
let parser: PipeParser;
|
||
|
||
beforeEach(() => {
|
||
parser = new PipeParser();
|
||
});
|
||
|
||
it('should only extract string using pipe', () => {
|
||
const contents = `<button [style.background]="'lime'">{{ 'SomeKey_NotWorking' | translate }}</button>`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['SomeKey_NotWorking']);
|
||
});
|
||
|
||
it('should extract interpolated strings using translate pipe', () => {
|
||
const contents = `Hello {{ 'World' | translate }}`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['World']);
|
||
});
|
||
|
||
it('should extract strings with escaped quotes', () => {
|
||
const contents = `Hello {{ 'World\'s largest potato' | translate }}`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal([`World's largest potato`]);
|
||
});
|
||
|
||
it('should extract interpolated strings using translate pipe in attributes', () => {
|
||
const contents = `<span attr="{{ 'Hello World' | translate }}"></span>`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['Hello World']);
|
||
});
|
||
|
||
it('should extract bound strings using translate pipe in attributes', () => {
|
||
const contents = `<span [attr]="'Hello World' | translate"></span>`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['Hello World']);
|
||
});
|
||
|
||
it('should not use a greedy regular expression', () => {
|
||
const contents = `
|
||
<ion-header>
|
||
<ion-navbar color="brand">
|
||
<ion-title>{{ 'Info' | translate }}</ion-title>
|
||
</ion-navbar>
|
||
</ion-header>
|
||
|
||
<ion-content>
|
||
|
||
<content-loading *ngIf="isLoading">
|
||
{{ 'Loading...' | translate }}
|
||
</content-loading>
|
||
|
||
</ion-content>
|
||
`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['Info', 'Loading...']);
|
||
});
|
||
|
||
it('should extract strings on same line', () => {
|
||
const contents = `<span [attr]="'Hello' | translate"></span><span [attr]="'World' | translate"></span>`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['Hello', 'World']);
|
||
});
|
||
|
||
it('should extract strings from this template', () => {
|
||
const contents = `
|
||
<ion-list inset>
|
||
<ion-item>
|
||
<ion-icon item-left name="person" color="dark"></ion-icon>
|
||
<ion-input formControlName="name" type="text" [placeholder]="'Name' | translate"></ion-input>
|
||
</ion-item>
|
||
<ion-item>
|
||
<p color="danger" danger *ngFor="let error of form.get('name').getError('remote')">
|
||
{{ error }}
|
||
</p>
|
||
</ion-item>
|
||
</ion-list>
|
||
<div class="form-actions">
|
||
<button ion-button (click)="onSubmit()" color="secondary" block>{{ 'Create account' | translate }}</button>
|
||
</div>
|
||
`;
|
||
const keys = parser.extract(contents, templateFilename).keys();
|
||
expect(keys).to.deep.equal(['Name', 'Create account']);
|
||
});
|
||
|
||
});
|