react-display-name-test.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /**
  2. * Copyright 2013-present, Facebook, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. *
  9. * @emails react-core
  10. */
  11. 'use strict';
  12. require('mock-modules').autoMockOff();
  13. var transformFn = require('jstransform').transform;
  14. var visitors = require('../react-display-name-visitors').visitorList;
  15. function transform(code) {
  16. return transformFn(visitors, code);
  17. }
  18. describe('react displayName jsx', function() {
  19. it('should only inject displayName if missing', function() {
  20. var code = [
  21. '"use strict";',
  22. 'var Whateva = React.createClass({',
  23. ' displayName: "Whateva",',
  24. ' render: function() {',
  25. ' return null;',
  26. ' }',
  27. '});'
  28. ].join('\n');
  29. var result = [
  30. '"use strict";',
  31. 'var Whateva = React.createClass({',
  32. ' displayName: "Whateva",',
  33. ' render: function() {',
  34. ' return null;',
  35. ' }',
  36. '});'
  37. ].join('\n');
  38. expect(transform(code).code).toEqual(result);
  39. });
  40. it('should inject displayName in simple assignment', () => {
  41. var code = [
  42. 'var Component = React.createClass({',
  43. ' render: function() {',
  44. ' return null;',
  45. ' }',
  46. '});'
  47. ].join('\n');
  48. var result = [
  49. 'var Component = React.createClass({displayName: "Component",',
  50. ' render: function() {',
  51. ' return null;',
  52. ' }',
  53. '});'
  54. ].join('\n');
  55. expect(transform(code).code).toEqual(result);
  56. });
  57. it('should inject displayName in simple assignment without var', () => {
  58. var code = [
  59. 'var Component;',
  60. 'Component = React.createClass({',
  61. ' render: function() {',
  62. ' return null;',
  63. ' }',
  64. '});'
  65. ].join('\n');
  66. var result = [
  67. 'var Component;',
  68. 'Component = React.createClass({displayName: "Component",',
  69. ' render: function() {',
  70. ' return null;',
  71. ' }',
  72. '});'
  73. ].join('\n');
  74. expect(transform(code).code).toEqual(result);
  75. });
  76. it('should inject displayName in property assignment', () => {
  77. var code = [
  78. 'ns.Component = React.createClass({',
  79. ' render: function() {',
  80. ' return null;',
  81. ' }',
  82. '});'
  83. ].join('\n');
  84. var result = [
  85. 'ns.Component = React.createClass({displayName: "ns.Component",',
  86. ' render: function() {',
  87. ' return null;',
  88. ' }',
  89. '});'
  90. ].join('\n');
  91. expect(transform(code).code).toEqual(result);
  92. });
  93. it('should inject displayName in chained property assignment', () => {
  94. var code = [
  95. 'ns.ns1.Component = React.createClass({',
  96. ' render: function() {',
  97. ' return null;',
  98. ' }',
  99. '});'
  100. ].join('\n');
  101. var result = [
  102. 'ns.ns1.Component = React.createClass({displayName: "ns.ns1.Component",',
  103. ' render: function() {',
  104. ' return null;',
  105. ' }',
  106. '});'
  107. ].join('\n');
  108. expect(transform(code).code).toEqual(result);
  109. });
  110. it('should inject displayName in exports property assignment', () => {
  111. var code = [
  112. 'exports.Component = React.createClass({',
  113. ' render: function() {',
  114. ' return null;',
  115. ' }',
  116. '});'
  117. ].join('\n');
  118. var result = [
  119. 'exports.Component = React.createClass({displayName: "Component",',
  120. ' render: function() {',
  121. ' return null;',
  122. ' }',
  123. '});'
  124. ].join('\n');
  125. expect(transform(code).code).toEqual(result);
  126. });
  127. it('should inject displayName in object declaration', () => {
  128. var code = [
  129. 'exports = {',
  130. ' Component: React.createClass({',
  131. ' render: function() {',
  132. ' return null;',
  133. ' }',
  134. ' })',
  135. '};'
  136. ].join('\n');
  137. var result = [
  138. 'exports = {',
  139. ' Component: React.createClass({displayName: "Component",',
  140. ' render: function() {',
  141. ' return null;',
  142. ' }',
  143. ' })',
  144. '};'
  145. ].join('\n');
  146. expect(transform(code).code).toEqual(result);
  147. });
  148. });