main
js 74 lines 2.25 KB
Raw
1 /**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 * @emails react-core
8 */
9
10 'use strict';
11
12 let React;
13 let ReactDOMServer;
14
15 describe('quoteAttributeValueForBrowser', () => {
16 beforeEach(() => {
17 jest.resetModules();
18 React = require('react');
19 ReactDOMServer = require('react-dom/server');
20 });
21
22 it('ampersand is escaped inside attributes', () => {
23 const response = ReactDOMServer.renderToString(<img data-attr="&" />);
24 expect(response).toMatch('<img data-attr="&amp;"/>');
25 });
26
27 it('double quote is escaped inside attributes', () => {
28 const response = ReactDOMServer.renderToString(<img data-attr={'"'} />);
29 expect(response).toMatch('<img data-attr="&quot;"/>');
30 });
31
32 it('single quote is escaped inside attributes', () => {
33 const response = ReactDOMServer.renderToString(<img data-attr="'" />);
34 expect(response).toMatch('<img data-attr="&#x27;"/>');
35 });
36
37 it('greater than entity is escaped inside attributes', () => {
38 const response = ReactDOMServer.renderToString(<img data-attr=">" />);
39 expect(response).toMatch('<img data-attr="&gt;"/>');
40 });
41
42 it('lower than entity is escaped inside attributes', () => {
43 const response = ReactDOMServer.renderToString(<img data-attr="<" />);
44 expect(response).toMatch('<img data-attr="&lt;"/>');
45 });
46
47 it('number is escaped to string inside attributes', () => {
48 const response = ReactDOMServer.renderToString(<img data-attr={42} />);
49 expect(response).toMatch('<img data-attr="42"/>');
50 });
51
52 it('object is passed to a string inside attributes', () => {
53 const sampleObject = {
54 toString: function () {
55 return 'ponys';
56 },
57 };
58
59 const response = ReactDOMServer.renderToString(
60 <img data-attr={sampleObject} />,
61 );
62 expect(response).toMatch('<img data-attr="ponys"/>');
63 });
64
65 it('script tag is escaped inside attributes', () => {
66 const response = ReactDOMServer.renderToString(
67 <img data-attr={'<script type=\'\' src=""></script>'} />,
68 );
69 expect(response).toMatch(
70 '<img data-attr="&lt;script type=&#x27;&#x27; ' +
71 'src=&quot;&quot;&gt;&lt;/script&gt;"/>',
72 );
73 });
74 });