konacha-chai-matchers 0.1.1 → 0.1.2

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.
data/VERSIONS CHANGED
@@ -10,6 +10,6 @@ chai-changes: 1.3.1
10
10
  chai-backbone: 0.9.2
11
11
  js-factories: 0.9.0
12
12
  mocha-as-promised: 1.2.1
13
- chai-things: 0.1.1
13
+ chai-things: 0.1.2
14
14
  chai-fuzzy: 1.1.1
15
15
  sinon: 1.6.0
@@ -1,7 +1,7 @@
1
1
  module Konacha
2
2
  module Chai
3
3
  module Matchers
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
6
6
  end
7
7
  end
@@ -14,23 +14,31 @@
14
14
 
15
15
  var Assertion = chai.Assertion,
16
16
  assertionPrototype = Assertion.prototype,
17
- expect = chai.expect;
17
+ expect = chai.expect,
18
+ containPropertyDesc = Object.getOwnPropertyDescriptor(assertionPrototype, 'contain');
19
+ Object.defineProperty(assertionPrototype, 'contains', containPropertyDesc);
20
+ Object.defineProperty(assertionPrototype, 'includes', containPropertyDesc);
18
21
 
19
22
  // Handles the `something` chain property
20
23
  function chainSomething() {
21
24
  // `include` or `contains` should have been called before
22
25
  if (!utils.flag(this, "contains"))
23
26
  throw new Error("cannot use something without include or contains");
24
- // `something` should not have been used already
25
- if (utils.flag(this, "something"))
26
- throw new Error("cannot use something twice in an assertion");
27
- // flag that this is a `something` chain
28
- utils.flag(this, "something", {
29
- // remember if `something` was negated
30
- negate: utils.flag(this, "negate")
31
- });
32
- // reset the negation flag for the coming assertion
33
- utils.flag(this, "negate", false);
27
+ // Flag that this is a `something` chain
28
+ var lastSomething = this, newSomething = {};
29
+ while (utils.flag(lastSomething, "something")) {
30
+ lastSomething = utils.flag(lastSomething, "something");
31
+ }
32
+ // Transfer all the flags to the new `something` and remove them from `this`
33
+ utils.transferFlags(this, newSomething, false);
34
+ for (var prop in this.__flags)
35
+ if (!/^(?:something|object|ssfi|message)$/.test(prop))
36
+ delete this.__flags[prop];
37
+
38
+ // Add the `newSomething` to the `lastSomething` in the chain.
39
+ utils.flag(lastSomething, "something", newSomething);
40
+ // Clear the `something` flag from `newSomething`.
41
+ utils.flag(newSomething, "something", false);
34
42
  }
35
43
 
36
44
  // Performs the `something()` assertion
@@ -38,7 +46,8 @@
38
46
  // Undo the flags set by the `something` chain property
39
47
  var somethingFlags = utils.flag(this, "something");
40
48
  utils.flag(this, "something", false);
41
- utils.flag(this, "negate", somethingFlags.negate);
49
+ if (somethingFlags)
50
+ utils.transferFlags(somethingFlags, this, true);
42
51
 
43
52
  // The assertion's object for `something` should be array-like
44
53
  var object = utils.flag(this, "object");
@@ -62,13 +71,13 @@
62
71
  // Override all methods to react on a possible `something` in the chain
63
72
  methodNames.forEach(function (methodName) {
64
73
  Assertion.overwriteMethod(methodName, function (_super) {
65
- return function () {
74
+ return function somethingMethod() {
66
75
  // Return if no `something` has been used in the chain
67
76
  var somethingFlags = utils.flag(this, "something");
68
77
  if (!somethingFlags)
69
78
  return _super.apply(this, arguments);
70
- // Clear the `something` flag; it should not be handled again
71
- utils.flag(this, "something", false);
79
+ // Use the nested `something` flag as the new `something` flag for this.
80
+ utils.flag(this, "something", utils.flag(somethingFlags, "something"));
72
81
 
73
82
  // The assertion's object for `something` should be array-like
74
83
  var arrayObject = utils.flag(this, "object");
@@ -77,7 +86,7 @@
77
86
  expect(length).to.be.a("number", "something object length");
78
87
 
79
88
  // In the negative case, an empty array means success
80
- var negate = somethingFlags.negate;
89
+ var negate = utils.flag(somethingFlags, "negate");
81
90
  if (negate && !length)
82
91
  return;
83
92
  // In the positive case, the array should not be empty
@@ -91,17 +100,19 @@
91
100
  var item = arrayObject[i],
92
101
  itemAssertion = copyAssertion(this, item, somethingAssert);
93
102
  assertionError = null;
94
- try { _super.apply(itemAssertion, arguments); }
103
+ try { somethingMethod.apply(itemAssertion, arguments); }
95
104
  catch (error) { assertionError = error; }
96
105
  // If the element satisfies the assertion
97
106
  if (!assertionError) {
98
107
  // In case the base assertion is negated, a satisfying element
99
108
  // means the base assertion ("no element must satisfy x") fails
100
109
  if (negate) {
101
- // Assert the negated item assertion, which should fail and throw an error
102
- var negItemAssertion = copyAssertion(this, item, somethingAssert, true);
103
- _super.apply(negItemAssertion, arguments);
104
- // Throw here if, for some reason, the negated item assertion didn't throw
110
+ if (!utils.flag(somethingFlags, "something")) {
111
+ // If we have no child `something`s then assert the negated item assertion, which should fail and throw an error
112
+ var negItemAssertion = copyAssertion(this, item, somethingAssert, true);
113
+ somethingMethod.apply(negItemAssertion, arguments);
114
+ }
115
+ // Throw here if we have a child `something`, or, for some reason, the negated item assertion didn't throw
105
116
  new Assertion(arrayObject).assert(false,
106
117
  "expected no element of #{this} to satisfy the assertion");
107
118
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: konacha-chai-matchers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-26 00:00:00.000000000 Z
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A set of Chai.js libraries ready to use for Konacha
15
15
  email:
@@ -59,21 +59,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '0'
62
- segments:
63
- - 0
64
- hash: 567893281
65
62
  required_rubygems_version: !ruby/object:Gem::Requirement
66
63
  none: false
67
64
  requirements:
68
65
  - - ! '>='
69
66
  - !ruby/object:Gem::Version
70
67
  version: '0'
71
- segments:
72
- - 0
73
- hash: 567893281
74
68
  requirements: []
75
69
  rubyforge_project: konacha-chai-matchers
76
- rubygems_version: 1.8.25
70
+ rubygems_version: 1.8.15
77
71
  signing_key:
78
72
  specification_version: 3
79
73
  summary: Chai.js plugins collection for Konacha