netzke-testing 1.0.0.0.pre → 1.0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +4 -0
  3. data/LICENSE.txt +1 -1
  4. data/README.md +15 -13
  5. data/app/assets/javascripts/netzke/testing/expect/expect.js +80 -48
  6. data/app/assets/javascripts/netzke/testing/helpers/actions.js.coffee +2 -3
  7. data/app/assets/javascripts/netzke/testing/helpers/expectations.js.coffee +9 -5
  8. data/app/assets/javascripts/netzke/testing/mocha/mocha.js +8411 -2527
  9. data/lib/netzke/testing/helpers.rb +4 -4
  10. data/lib/netzke/testing/version.rb +1 -1
  11. data/spec/rails_app/log/test.log +94 -0
  12. data/spec/rails_app/tmp/cache/sprockets/v3.0/-o-YaVl0T7eDJ9OrOV9RGwqVsIWZFHy_ANOiYAzd5xs.cache +2 -0
  13. data/spec/rails_app/tmp/cache/sprockets/v3.0/07iOyrEomMGnZKLKBODn5NGKubEAwYg22zHsJOJLqGs.cache +1 -0
  14. data/spec/rails_app/tmp/cache/sprockets/v3.0/0ytTgUbUdaNC4f2HwTF9KPoNfEPoelbdxEEonmXcFY8.cache +1 -0
  15. data/spec/rails_app/tmp/cache/sprockets/v3.0/1fidLos4TsMC1Jzat66F4EuJMnvA4Ek4Yq3Wx_diqLA.cache +2 -0
  16. data/spec/rails_app/tmp/cache/sprockets/v3.0/2vHlMhGtlMaZb82omedAl26ALVO0Fkpnzrs2A0t0dhQ.cache +1 -0
  17. data/spec/rails_app/tmp/cache/sprockets/v3.0/39zPPJcr0tE1H4qUKdVLTgBn95i3CcWTw7iIySpP6cs.cache +0 -0
  18. data/spec/rails_app/tmp/cache/sprockets/v3.0/3zmYCO5dspDitWP7JYhr__7BgKz1CVbO5G5II9Glh9Q.cache +0 -0
  19. data/spec/rails_app/tmp/cache/sprockets/v3.0/4_18vLnsZaNqO4dzM3KZwlOI_W46PV3HB7wQnYnmFcQ.cache +0 -0
  20. data/spec/rails_app/tmp/cache/sprockets/v3.0/5GrPnQc9e0-MX1Gp22so31KMZYHH0py0br_lgFkZ_kI.cache +0 -0
  21. data/spec/rails_app/tmp/cache/sprockets/v3.0/5Lly_CA8DZvPhQV2jDQx-Y6P_y3Ygra9t5jfSlGhHDA.cache +2 -0
  22. data/spec/rails_app/tmp/cache/sprockets/v3.0/5dJ6VNUb4OFNV6u-YrjcCBnPJuR9tf9hL3s_faXrBP0.cache +0 -0
  23. data/spec/rails_app/tmp/cache/sprockets/v3.0/6Hb98UcW0wjj_i_HD2j2tX9E_IWDhUs7jytk9bRWTD4.cache +1 -0
  24. data/spec/rails_app/tmp/cache/sprockets/v3.0/9EFnUGe2JNSgdn0_guGDgGlzN9fSRTV-LUCHI9Np3m0.cache +0 -0
  25. data/spec/rails_app/tmp/cache/sprockets/v3.0/9rQm4rWb6Fyy0YNY6qIn3Klwh-E-riSs3vJu81_Gyto.cache +3 -0
  26. data/spec/rails_app/tmp/cache/sprockets/v3.0/ALdwNICuA37_nmLiqc8RMqu61rCn_g8j-_jvCtDZIM0.cache +1 -0
  27. data/spec/rails_app/tmp/cache/sprockets/v3.0/BT0NlH5e-SMXSFoONZqKAfPuxkCaZq9t03GG-tbqf2A.cache +1 -0
  28. data/spec/rails_app/tmp/cache/sprockets/v3.0/Bl29XyeX1cHzQPc9fI44GTuVcxQL6XfPJVt_GX6lhzo.cache +1 -0
  29. data/spec/rails_app/tmp/cache/sprockets/v3.0/CeuWmVqZWhwboK9KGiK-VGwtZYLrqCRI93rvJQIBTXs.cache +2 -0
  30. data/spec/rails_app/tmp/cache/sprockets/v3.0/D_M27jz_Y2ZtpKgI0NLbeaMjjW-dnm5H-q6vlb9Cgdc.cache +3 -0
  31. data/spec/rails_app/tmp/cache/sprockets/v3.0/DyZ-otksXNhNzMmBzaVD-I26JqXpFnAAHKDNiDm0AnA.cache +2 -0
  32. data/spec/rails_app/tmp/cache/sprockets/v3.0/FXVz3Pwk3Lx2AlWWo3N60Q7YFpQ09dRh1TrauXneQAA.cache +3 -0
  33. data/spec/rails_app/tmp/cache/sprockets/v3.0/Gr8ZzR4L-gtkpAh9nM59jAeEZdyf-OdokQaWCec_INo.cache +1 -0
  34. data/spec/rails_app/tmp/cache/sprockets/v3.0/H09-6S0HJW5eYPA2z1phpE0atkN0CGHs1N_3NeX1vg0.cache +0 -0
  35. data/spec/rails_app/tmp/cache/sprockets/v3.0/HqBAFMrJkSiiEp7NwTEVCY6TfMEq6uCsOyT4hkxQzl0.cache +1 -0
  36. data/spec/rails_app/tmp/cache/sprockets/v3.0/LLDmKhbry6kmwl-luJ7zqH0EpQzgmXaiphllEglzBPY.cache +1 -0
  37. data/spec/rails_app/tmp/cache/sprockets/v3.0/L_-HXUTuvz1fj3rSHaqPaaqmdrcKL_nAjJjFRYsCKns.cache +0 -0
  38. data/spec/rails_app/tmp/cache/sprockets/v3.0/N2bgPvor8Oc-6ruUenJnq3JCgXTFOxboIXy77NtSpn4.cache +3 -0
  39. data/spec/rails_app/tmp/cache/sprockets/v3.0/NOfTwd49eb86ANBlpdBndMO4ImhsuP1GRpxDAgwAfx4.cache +3 -0
  40. data/spec/rails_app/tmp/cache/sprockets/v3.0/OI6uxGcnsKavdWTtwDAasU3wPx8QXhzBgV0X2n1KjMQ.cache +3 -0
  41. data/spec/rails_app/tmp/cache/sprockets/v3.0/OMy74nraRyab7NpwdTKgIcT71Nor8p3vccpmPY9JFVg.cache +1 -0
  42. data/spec/rails_app/tmp/cache/sprockets/v3.0/Q7419vAxXSvXRDjq-scnxsPHd0HadXBzkG4xsnYq9Qs.cache +1 -0
  43. data/spec/rails_app/tmp/cache/sprockets/v3.0/QHDu6s3NsziHdqvv8bty6Ez-fJ32BUsSh-cTb1jMwew.cache +0 -0
  44. data/spec/rails_app/tmp/cache/sprockets/v3.0/QW--4tkWOk_XF1gyoYZDRCyDehMpmnuVayrZKMVqZ7M.cache +2 -0
  45. data/spec/rails_app/tmp/cache/sprockets/v3.0/Qil2vZGP6D36sK3wv91KnVKtRUrj6cr1QQskelyTk9Y.cache +1 -0
  46. data/spec/rails_app/tmp/cache/sprockets/v3.0/RBIGkPIcm4EWMEbCxZN202ZnpKF-q7vmu9Wd1d2KBCg.cache +1 -0
  47. data/spec/rails_app/tmp/cache/sprockets/v3.0/REXd2v4jF9rojlxSTKezbfWQHrV0h16YKzAyEyJFWEM.cache +1 -0
  48. data/spec/rails_app/tmp/cache/sprockets/v3.0/Rzez3kkE4eNMtC1yya3kzO7BXS6d7LAAKDMPkxOuG_0.cache +1 -0
  49. data/spec/rails_app/tmp/cache/sprockets/v3.0/ScFPNKnHQisSmiOxG1guWdIbbXilNmOQhME5BDwNiv4.cache +0 -0
  50. data/spec/rails_app/tmp/cache/sprockets/v3.0/Ui7uJXKUZafSM-Pg057JUmpEm6b1W8Nv-0yn3fz3xZ0.cache +106 -0
  51. data/spec/rails_app/tmp/cache/sprockets/v3.0/Uz0vobQn_2cof5CLzZsjRzJWBGzGfa3a9ouwXy2FjC4.cache +1 -0
  52. data/spec/rails_app/tmp/cache/sprockets/v3.0/W6Eph3scwYK-6sdVKmEL27OnPYBnKiP8kmH8bCHCsJA.cache +1 -0
  53. data/spec/rails_app/tmp/cache/sprockets/v3.0/WPeLjGJ9cBoHaKcawtXwNU9UEiNKXtjT6if7aDyJ-iE.cache +0 -0
  54. data/spec/rails_app/tmp/cache/sprockets/v3.0/YLGNWWpHA4nUart3qBGUKfKtjEfDi6XBOOmqOM2dwsY.cache +1 -0
  55. data/spec/rails_app/tmp/cache/sprockets/v3.0/YWY4C1elKF3eYF9e4lGmKJ8Mlw7w-fDkMF5zkR_DOHU.cache +1 -0
  56. data/spec/rails_app/tmp/cache/sprockets/v3.0/_F-1UKfUa2G5bFoBdU02i5zBUtpiYzqiMUnu0QU5ePY.cache +1 -0
  57. data/spec/rails_app/tmp/cache/sprockets/v3.0/_PrGVuJb9IMfw0jLcId6JwfiXGtsgrKsYvQ_oFFvnpg.cache +2 -0
  58. data/spec/rails_app/tmp/cache/sprockets/v3.0/aEe8dZBMoJN_L7dQ9O90etuJwhYBZaxRLXPLkI4lwXU.cache +3 -0
  59. data/spec/rails_app/tmp/cache/sprockets/v3.0/aIoqzJKq3BKLPn0NJ80EsPM54p1fTGdEaS1LhASLplY.cache +2 -0
  60. data/spec/rails_app/tmp/cache/sprockets/v3.0/azdeIsF9HPA4WivyJx01EAdzHHXs1UJ6Pu8SOb2Ex0E.cache +0 -0
  61. data/spec/rails_app/tmp/cache/sprockets/v3.0/bigAjWfxtrTpxpryFTjOzuZDpQN1TQn2LgyC2UX608A.cache +3 -0
  62. data/spec/rails_app/tmp/cache/sprockets/v3.0/cC4aVV6WxpZQ1JV9tiqJ7c1SHial-X4fXVKIL_0cSNk.cache +1 -0
  63. data/spec/rails_app/tmp/cache/sprockets/v3.0/codNO61Rpx13n_h4WzazQzWJbqM2w7xTmJBkRVGASrE.cache +0 -0
  64. data/spec/rails_app/tmp/cache/sprockets/v3.0/dffd5W19TVYHR7lYQ0z0g1-48SLMJ8w-3bcHGKSvk08.cache +0 -0
  65. data/spec/rails_app/tmp/cache/sprockets/v3.0/eGYqHx1cCGAuRnisa20DTioHGAdMqGSeYY4IeG4Aq18.cache +0 -0
  66. data/spec/rails_app/tmp/cache/sprockets/v3.0/fOMwhE_LoK6PBz43rr86imRHqStpfn-j0zKwNCEFA7A.cache +2 -0
  67. data/spec/rails_app/tmp/cache/sprockets/v3.0/i4_Ww4zBhRbFxc9qsCIEWpRilLf1e0Z6XnnWNP6aDk4.cache +1 -0
  68. data/spec/rails_app/tmp/cache/sprockets/v3.0/iJJjYfLFaJGOB1qhv6XaJXbg6cr-dXZT3m6NbIKJevw.cache +1 -0
  69. data/spec/rails_app/tmp/cache/sprockets/v3.0/j0GxKFTTXVLhgLP0leVrUzi9J5Vk0iv5I3Etnvf1hKo.cache +3 -0
  70. data/spec/rails_app/tmp/cache/sprockets/v3.0/jUcv_4GPi-D5jFNvcEkNKl60eXmJV3voiuFymwpMEZc.cache +2 -0
  71. data/spec/rails_app/tmp/cache/sprockets/v3.0/jm7Gb16iEsab2-4biVjNid9a3ke7Hsf5sazXIGeh2AA.cache +2 -0
  72. data/spec/rails_app/tmp/cache/sprockets/v3.0/lQyPIDuSoqpRLpSFgmdv8Rps26WUfL-WnrGh8X1QrZk.cache +0 -0
  73. data/spec/rails_app/tmp/cache/sprockets/v3.0/ldEt04XepuHp4zFw0wvm2tmp7PHzbvoMqE0dMgHHyiM.cache +1 -0
  74. data/spec/rails_app/tmp/cache/sprockets/v3.0/ll77fKHQUerwje4lfYSqXNfr3bbSm72YVxIeBEmyppc.cache +0 -0
  75. data/spec/rails_app/tmp/cache/sprockets/v3.0/mLQH-sbNxQ8DaRts0YE737TG8kOVWTVCss14WfPAZ7g.cache +1 -0
  76. data/spec/rails_app/tmp/cache/sprockets/v3.0/moNLOTsHz0Ydgt_tVujBaPpE86MfBSWgb6Epm6bsPqY.cache +0 -0
  77. data/spec/rails_app/tmp/cache/sprockets/v3.0/nONU3x7H75eQ2Xaw3GMC0pKEWPyMtRxMJ9Y-l0Ayq6M.cache +33 -0
  78. data/spec/rails_app/tmp/cache/sprockets/v3.0/o-8a91fGF4bF1Mo6fJYIzosTQ-z0oMNGqELLH9S-GxM.cache +1 -0
  79. data/spec/rails_app/tmp/cache/sprockets/v3.0/piE6YVSIuBGMcd2x9kKYtpRLjB-sOJ2sdaeKIssE6wg.cache +1 -0
  80. data/spec/rails_app/tmp/cache/sprockets/v3.0/pp0d6Mo8UZHyEjp0aPeDYY5LE_QPXLXy8tioOcVQlkI.cache +3 -0
  81. data/spec/rails_app/tmp/cache/sprockets/v3.0/rIo7JXnH6RylOxntf3nby_YI_Y3PtklcrYF_ZlbocTY.cache +0 -0
  82. data/spec/rails_app/tmp/cache/sprockets/v3.0/rdNEJjsX13ByMJoPOuPtykhHbAIZGrqz9xdWy9P4seI.cache +0 -0
  83. data/spec/rails_app/tmp/cache/sprockets/v3.0/sbkgYxjKRuP8wk525y6VBNm00JCRW3rELt3mRvcfhUo.cache +13 -0
  84. data/spec/rails_app/tmp/cache/sprockets/v3.0/soD41VoXkrbH1EpLB28yGAgncKYlSlPzn2QG6FpLmTY.cache +0 -0
  85. data/spec/rails_app/tmp/cache/sprockets/v3.0/tOP7iXMW__b5nlhKzVYB6w2CqeCooG4O8M4B5dXqgSk.cache +1 -0
  86. data/spec/rails_app/tmp/cache/sprockets/v3.0/tlD3wYEmMzUG8rkcNz9GwHodH3fku_b240j895xS0Xw.cache +1 -0
  87. data/spec/rails_app/tmp/cache/sprockets/v3.0/tr62WvZYSb5NNmu1FPwoBQzTXhHF6e3PoixrqWHGK1I.cache +0 -0
  88. data/spec/rails_app/tmp/cache/sprockets/v3.0/ty1cXRpXqEnPYMFWKm8qVoLv1JkiOtT9BWTaSXoLI9c.cache +1 -0
  89. data/spec/rails_app/tmp/cache/sprockets/v3.0/vbftfVT4MTnYWfCL30aVfw2QofXiWvLUejwi11r_mPU.cache +0 -0
  90. data/spec/rails_app/tmp/cache/sprockets/v3.0/wKOMf-Sw5RV2z6tocysQ-Lp_WjC4AKfSftpnK9-CUcg.cache +1 -0
  91. data/spec/rails_app/tmp/cache/sprockets/v3.0/wisHDpCMSc22lTsGeee4BWwERbE5ZVWMsArIV1XI41g.cache +0 -0
  92. data/spec/rails_app/tmp/cache/sprockets/v3.0/wmPDgrxhKM3ep5L2Wpxxp0zjuvgNXYHKlFY7a8Cv_mY.cache +1 -0
  93. data/spec/rails_app/tmp/cache/sprockets/v3.0/xz5aZYcS9RYBKIAYIGo8NA6OJ0zS1A_2YUjm-5YEgX8.cache +0 -0
  94. data/spec/rails_app/tmp/cache/sprockets/v3.0/yqnrYB_p9wjvOW9aTar8YP17tUVeKL0vv5gKw42K-xs.cache +1 -0
  95. data/spec/rails_app/tmp/cache/sprockets/v3.0/zVcdr4mnvtszU1y-2twwNb1pKNesauWRZEzeg8KuyI8.cache +1 -0
  96. data/spec/rails_app/tmp/cache/sprockets/v3.0/zqUk2pSqqUA61GTRQEHqzW2awxP7nrwKFq17PEgofBI.cache +2 -0
  97. data/spec/testing_controller_spec.rb +4 -4
  98. metadata +276 -110
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5b58718443ad4b23a279f6226b5ef051d74b81ae
4
+ data.tar.gz: 87872368981f5412da05cb26474022f254b819f2
5
+ SHA512:
6
+ metadata.gz: 6b0f9c04bcded978cae648bbb2f81e57c3cfb5def23fea10bca98c4e110817588007addb4c8b5ed396f014d7f1ee0595d27cc221dcd824486c3ada3bca2b6b7e
7
+ data.tar.gz: 617af0c8413a46ed46b5dc29174571c017c335a76d410b67801d10fc76834b13998e3f1d61c5a730fec4d2155176b214287070b818058eb5d86d445987a6c761
data/CHANGELOG.md CHANGED
@@ -1 +1,5 @@
1
+ # v1.0.0.0 - 2016-01-04
2
+
3
+ * Update expectjs to 0.3.1 and mochajs to 2.3.4
4
+
1
5
  * Fix `wait` hanging at server exception
data/LICENSE.txt CHANGED
@@ -1,3 +1,3 @@
1
1
  Copyright (c) 2009-2015 Good Bit Labs Limited
2
2
 
3
- GPLv3 License: http://www.gnu.org/licenses/gpl-3.0.en.html
3
+ The same license as Ext JS: https://www.sencha.com/legal/#Sencha_Ext_JS
data/README.md CHANGED
@@ -29,8 +29,7 @@ example spec may look like this (in `spec/features/javascripts/user_grid.js.coff
29
29
 
30
30
  describe 'UserGrid', ->
31
31
  it 'shows proper title', ->
32
- grid = Ext.ComponentQuery.query('panel[id="user_grid"]')[0]
33
- expect(grid.getHeader().title).to.eql 'Test component'
32
+ expect(grid().getHeader().title).to.eql 'Test component'
34
33
 
35
34
  This spec can be run by appending the `spec` parameter to the url:
36
35
 
@@ -38,7 +37,7 @@ This spec can be run by appending the `spec` parameter to the url:
38
37
 
39
38
  Specs can be structured into directories. For example, let's say we have a namescope for admin components:
40
39
 
41
- class Admin::UserGrid < Netzke::Basepack::Grid
40
+ class Admin::UserGrid < Netzke::Grid::Base
42
41
  end
43
42
 
44
43
  It makes sense to put the corresponding specs in `spec/features/javascripts/admin/user_grid.js.coffee`. In this case,
@@ -111,9 +110,9 @@ helper provided by the `netzke_testing` gem. Here's an example (in `spec/user_gr
111
110
  feature GridWithDestructiveButton do
112
111
  it 'allows instant removing of all records with a single button click', js: true do
113
112
  10.times { FactoryGirl.create :user }
114
- User.count.should == 10
113
+ expect(User.count).to eql == 10
115
114
  run_mocha_spec 'grid_with_destructive_button'
116
- User.count.should == 0
115
+ expect(User.count).to eql == 0
117
116
  end
118
117
  end
119
118
 
@@ -150,12 +149,15 @@ However, keep in mind, that this won't have effect on running specs manually in
150
149
 
151
150
  Asynchronous helpers like `wait` can either call the provided callback function, or (if none was provided) return a promise, so you can do:
152
151
 
153
- wait().
154
- .then ->
155
- doSomething()
156
- wait()
157
- .then
158
- doSomeMore()
152
+ it 'does something asynchronous', ->
153
+ wait().
154
+ .then ->
155
+ doSomething()
156
+ wait()
157
+ .then
158
+ doSomeMore()
159
+
160
+ NOTE: we should not use the `done` parameter here, as promises are handled differently than callbacks by Mocha.
159
161
 
160
162
  ## Note on headless browser testing
161
163
 
@@ -165,7 +167,7 @@ No headless browsers like PhantomJS or WebKit were used for testing because our
165
167
 
166
168
  * Ruby >= 1.9.3
167
169
  * Rails ~> 4.2.0
168
- * Ext JS = 5.1.0
170
+ * Ext JS = 5.1.1
169
171
 
170
172
  ---
171
- Copyright (c) 2009-2015 [Good Bit Labs Limited](http://goodbitlabs.com/), released under the GPLv3 license
173
+ Copyright (c) 2009-2016 [Good Bit Labs](http://goodbitlabs.com/), released under the same license as [Ext JS](https://www.sencha.com/legal/#Sencha_Ext_JS)
@@ -1,10 +1,6 @@
1
-
2
1
  (function (global, module) {
3
2
 
4
- if ('undefined' == typeof module) {
5
- var module = { exports: {} }
6
- , exports = module.exports
7
- }
3
+ var exports = module.exports;
8
4
 
9
5
  /**
10
6
  * Exports.
@@ -17,7 +13,7 @@
17
13
  * Exports version.
18
14
  */
19
15
 
20
- expect.version = '0.1.2';
16
+ expect.version = '0.3.1';
21
17
 
22
18
  /**
23
19
  * Possible assertion flags.
@@ -56,7 +52,7 @@
56
52
  }
57
53
 
58
54
  var $flags = flag ? flags[flag] : keys(flags)
59
- , self = this
55
+ , self = this;
60
56
 
61
57
  if ($flags) {
62
58
  for (var i = 0, l = $flags.length; i < l; i++) {
@@ -71,7 +67,7 @@
71
67
  var old = this[name];
72
68
  this[name] = function () {
73
69
  return old.apply(self, arguments);
74
- }
70
+ };
75
71
 
76
72
  for (var fn in Assertion.prototype) {
77
73
  if (Assertion.prototype.hasOwnProperty(fn) && fn != name) {
@@ -83,7 +79,7 @@
83
79
  }
84
80
  }
85
81
  }
86
- };
82
+ }
87
83
 
88
84
  /**
89
85
  * Performs an assertion
@@ -91,12 +87,19 @@
91
87
  * @api private
92
88
  */
93
89
 
94
- Assertion.prototype.assert = function (truth, msg, error) {
90
+ Assertion.prototype.assert = function (truth, msg, error, expected) {
95
91
  var msg = this.flags.not ? error : msg
96
- , ok = this.flags.not ? !truth : truth;
92
+ , ok = this.flags.not ? !truth : truth
93
+ , err;
97
94
 
98
95
  if (!ok) {
99
- throw new Error(msg.call(this));
96
+ err = new Error(msg.call(this));
97
+ if (arguments.length > 3) {
98
+ err.actual = this.obj;
99
+ err.expected = expected;
100
+ err.showDiff = true;
101
+ }
102
+ throw err;
100
103
  }
101
104
 
102
105
  this.and = new Assertion(this.obj);
@@ -115,6 +118,19 @@
115
118
  , function(){ return 'expected ' + i(this.obj) + ' to be falsy' });
116
119
  };
117
120
 
121
+ /**
122
+ * Creates an anonymous function which calls fn with arguments.
123
+ *
124
+ * @api public
125
+ */
126
+
127
+ Assertion.prototype.withArgs = function() {
128
+ expect(this.obj).to.be.a('function');
129
+ var fn = this.obj;
130
+ var args = Array.prototype.slice.call(arguments);
131
+ return expect(function() { fn.apply(null, args); });
132
+ };
133
+
118
134
  /**
119
135
  * Assert that the function throws.
120
136
  *
@@ -122,30 +138,31 @@
122
138
  * @api public
123
139
  */
124
140
 
141
+ Assertion.prototype['throw'] =
125
142
  Assertion.prototype.throwError =
126
143
  Assertion.prototype.throwException = function (fn) {
127
144
  expect(this.obj).to.be.a('function');
128
145
 
129
146
  var thrown = false
130
- , not = this.flags.not
147
+ , not = this.flags.not;
131
148
 
132
149
  try {
133
150
  this.obj();
134
151
  } catch (e) {
135
- if ('function' == typeof fn) {
136
- fn(e);
137
- } else if ('object' == typeof fn) {
152
+ if (isRegExp(fn)) {
138
153
  var subject = 'string' == typeof e ? e : e.message;
139
154
  if (not) {
140
155
  expect(subject).to.not.match(fn);
141
156
  } else {
142
157
  expect(subject).to.match(fn);
143
158
  }
159
+ } else if ('function' == typeof fn) {
160
+ fn(e);
144
161
  }
145
162
  thrown = true;
146
163
  }
147
164
 
148
- if ('object' == typeof fn && not) {
165
+ if (isRegExp(fn) && not) {
149
166
  // in the presence of a matcher, ensure the `not` only applies to
150
167
  // the matching.
151
168
  this.flags.not = false;
@@ -212,9 +229,10 @@
212
229
 
213
230
  Assertion.prototype.eql = function (obj) {
214
231
  this.assert(
215
- expect.eql(obj, this.obj)
232
+ expect.eql(this.obj, obj)
216
233
  , function(){ return 'expected ' + i(this.obj) + ' to sort of equal ' + i(obj) }
217
- , function(){ return 'expected ' + i(this.obj) + ' to sort of not equal ' + i(obj) });
234
+ , function(){ return 'expected ' + i(this.obj) + ' to sort of not equal ' + i(obj) }
235
+ , obj);
218
236
  return this;
219
237
  };
220
238
 
@@ -250,9 +268,10 @@
250
268
  // typeof with support for 'array'
251
269
  this.assert(
252
270
  'array' == type ? isArray(this.obj) :
253
- 'object' == type
254
- ? 'object' == typeof this.obj && null !== this.obj
255
- : type == typeof this.obj
271
+ 'regexp' == type ? isRegExp(this.obj) :
272
+ 'object' == type
273
+ ? 'object' == typeof this.obj && null !== this.obj
274
+ : type == typeof this.obj
256
275
  , function(){ return 'expected ' + i(this.obj) + ' to be a' + n + ' ' + type }
257
276
  , function(){ return 'expected ' + i(this.obj) + ' not to be a' + n + ' ' + type });
258
277
  } else {
@@ -459,6 +478,7 @@
459
478
 
460
479
  return this;
461
480
  };
481
+
462
482
  /**
463
483
  * Assert a failure.
464
484
  *
@@ -466,8 +486,8 @@
466
486
  * @api public
467
487
  */
468
488
  Assertion.prototype.fail = function (msg) {
469
- msg = msg || "explicit failure";
470
- this.assert(false, msg, msg);
489
+ var error = function() { return msg || "explicit failure"; }
490
+ this.assert(false, error, error);
471
491
  return this;
472
492
  };
473
493
 
@@ -496,7 +516,7 @@
496
516
  }
497
517
  }
498
518
  return true;
499
- };
519
+ }
500
520
 
501
521
  /**
502
522
  * Array indexOf compatibility.
@@ -518,14 +538,13 @@
518
538
  ; i < j && arr[i] !== o; i++);
519
539
 
520
540
  return j <= i ? -1 : i;
521
- };
541
+ }
522
542
 
523
543
  // https://gist.github.com/1044128/
524
544
  var getOuterHTML = function(element) {
525
545
  if ('outerHTML' in element) return element.outerHTML;
526
546
  var ns = "http://www.w3.org/1999/xhtml";
527
547
  var container = document.createElementNS(ns, '_');
528
- var elemProto = (window.HTMLElement || window.Element).prototype;
529
548
  var xmlSerializer = new XMLSerializer();
530
549
  var html;
531
550
  if (document.xmlVersion) {
@@ -562,7 +581,7 @@
562
581
 
563
582
  function stylize (str) {
564
583
  return str;
565
- };
584
+ }
566
585
 
567
586
  function format (value, recurseTimes) {
568
587
  // Provide a hook for user-specified inspect functions.
@@ -620,6 +639,11 @@
620
639
  return stylize(value.toUTCString(), 'date');
621
640
  }
622
641
 
642
+ // Error objects can be shortcutted
643
+ if (value instanceof Error) {
644
+ return stylize("["+value.toString()+"]", 'Error');
645
+ }
646
+
623
647
  var base, type, braces;
624
648
  // Determine the object type
625
649
  if (isArray(value)) {
@@ -740,11 +764,13 @@
740
764
  return output;
741
765
  }
742
766
  return format(obj, (typeof depth === 'undefined' ? 2 : depth));
743
- };
767
+ }
768
+
769
+ expect.stringify = i;
744
770
 
745
771
  function isArray (ar) {
746
- return Object.prototype.toString.call(ar) == '[object Array]';
747
- };
772
+ return Object.prototype.toString.call(ar) === '[object Array]';
773
+ }
748
774
 
749
775
  function isRegExp(re) {
750
776
  var s;
@@ -762,12 +788,11 @@
762
788
  re.test &&
763
789
  re.exec &&
764
790
  s.match(/^\/.*\/[gim]{0,3}$/);
765
- };
791
+ }
766
792
 
767
793
  function isDate(d) {
768
- if (d instanceof Date) return true;
769
- return false;
770
- };
794
+ return d instanceof Date;
795
+ }
771
796
 
772
797
  function keys (obj) {
773
798
  if (Object.keys) {
@@ -797,7 +822,7 @@
797
822
  other[i] = mapper.call(that, arr[i], i, arr);
798
823
 
799
824
  return other;
800
- };
825
+ }
801
826
 
802
827
  function reduce (arr, fun) {
803
828
  if (Array.prototype.reduce) {
@@ -838,7 +863,7 @@
838
863
  }
839
864
 
840
865
  return rv;
841
- };
866
+ }
842
867
 
843
868
  /**
844
869
  * Asserts deep equality
@@ -847,12 +872,12 @@
847
872
  * @api private
848
873
  */
849
874
 
850
- expect.eql = function eql (actual, expected) {
875
+ expect.eql = function eql(actual, expected) {
851
876
  // 7.1. All identical values are equivalent, as determined by ===.
852
877
  if (actual === expected) {
853
878
  return true;
854
879
  } else if ('undefined' != typeof Buffer
855
- && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
880
+ && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) {
856
881
  if (actual.length != expected.length) return false;
857
882
 
858
883
  for (var i = 0; i < actual.length; i++) {
@@ -861,16 +886,19 @@
861
886
 
862
887
  return true;
863
888
 
864
- // 7.2. If the expected value is a Date object, the actual value is
865
- // equivalent if it is also a Date object that refers to the same time.
889
+ // 7.2. If the expected value is a Date object, the actual value is
890
+ // equivalent if it is also a Date object that refers to the same time.
866
891
  } else if (actual instanceof Date && expected instanceof Date) {
867
892
  return actual.getTime() === expected.getTime();
868
893
 
869
- // 7.3. Other pairs that do not both pass typeof value == "object",
870
- // equivalence is determined by ==.
894
+ // 7.3. Other pairs that do not both pass typeof value == "object",
895
+ // equivalence is determined by ==.
871
896
  } else if (typeof actual != 'object' && typeof expected != 'object') {
872
897
  return actual == expected;
873
-
898
+ // If both are regular expression use the special `regExpEquiv` method
899
+ // to determine equivalence.
900
+ } else if (isRegExp(actual) && isRegExp(expected)) {
901
+ return regExpEquiv(actual, expected);
874
902
  // 7.4. For all other Object pairs, including Array objects, equivalence is
875
903
  // determined by having the same number of owned properties (as verified
876
904
  // with Object.prototype.hasOwnProperty.call), the same set of keys
@@ -880,7 +908,7 @@
880
908
  } else {
881
909
  return objEquiv(actual, expected);
882
910
  }
883
- }
911
+ };
884
912
 
885
913
  function isUndefinedOrNull (value) {
886
914
  return value === null || value === undefined;
@@ -890,6 +918,11 @@
890
918
  return Object.prototype.toString.call(object) == '[object Arguments]';
891
919
  }
892
920
 
921
+ function regExpEquiv (a, b) {
922
+ return a.source === b.source && a.global === b.global &&
923
+ a.ignoreCase === b.ignoreCase && a.multiline === b.multiline;
924
+ }
925
+
893
926
  function objEquiv (a, b) {
894
927
  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))
895
928
  return false;
@@ -958,7 +991,7 @@
958
991
  f(d.getUTCHours()) + ':' +
959
992
  f(d.getUTCMinutes()) + ':' +
960
993
  f(d.getUTCSeconds()) + 'Z' : null;
961
- };
994
+ }
962
995
 
963
996
  var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
964
997
  escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
@@ -1248,6 +1281,5 @@
1248
1281
 
1249
1282
  })(
1250
1283
  this
1251
- , 'undefined' != typeof module ? module : {}
1252
- , 'undefined' != typeof exports ? exports : {}
1284
+ , 'undefined' != typeof module ? module : {exports: {}}
1253
1285
  );
@@ -24,13 +24,13 @@ Ext.apply window,
24
24
  #
25
25
  # wait().then -> doSomething()
26
26
  wait: () ->
27
- waitInCycle = (callback) ->
27
+ waitInCycle = (resolve) ->
28
28
  i = 0
29
29
  id = setInterval ->
30
30
  i += 1
31
31
  if i >= 100
32
32
  clearInterval(id)
33
- callback.call()
33
+ resolve.call()
34
34
 
35
35
  # this way we ensure another 20ms cycle before we issue a callback
36
36
  i = 100 if Netzke.ajaxCount == 0
@@ -56,7 +56,6 @@ Ext.apply window,
56
56
  # wait(50).then ->
57
57
  # waitAtLeast50ThenResolve()
58
58
  else
59
- console.log("1", 1)
60
59
  delay = arguments[0]
61
60
  return new Promise (resolve, reject) ->
62
61
  setInterval ->
@@ -1,19 +1,23 @@
1
- Ext.apply window,
1
+ Ext.apply window, (->
2
+ throwIfNotFound = (cmp) ->
3
+ throw new Error(cmp + " not found") if Ext.isString(cmp)
4
+
2
5
  expectToSee: (cmp) ->
3
- throw cmp + " not found" if Ext.isString(cmp)
6
+ throwIfNotFound(cmp)
4
7
  expect(Ext.isObject(cmp) || Ext.isElement(cmp)).to.be.ok()
5
8
 
6
9
  expectToNotSee: (el) ->
7
10
  expect(Ext.isString(el)).to.be.ok()
8
11
 
9
12
  expectDisabled: (cmp) ->
10
- throw cmp + " not found" if Ext.isString(cmp)
13
+ throwIfNotFound(cmp)
11
14
  expect(cmp.isDisabled()).to.be(true)
12
15
 
13
16
  expectEnabled: (cmp) ->
14
- throw cmp + " not found" if Ext.isString(cmp)
17
+ throwIfNotFound(cmp)
15
18
  expect(cmp.isDisabled()).to.be(false)
16
19
 
17
20
  expectInvisibleBodyOf: (cmp) ->
18
- throw cmp + " not found" if Ext.isString(cmp)
21
+ throwIfNotFound(cmp)
19
22
  expect(cmp.body.isVisible()).to.be false
23
+ )()