mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
6f9a64e6f5
Treat MathML-namespaced script elements as scripts during template preprocessing. This prevents scripts nested in MathML HTML integration points from surviving template compilation.
(cherry picked from commit 107f6fa49d)
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
/**
|
|
* @license
|
|
* Copyright Google LLC All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by an MIT-style license that can be
|
|
* found in the LICENSE file at https://angular.dev/license
|
|
*/
|
|
|
|
import {Component} from '@angular/core';
|
|
import {ssr} from './hydration_utils';
|
|
|
|
describe('renderApplication', () => {
|
|
it('should render ARIA attributes from attribute bindings', async () => {
|
|
@Component({
|
|
selector: 'app',
|
|
template: '<div [attr.aria-label]="label"></div>',
|
|
})
|
|
class SomeComponent {
|
|
label = 'some label';
|
|
}
|
|
|
|
const html = await ssr(SomeComponent);
|
|
expect(html).toContain('aria-label="some label"');
|
|
});
|
|
|
|
it('should render ARIA attributes using property binding syntax', async () => {
|
|
@Component({
|
|
selector: 'app',
|
|
template: '<div [aria-label]="label"></div>',
|
|
})
|
|
class SomeComponent {
|
|
label = 'a third label';
|
|
}
|
|
|
|
const html = await ssr(SomeComponent);
|
|
expect(html).toContain('aria-label="a third label"');
|
|
});
|
|
it('should not serialize MathML script elements', async () => {
|
|
@Component({
|
|
selector: 'app',
|
|
template: '<math><mtext><script>bad()</script></mtext></math>',
|
|
})
|
|
class SomeComponent {}
|
|
|
|
const html = await ssr(SomeComponent, {enableHydration: false});
|
|
|
|
expect(html).not.toContain('<script');
|
|
});
|
|
});
|