Mercurial > js4py
diff core-javascript/core-javascript-work/tutorial.js @ 138:20d76c716c9d core-javascript
core-javascript-work$ for NAME in * ; do perl -i -p -e 's/\n/ # use DOS line endings
| author | Jonathan Fine <jfine@pytex.org> |
|---|---|
| date | Mon, 31 Oct 2011 19:58:29 +0000 |
| parents | f9f6684f9b32 |
| children | de308579ea0d |
line wrap: on
line diff
--- a/core-javascript/core-javascript-work/tutorial.js Mon Oct 31 15:16:58 2011 +0000 +++ b/core-javascript/core-javascript-work/tutorial.js Mon Oct 31 19:58:29 2011 +0000 @@ -1,201 +1,201 @@ -var telltail = 'global'; - -var TEST = function(title, code){ - print( 'Testing: ' + title ); - code(); -}; - -var assert = function(arg){ - if(!arg){ - ddt(); - } -}; - -'0' == 0 || ddt; -0 == '' || ddt; -'0' != '' || ddt; -NaN != NaN || ddt; - - -// start closures -TEST('closures', function() -{ - // A factory for creating get-set pairs. - var get_set_factory = function(){ - - var value; - var get = function(){ - return value; - }; - var set = function(new_value){ - value = new_value; - }; - - return { - get: get, - set: set - }; - }; - - // Create and unpack two get-set pairs. - var tmp; - tmp= get_set_factory(); - var get_a = tmp.get; - var set_a = tmp.set; - - tmp= get_set_factory(); - var get_b = tmp.get; - var set_b = tmp.set; - - // Test that both pairs work. - set_a(12); - assert( get_a() === 12 ); - - set_b(13); - assert( get_b() === 13 ); - - // Test that each pair has its own value. - assert( get_a() === 12 ); - -}); -// end closures - - -// start return_this -TEST('return_this', function() -{ - var return_this = function(){ - return this; - }; - - var default_this = return_this(); - assert( default_this.telltail === 'global' ); - - var obj = {}; - obj.return_this = return_this; - assert( obj.return_this === return_this ); - - assert( obj.return_this() === obj ); - assert( obj['return_this']() === obj ); - - assert( return_this.call(obj) === obj ); - assert( return_this.apply(obj) === obj ); - - assert( return_this.call(undefined).telltail === 'global' ); - assert( return_this.apply(undefined).telltail === 'global' ); - -}); -// end return_this - - -// start transient-bind -TEST('transient-bind', function() -{ - // Set up the test object. - var return_this = function(){ - return this; - }; - var obj = { - return_this : return_this - }; - - // Deferring method call changes the outcome. - var method_deferred = obj.return_this; - assert( method_deferred === obj.return_this ); - assert( method_deferred() !== obj.return_this() ); - - // The two outcomes, precisely stated. - assert( obj.return_this() === obj ); - assert( method_deferred().telltail === 'global' ); - -}); -// end transient-bind - - -// start millers-device -TEST('millers-device', function() -{ - var array = []; - var obj = {}; - var fn = function(){}; - - assert( typeof array === 'object' ); - assert( '' + obj === '[object Object]' ); - - assert( obj.toString() === '[object Object]' ); - - var object_toString = obj.toString; - - assert( object_toString.call(array) === '[object Array]' ); - assert( object_toString.call(fn) === '[object Function]' ); - -}); -// end millers-device - - -// start return_arguments -TEST('return_arguments', function() -{ - var return_arguments = function(){ - return arguments; - }; - - var my_arguments = return_arguments(0, 1); - - assert( my_arguments.length === 2 ); - - assert( my_arguments[0] === 0 ); - assert( my_arguments[1] === 1 ); - - assert( '' + my_arguments === '[object Object]' ); - assert( '' + [0, 1] === '0,1' ); - - var array_slice = [].slice; - var my_arguments_fixed = array_slice.call( my_arguments ); - - assert( '' + my_arguments_fixed === '0,1'); - - var obj = {}; - assert( obj.toString.call( my_arguments_fixed ) === '[object Array]' ); - -}); -// end return_arguments - - -// start new-operator -TEST('new-operator', function() -{ - var this_in_Fn; - - var Fn = function(){ - this_in_Fn = this; - }; - - this_in_Fn = null; - var non_instance = Fn(); - assert( non_instance === undefined ); - assert( this_in_Fn.telltail === 'global'); - - this_in_Fn = null; - var instance = new Fn(); - assert( instance === this_in_Fn ); - assert( instance.telltail === undefined ); - - Fn.prototype.telltail = 'instance-of-Fn'; - assert( instance.telltail === 'instance-of-Fn' ); - - Fn.prototype = { - telltail : 'prototype-is-changed' - }; - var second_instance = new Fn(); - assert( second_instance.telltail === 'prototype-is-changed' ); - - Fn.prototype = second_instance; - second_instance.i = 42; - - var third_instance = new Fn(); - assert( third_instance.telltail === 'prototype-is-changed' ); - assert( third_instance.i === 42 ); - -}); -// end new-operator +var telltail = 'global'; + +var TEST = function(title, code){ + print( 'Testing: ' + title ); + code(); +}; + +var assert = function(arg){ + if(!arg){ + ddt(); + } +}; + +'0' == 0 || ddt; +0 == '' || ddt; +'0' != '' || ddt; +NaN != NaN || ddt; + + +// start closures +TEST('closures', function() +{ + // A factory for creating get-set pairs. + var get_set_factory = function(){ + + var value; + var get = function(){ + return value; + }; + var set = function(new_value){ + value = new_value; + }; + + return { + get: get, + set: set + }; + }; + + // Create and unpack two get-set pairs. + var tmp; + tmp= get_set_factory(); + var get_a = tmp.get; + var set_a = tmp.set; + + tmp= get_set_factory(); + var get_b = tmp.get; + var set_b = tmp.set; + + // Test that both pairs work. + set_a(12); + assert( get_a() === 12 ); + + set_b(13); + assert( get_b() === 13 ); + + // Test that each pair has its own value. + assert( get_a() === 12 ); + +}); +// end closures + + +// start return_this +TEST('return_this', function() +{ + var return_this = function(){ + return this; + }; + + var default_this = return_this(); + assert( default_this.telltail === 'global' ); + + var obj = {}; + obj.return_this = return_this; + assert( obj.return_this === return_this ); + + assert( obj.return_this() === obj ); + assert( obj['return_this']() === obj ); + + assert( return_this.call(obj) === obj ); + assert( return_this.apply(obj) === obj ); + + assert( return_this.call(undefined).telltail === 'global' ); + assert( return_this.apply(undefined).telltail === 'global' ); + +}); +// end return_this + + +// start transient-bind +TEST('transient-bind', function() +{ + // Set up the test object. + var return_this = function(){ + return this; + }; + var obj = { + return_this : return_this + }; + + // Deferring method call changes the outcome. + var method_deferred = obj.return_this; + assert( method_deferred === obj.return_this ); + assert( method_deferred() !== obj.return_this() ); + + // The two outcomes, precisely stated. + assert( obj.return_this() === obj ); + assert( method_deferred().telltail === 'global' ); + +}); +// end transient-bind + + +// start millers-device +TEST('millers-device', function() +{ + var array = []; + var obj = {}; + var fn = function(){}; + + assert( typeof array === 'object' ); + assert( '' + obj === '[object Object]' ); + + assert( obj.toString() === '[object Object]' ); + + var object_toString = obj.toString; + + assert( object_toString.call(array) === '[object Array]' ); + assert( object_toString.call(fn) === '[object Function]' ); + +}); +// end millers-device + + +// start return_arguments +TEST('return_arguments', function() +{ + var return_arguments = function(){ + return arguments; + }; + + var my_arguments = return_arguments(0, 1); + + assert( my_arguments.length === 2 ); + + assert( my_arguments[0] === 0 ); + assert( my_arguments[1] === 1 ); + + assert( '' + my_arguments === '[object Object]' ); + assert( '' + [0, 1] === '0,1' ); + + var array_slice = [].slice; + var my_arguments_fixed = array_slice.call( my_arguments ); + + assert( '' + my_arguments_fixed === '0,1'); + + var obj = {}; + assert( obj.toString.call( my_arguments_fixed ) === '[object Array]' ); + +}); +// end return_arguments + + +// start new-operator +TEST('new-operator', function() +{ + var this_in_Fn; + + var Fn = function(){ + this_in_Fn = this; + }; + + this_in_Fn = null; + var non_instance = Fn(); + assert( non_instance === undefined ); + assert( this_in_Fn.telltail === 'global'); + + this_in_Fn = null; + var instance = new Fn(); + assert( instance === this_in_Fn ); + assert( instance.telltail === undefined ); + + Fn.prototype.telltail = 'instance-of-Fn'; + assert( instance.telltail === 'instance-of-Fn' ); + + Fn.prototype = { + telltail : 'prototype-is-changed' + }; + var second_instance = new Fn(); + assert( second_instance.telltail === 'prototype-is-changed' ); + + Fn.prototype = second_instance; + second_instance.i = 42; + + var third_instance = new Fn(); + assert( third_instance.telltail === 'prototype-is-changed' ); + assert( third_instance.i === 42 ); + +}); +// end new-operator
