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. });