scripts.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. var path = require('path');
  2. var bower = require('../../lib/index.js');
  3. var mkdirp = require('mkdirp');
  4. var rimraf = require('rimraf');
  5. var fs = require('fs');
  6. var expect = require('expect.js');
  7. var scripts = require('../../lib/core/scripts.js');
  8. describe('scripts', function () {
  9. var tempDir = path.join(__dirname, '../tmp/temp-scripts');
  10. var packageName = 'package-zip';
  11. var packageDir = path.join(__dirname, '../assets/' + packageName + '.zip');
  12. var config = {
  13. cwd: tempDir,
  14. scripts: {
  15. preinstall: 'touch preinstall_%',
  16. postinstall: 'touch postinstall_%',
  17. preuninstall: 'touch preuninstall_%'
  18. }
  19. };
  20. before(function (next) {
  21. mkdirp(tempDir, next);
  22. });
  23. after(function (next) {
  24. rimraf(tempDir, next);
  25. });
  26. it('should run preinstall and postinstall hooks.', function (next) {
  27. bower.commands
  28. .install([packageDir], undefined, config)
  29. .on('end', function (installed) {
  30. expect(fs.existsSync(path.join(tempDir, 'preinstall_' + packageName))).to.be(true);
  31. expect(fs.existsSync(path.join(tempDir, 'postinstall_' + packageName))).to.be(true);
  32. next();
  33. });
  34. });
  35. it('should run preuninstall hook.', function (next) {
  36. bower.commands
  37. .uninstall([packageName], undefined, config)
  38. .on('end', function (installed) {
  39. expect(fs.existsSync(path.join(tempDir, 'preuninstall_' + packageName))).to.be(true);
  40. next();
  41. });
  42. });
  43. it('should not break anything when no hooks configured.', function (next) {
  44. bower.commands
  45. .uninstall([packageName], undefined, { cwd: tempDir })
  46. .on('end', function (installed) {
  47. //no exception then we're good
  48. next();
  49. });
  50. });
  51. it('should reorder packages by dependencies, while trying to maintain order from bower.json, correctly.', function () {
  52. var mockAngularUI = { dependencies: {
  53. 'angular': '*'
  54. }};
  55. var mockJQuery = { dependencies: {
  56. }};
  57. var mockAngular = { dependencies: {
  58. 'jquery': '*'
  59. }};
  60. var mockMoment = { dependencies: {
  61. }};
  62. var mockSelect2 = { dependencies: {
  63. 'jquery': '*'
  64. }};
  65. var mockBadPackage = { dependencies: {
  66. 'something-not-installed': '*'
  67. }};
  68. var packages = {
  69. 'select2': mockSelect2,
  70. 'angular-ui': mockAngularUI,
  71. 'jquery': mockJQuery,
  72. 'bad-package': mockBadPackage,
  73. 'angular': mockAngular,
  74. 'moment': mockMoment
  75. };
  76. var installed = [];
  77. var mockBowerJson = { dependencies: {
  78. 'jquery': '*',
  79. 'select2': '*',
  80. 'angular-ui': '*',
  81. 'angular': '*',
  82. 'moment': '*'
  83. } };
  84. var ordered = scripts._orderByDependencies(packages, installed, mockBowerJson);
  85. expect(ordered).to.eql(['jquery', 'select2', 'angular', 'angular-ui', 'moment', 'bad-package']);
  86. });
  87. it('should process scripts with quotes and vars in the cmd properly.', function (next) {
  88. config.scripts.preinstall = 'touch "$BOWER_PID %"';
  89. bower.commands
  90. .install([packageDir], undefined, config)
  91. .on('end', function (installed) {
  92. expect(fs.existsSync(path.join(tempDir, process.pid + ' ' + packageName))).to.be(true);
  93. next();
  94. });
  95. });
  96. });