babylon.promises.tests.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /**
  2. * Describes the test suite.
  3. */
  4. describe('Babylon.Promise', () => {
  5. var subject : BABYLON.Engine;
  6. /**
  7. * Loads the dependencies.
  8. */
  9. before(function (done) {
  10. this.timeout(180000);
  11. (BABYLONDEVTOOLS).Loader
  12. .useDist()
  13. .load(function () {
  14. BABYLON.PromisePolyfill.Apply(true);
  15. done();
  16. });
  17. });
  18. /**
  19. * Create a nu engine subject before each test.
  20. */
  21. beforeEach(function () {
  22. subject = new BABYLON.NullEngine({
  23. renderHeight: 256,
  24. renderWidth: 256,
  25. textureSize: 256,
  26. deterministicLockstep: false,
  27. lockstepMaxSteps: 1
  28. });
  29. });
  30. describe('#Composition', () => {
  31. it('should chain promises correctly #1', (done) => {
  32. mocha.timeout(10000);
  33. var tempString = "";
  34. var p1 = new Promise((resolve, reject) => {
  35. tempString = "Initial";
  36. resolve();
  37. })
  38. .then(() => {
  39. tempString += " message";
  40. })
  41. .then(() => {
  42. throw new Error('Something failed');
  43. })
  44. .catch(() => {
  45. tempString += " to check promises";
  46. })
  47. .then(() => {
  48. expect(tempString).to.eq("Initial message to check promises");
  49. done();
  50. });
  51. });
  52. });
  53. describe('#Composition', () => {
  54. it('should chain promises correctly #2', (done) => {
  55. mocha.timeout(10000);
  56. var tempString = "";
  57. var p1 = new Promise((resolve, reject) => {
  58. tempString = "Initial";
  59. resolve();
  60. })
  61. .then(() => {
  62. tempString += " message";
  63. })
  64. .then(() => {
  65. tempString += " to check promises";
  66. })
  67. .catch(() => {
  68. tempString += " wrong!";
  69. })
  70. .then(() => {
  71. expect(tempString).to.eq("Initial message to check promises");
  72. done();
  73. });
  74. });
  75. });
  76. describe('#Delayed', () => {
  77. it('should chain promises correctly #3', (done) => {
  78. mocha.timeout(10000);
  79. var tempString = "";
  80. function resolveLater(resolve, reject) {
  81. setTimeout(function () {
  82. resolve(10);
  83. }, 1000);
  84. }
  85. function rejectLater(resolve, reject) {
  86. setTimeout(function () {
  87. reject(20);
  88. }, 1000);
  89. }
  90. var p1 = (<any>Promise).resolve('foo');
  91. var p2 = p1.then(function () {
  92. // Return promise here, that will be resolved to 10 after 1 second
  93. return new Promise(resolveLater);
  94. });
  95. p2.then(function (v) {
  96. tempString += 'resolved '+ v; // "resolved", 10
  97. }, function (e) {
  98. // not called
  99. tempString += 'rejected' + e;
  100. });
  101. var p3 = p1.then(function () {
  102. // Return promise here, that will be rejected with 20 after 1 second
  103. return new Promise(rejectLater);
  104. });
  105. p3.then(function (v) {
  106. // not called
  107. tempString += 'resolved ' + v;
  108. }, function (e) {
  109. tempString += 'rejected ' + e; // "rejected", 20
  110. expect(tempString).to.eq("resolved 10rejected 20");
  111. done();
  112. });
  113. });
  114. });
  115. describe('#Promise.all', () => {
  116. it('should agregate promises correctly', (done) => {
  117. mocha.timeout(10000);
  118. var promise1 = Promise.resolve(3);
  119. var promise2 = new Promise(function(resolve, reject) {
  120. setTimeout(resolve, 100, 'foo');
  121. });
  122. var promise3 = Promise.resolve(42);
  123. Promise.all([promise1, promise2, promise3]).then(function(values) {
  124. values.should.deep.equal([3, "foo", 42]);
  125. done();
  126. });
  127. });
  128. });
  129. });