Ticket #9611: string_to_function_with_tests.diff
| File string_to_function_with_tests.diff, 7.6 kB (added by jcoglan, 10 months ago) |
|---|
-
src/enumerable.js
old new 23 23 }, 24 24 25 25 all: function(iterator, context) { 26 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 26 27 iterator = iterator ? iterator.bind(context) : Prototype.K; 27 28 var result = true; 28 29 this.each(function(value, index) { … … 33 34 }, 34 35 35 36 any: function(iterator, context) { 37 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 36 38 iterator = iterator ? iterator.bind(context) : Prototype.K; 37 39 var result = false; 38 40 this.each(function(value, index) { … … 43 45 }, 44 46 45 47 collect: function(iterator, context) { 48 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 46 49 iterator = iterator ? iterator.bind(context) : Prototype.K; 47 50 var results = []; 48 51 this.each(function(value, index) { … … 52 55 }, 53 56 54 57 detect: function(iterator, context) { 58 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 55 59 iterator = iterator.bind(context); 56 60 var result; 57 61 this.each(function(value, index) { … … 64 68 }, 65 69 66 70 findAll: function(iterator, context) { 71 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 67 72 iterator = iterator.bind(context); 68 73 var results = []; 69 74 this.each(function(value, index) { … … 125 130 }, 126 131 127 132 max: function(iterator, context) { 133 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 128 134 iterator = iterator ? iterator.bind(context) : Prototype.K; 129 135 var result; 130 136 this.each(function(value, index) { … … 136 142 }, 137 143 138 144 min: function(iterator, context) { 145 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 139 146 iterator = iterator ? iterator.bind(context) : Prototype.K; 140 147 var result; 141 148 this.each(function(value, index) { … … 147 154 }, 148 155 149 156 partition: function(iterator, context) { 157 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 150 158 iterator = iterator ? iterator.bind(context) : Prototype.K; 151 159 var trues = [], falses = []; 152 160 this.each(function(value, index) { … … 165 173 }, 166 174 167 175 reject: function(iterator, context) { 176 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 168 177 iterator = iterator.bind(context); 169 178 var results = []; 170 179 this.each(function(value, index) { … … 175 184 }, 176 185 177 186 sortBy: function(iterator, context) { 187 if (iterator && iterator.toFunction) iterator = iterator.toFunction(); 178 188 iterator = iterator.bind(context); 179 189 return this.map(function(value, index) { 180 190 return {value: value, criteria: iterator(value, index)}; -
src/string.js
old new 113 113 return this.split(''); 114 114 }, 115 115 116 toFunction: function() { 117 var property = this; 118 if (!property) return Prototype.K; 119 return function(o) { 120 var member = o[property]; 121 return (typeof member == 'function') ? member.apply(o) : member; 122 }; 123 }, 124 116 125 succ: function() { 117 126 return this.slice(0, this.length - 1) + 118 127 String.fromCharCode(this.charCodeAt(this.length - 1) + 1); -
test/unit/enumerable.html
old new 32 32 </tbody> 33 33 </table> 34 34 35 <div style="display: block;" class="finder"></div> 36 <div style="display: none;" class="finder"></div> 37 <div style="display: inline;" class="finder"></div> 38 35 39 <!-- Tests follow --> 36 40 <script type="text/javascript" language="javascript" charset="utf-8"> 37 41 // <![CDATA[ … … 45 49 46 50 Nicknames: $w('sam- noradio htonl Ulysses'), 47 51 52 Radios: [ 53 {checked: true}, {checked: false}, {checked: 1}, {checked: true}, 54 {checked: ''}, {checked: 17}, {checked: null}, {checked: 'foo'} 55 ], 56 57 Records: [ 58 {valid: function() { return this.name == 'Bob'; }, name: 'Mike'}, 59 {valid: function() { return this.name == 'Bob'; }, name: 'Bob'} 60 ], 61 62 Values: [{value: 12}, {value: -5}, {value: 9}, {value: 6}], 63 48 64 Basic: [1, 2, 3], 49 65 50 66 Primes: [ … … 122 138 assert(!Fixtures.Basic.any(function(value) { 123 139 return value > 5; 124 140 })); 141 assert(Fixtures.Radios.any('checked')); 142 assert(Fixtures.Records.any('valid')); 125 143 }}, 126 144 127 145 testAll: function() {with(this) { … … 137 155 assert(!Fixtures.Basic.all(function(value) { 138 156 return value > 1; 139 157 })); 158 assert([{checked: true}, {checked: 12}, {checked: 'foo'}].all('checked')); 159 assert(!Fixtures.Radios.all('checked')); 160 assert(!Fixtures.Records.all('valid')); 140 161 }}, 141 162 142 163 testCollect: function() {with(this) { … … 146 167 }).join(", ")); 147 168 148 169 assertEqual(26, Fixtures.Primes.map().length); 170 171 assertEqual(Fixtures.Nicknames.join(', '), 172 Fixtures.People.collect('nickname').join(', ')); 149 173 }}, 150 174 151 175 testDetect: function() {with(this) { … … 153 177 Fixtures.People.detect(function(person) { 154 178 return person.nickname.match(/no/); 155 179 }).name); 180 assertEqual(true, Fixtures.Radios.detect('checked').checked); 181 assertEqual('Bob', Fixtures.Records.detect('valid').name); 156 182 }}, 157 183 158 184 testEachSlice: function() {with(this) { … … 181 207 testFindAll: function() {with(this) { 182 208 assertEqual(Fixtures.Primes.join(', '), 183 209 Fixtures.Z.findAll(prime).join(', ')); 210 assertEqual(5, Fixtures.Radios.findAll('checked').length); 211 assertEqual(2, $$('div.finder').findAll('visible').length); 184 212 }}, 185 213 186 214 testGrep: function() {with(this) { … … 257 285 assertEqual(97, Fixtures.Primes.max()); 258 286 assertEqual(2, [ -9, -8, -7, -6, -4, -3, -2, 0, -1, 2 ].max()); 259 287 assertEqual('sam-', Fixtures.Nicknames.max()); // ?s > ?U 288 assertEqual(12, Fixtures.Values.max('value')); 260 289 }}, 261 290 262 291 testMin: function() {with(this) { 263 292 assertEqual(1, Fixtures.Z.min()); 264 293 assertEqual(0, [ 1, 2, 3, 4, 5, 6, 7, 8, 0, 9 ].min()); 265 294 assertEqual('Ulysses', Fixtures.Nicknames.min()); // ?U < ?h 295 assertEqual(-5, Fixtures.Values.min('value')); 266 296 }}, 267 297 268 298 testPartition: function() {with(this) { … … 273 303 assertEqual(2, result.length); 274 304 assertEqual('sam-, htonl', result[0].join(', ')); 275 305 assertEqual('noradio, Ulysses', result[1].join(', ')); 306 307 result = Fixtures.Radios.partition('checked'); 308 assertEqual(5, result[0].length); 309 assertEqual(3, result[1].length); 276 310 }}, 277 311 278 312 testPluck: function() {with(this) { … … 284 318 assertEqual(0, 285 319 Fixtures.Nicknames.reject(Prototype.K).length); 286 320 321 assertEqual(3, 322 Fixtures.Radios.reject('checked').length); 323 324 assertEqual(1, 325 Fixtures.Records.reject('valid').length); 326 287 327 assertEqual('sam-, noradio, htonl', 288 328 Fixtures.Nicknames.reject(function(nickname) { 289 329 return nickname != nickname.toLowerCase(); … … 295 335 Fixtures.People.sortBy(function(value) { 296 336 return value.nickname.toLowerCase(); 297 337 }).pluck('nickname').join(', ')); 338 339 assertEqual('-5, 6, 9, 12', 340 Fixtures.Values.sortBy('value').pluck('value').join(', ')); 298 341 }}, 299 342 300 343 testToArray: function() {with(this) {