netzke-testing 1.0.0.0.pre → 1.0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+ )()