text-replace-unit-tests.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. var grunt = require('grunt');
  2. var fs = require('fs');
  3. var gruntTextReplace = require('../lib/grunt-text-replace');
  4. var replaceText = function (text, from, to) {
  5. return gruntTextReplace.replaceText({
  6. text: text,
  7. replacements: [{
  8. from: from,
  9. to: to
  10. }]
  11. });
  12. };
  13. var replaceTextMultiple = function (text, replacements) {
  14. return gruntTextReplace.replaceText({
  15. text: text,
  16. replacements: replacements
  17. });
  18. };
  19. var replaceFile = function (pathToSourceFile, pathToDestinationFile, replacements) {
  20. return gruntTextReplace.replaceFile({
  21. src: pathToSourceFile,
  22. dest: pathToDestinationFile,
  23. replacements: replacements
  24. });
  25. };
  26. var replaceFileMultiple = function (sourceFiles, destinationDirectory, replacements) {
  27. return gruntTextReplace.replaceFileMultiple({
  28. src: sourceFiles,
  29. dest: destinationDirectory,
  30. replacements: replacements
  31. });
  32. };
  33. exports.textReplace = {
  34. 'Test core replacement functionality': {
  35. 'Test string replacements': function (test) {
  36. test.equal(replaceText('Hello world', 'Hello', 'Goodbye'), 'Goodbye world');
  37. test.notEqual(replaceText('Hello w000rld', 'w0*rld', 'world'), 'Hello world');
  38. test.equal(replaceText('Hello (*foo.)', '(*foo.)', 'world'), 'Hello world');
  39. test.equal(replaceText('Hello \\foo', '\\', ''), 'Hello foo');
  40. test.equal(replaceText('Foo bar bar', 'bar', 'foo'), 'Foo foo foo');
  41. test.equal(replaceText('Foo bar bar', 'bar', 'Foo bar'), 'Foo Foo bar Foo bar');
  42. test.done();
  43. },
  44. 'Test regex replacements': function (test) {
  45. test.equal(replaceText('Hello world', /Hello/, 'Goodbye'), 'Goodbye world');
  46. test.equal(replaceText('Hello world', /(Hello) (world)/, '$2 $1'), 'world Hello');
  47. test.equal(replaceText('Foo bar bar', /bar/, 'foo'), 'Foo foo bar');
  48. test.equal(replaceText('Foo bar bar', /bar/g, 'foo'), 'Foo foo foo');
  49. test.done();
  50. },
  51. 'Test grunt.template replacements': function (test) {
  52. test.equal(replaceText('Hello world', 'world',
  53. '<%= grunt.template.date("20 Nov 2012 11:30:00 GMT", "dd/mm/yy") %>'), 'Hello 20/11/12');
  54. test.done();
  55. },
  56. 'Test function replacements': function (test) {
  57. test.equal(replaceText('Hello world', 'world',
  58. function (matchedWord, index, fullText, regexMatches) {
  59. return new Array(4).join(matchedWord);
  60. }), 'Hello worldworldworld');
  61. test.equal(replaceText('Hello world', 'world',
  62. function (matchedWord, index, fullText, regexMatches) {
  63. return index;
  64. }), 'Hello 6');
  65. test.equal(replaceText('Hello world', 'Hello',
  66. function (matchedWord, index, fullText, regexMatches) {
  67. return index;
  68. }), '0 world');
  69. test.equal(replaceText('Hello world', 'foo',
  70. function (matchedWord, index, fullText, regexMatches) {
  71. return index;
  72. }), 'Hello world');
  73. test.equal(replaceText('Hello world', 'world',
  74. function (matchedWord, index, fullText, regexMatches) {
  75. return fullText;
  76. }), 'Hello Hello world');
  77. test.equal(replaceText('Hello world', /(Hello) (world)/g,
  78. function (matchedWord, index, fullText, regexMatches) {
  79. return 'Place: ' + regexMatches[1] + ', Greeting: ' + regexMatches[0];
  80. }), 'Place: world, Greeting: Hello');
  81. test.equal(replaceText('Hello world', /(Hello) (world)/g,
  82. function (matchedWord, index, fullText, regexMatches) {
  83. return regexMatches[0] + ' <%= grunt.template.date("20 Nov 2012 11:30:00 GMT", "dd/mm/yy") %>';
  84. }), 'Hello 20/11/12');
  85. test.done();
  86. },
  87. 'Test non string or function "to" replacements': function (test) {
  88. test.equal(replaceText('Hello 0 true 1 false 2345', 'true', false), 'Hello 0 false 1 false 2345');
  89. test.equal(replaceText('Hello 0 true 1 false 2345', 'false', true), 'Hello 0 true 1 true 2345');
  90. test.equal(replaceText('Hello 0 true 1 false 2345', '1', 22), 'Hello 0 true 22 false 2345');
  91. test.equal(replaceText('Hello 0 true 1 false 2345', '0', 1), 'Hello 1 true 1 false 2345');
  92. test.equal(replaceText('Hello 0 true 1 false 2345', /true|false/g, 0), 'Hello 0 0 1 0 2345');
  93. test.equal(replaceText('Hello 0 true 1 false 2345', 'Hello', 1e5), '100000 0 true 1 false 2345');
  94. test.equal(replaceText('Hello 0 true 1 false 2345', 'Hello', null), ' 0 true 1 false 2345');
  95. test.equal(replaceText('Hello 0 true 1 false 2345', 'true', undefined), 'Hello 0 1 false 2345');
  96. test.done();
  97. },
  98. 'Test multiple replacements': function (test) {
  99. test.equal(replaceTextMultiple('Hello world',
  100. [{
  101. from: 'Hello',
  102. to: 'Hi'
  103. }, {
  104. from: 'world',
  105. to: 'planet'
  106. }]), 'Hi planet');
  107. test.done();
  108. }
  109. },
  110. 'Test file handling': {
  111. setUp: function (done) {
  112. grunt.file.copy('test/text_files/test.txt', 'test/temp/testA.txt');
  113. grunt.file.copy('test/text_files/test.txt', 'test/temp/testB.txt');
  114. done();
  115. },
  116. tearDown: function (done) {
  117. fs.unlinkSync('test/temp/testA.txt');
  118. fs.unlinkSync('test/temp/testB.txt');
  119. fs.rmdirSync('test/temp');
  120. done();
  121. },
  122. 'Test change to file specifying destination file': function (test) {
  123. var originalText, replacedText;
  124. originalText = grunt.file.read('test/temp/testA.txt');
  125. replaceFile('test/temp/testA.txt', 'test/temp/testA.txt', [{from: 'world', to: 'planet'}]);
  126. replacedText = grunt.file.read('test/temp/testA.txt');
  127. test.equal(originalText, 'Hello world');
  128. test.equal(replacedText, 'Hello planet');
  129. test.done();
  130. },
  131. 'Test change to file specifying destination directory': function (test) {
  132. var originalText, replacedText;
  133. originalText = grunt.file.read('test/temp/testA.txt');
  134. replaceFile('test/temp/testA.txt', 'test/temp/', [{from: 'world', to: 'planet'}]);
  135. replacedText = grunt.file.read('test/temp/testA.txt');
  136. test.equal(originalText, 'Hello world');
  137. test.equal(replacedText, 'Hello planet');
  138. test.done();
  139. },
  140. 'Test change to multiple files specifying paths': function (test) {
  141. var originalText, replacedTextA, replacedTextB;
  142. originalText = grunt.file.read('test/temp/testA.txt');
  143. replaceFileMultiple(['test/temp/testA.txt', 'test/temp/testB.txt'], 'test/temp/', [{from: 'world', to: 'planet'}]);
  144. replacedTextA = grunt.file.read('test/temp/testA.txt');
  145. replacedTextB = grunt.file.read('test/temp/testB.txt');
  146. test.equal(originalText, 'Hello world');
  147. test.equal(replacedTextA, 'Hello planet');
  148. test.equal(replacedTextB, 'Hello planet');
  149. test.done();
  150. },
  151. 'Test change to multiple files specifying minimatch paths': function (test) {
  152. var originalText, replacedTextA, replacedTextB;
  153. originalText = grunt.file.read('test/temp/testA.txt');
  154. replaceFileMultiple(['test/temp/test*.txt'], 'test/temp/', [{from: 'world', to: 'planet'}]);
  155. replacedTextA = grunt.file.read('test/temp/testA.txt');
  156. replacedTextB = grunt.file.read('test/temp/testB.txt');
  157. test.equal(originalText, 'Hello world');
  158. test.equal(replacedTextA, 'Hello planet');
  159. test.equal(replacedTextB, 'Hello planet');
  160. test.done();
  161. }
  162. }
  163. };