contain.test.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import { Jimp, mkJGD, hasOwnProp } from '@jimp/test-utils';
  2. import configure from '@jimp/custom';
  3. import blit from '@jimp/plugin-blit';
  4. import resize from '@jimp/plugin-resize';
  5. import scale from '@jimp/plugin-scale';
  6. import contain from '../src';
  7. const jimp = configure({ plugins: [scale, resize, blit, contain] }, Jimp);
  8. describe('All align combinations for contain', () => {
  9. const verticalJGD = mkJGD(
  10. '▴▴▴▴▸▸▸▸',
  11. '▴▴▴▴▸▸▸▸',
  12. '▴▴▴▴▸▸▸▸',
  13. '▴▴▴▴▸▸▸▸',
  14. '▴▴▴▴▸▸▸▸',
  15. '▴▴▴▴▸▸▸▸',
  16. '▾▾▾▾◆◆◆◆',
  17. '▾▾▾▾◆◆◆◆',
  18. '▾▾▾▾◆◆◆◆',
  19. '▾▾▾▾◆◆◆◆',
  20. '▾▾▾▾◆◆◆◆',
  21. '▾▾▾▾◆◆◆◆'
  22. );
  23. const horizontalJGD = mkJGD(
  24. '▴▴▴▴▴▴▸▸▸▸▸▸',
  25. '▴▴▴▴▴▴▸▸▸▸▸▸',
  26. '▴▴▴▴▴▴▸▸▸▸▸▸',
  27. '▴▴▴▴▴▴▸▸▸▸▸▸',
  28. '▾▾▾▾▾▾◆◆◆◆◆◆',
  29. '▾▾▾▾▾▾◆◆◆◆◆◆',
  30. '▾▾▾▾▾▾◆◆◆◆◆◆',
  31. '▾▾▾▾▾▾◆◆◆◆◆◆'
  32. );
  33. let vertical;
  34. let horizontal; // stores the Jimp instances of the JGD images above.
  35. before(done => {
  36. const img1 = jimp.read(verticalJGD);
  37. const img2 = jimp.read(horizontalJGD);
  38. Promise.all([img1, img2])
  39. .then(images => {
  40. vertical = images[0];
  41. horizontal = images[1];
  42. done();
  43. })
  44. .catch(done);
  45. });
  46. const tests = {}; // Stores the expected result for each alignment combination.
  47. tests['LEFT TOP'] = {
  48. contain: {
  49. verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '),
  50. horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ')
  51. }
  52. };
  53. tests['CENTER TOP'] = {
  54. contain: {
  55. verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '),
  56. horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ')
  57. }
  58. };
  59. tests['RIGHT TOP'] = {
  60. contain: {
  61. verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'),
  62. horiz: mkJGD('▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ', ' ')
  63. }
  64. };
  65. tests['LEFT MIDDLE'] = {
  66. contain: {
  67. verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '),
  68. horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ')
  69. }
  70. };
  71. tests['CENTER MIDDLE'] = {
  72. contain: {
  73. verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '),
  74. horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ')
  75. }
  76. };
  77. tests['RIGHT MIDDLE'] = {
  78. contain: {
  79. verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'),
  80. horiz: mkJGD(' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆', ' ')
  81. }
  82. };
  83. tests['LEFT BOTTOM'] = {
  84. contain: {
  85. verti: mkJGD('▴▴▸▸ ', '▴▴▸▸ ', '▴▴▸▸ ', '▾▾◆◆ ', '▾▾◆◆ ', '▾▾◆◆ '),
  86. horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆')
  87. }
  88. };
  89. tests['CENTER BOTTOM'] = {
  90. contain: {
  91. verti: mkJGD(' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▴▴▸▸ ', ' ▾▾◆◆ ', ' ▾▾◆◆ ', ' ▾▾◆◆ '),
  92. horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆')
  93. }
  94. };
  95. tests['RIGHT BOTTOM'] = {
  96. contain: {
  97. verti: mkJGD(' ▴▴▸▸', ' ▴▴▸▸', ' ▴▴▸▸', ' ▾▾◆◆', ' ▾▾◆◆', ' ▾▾◆◆'),
  98. horiz: mkJGD(' ', ' ', '▴▴▴▸▸▸', '▴▴▴▸▸▸', '▾▾▾◆◆◆', '▾▾▾◆◆◆')
  99. }
  100. };
  101. function runAlignTest(align) {
  102. const jgdContainV = tests[align].contain.verti;
  103. const jgdContainH = tests[align].contain.horiz;
  104. let a = align.split(' ');
  105. a = Jimp['HORIZONTAL_ALIGN_' + a[0]] | Jimp['VERTICAL_ALIGN_' + a[1]];
  106. it('contain aligned to ' + align, () => {
  107. vertical
  108. .clone()
  109. .contain(6, 6, a)
  110. .getJGDSync()
  111. .should.be.sameJGD(jgdContainV, 'Vertical image');
  112. horizontal
  113. .clone()
  114. .contain(6, 6, a)
  115. .getJGDSync()
  116. .should.be.sameJGD(jgdContainH, 'Horizontal image');
  117. });
  118. }
  119. for (const align in tests) if (hasOwnProp(tests, align)) runAlignTest(align);
  120. });