Mercurial > js4py
changeset 162:77e87f1b5811 core-javascript
$ hg merge core-javascript.closure-exercises # done, at least for now
| author | jf3243 |
|---|---|
| date | Wed, 09 Nov 2011 17:00:38 +0000 |
| parents | 9cdf095a283e (current diff) a4b0e283999c (diff) |
| children | db35829a438f 48d35d049b19 |
| files | |
| diffstat | 14 files changed, 496 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgignore Tue Nov 01 09:07:46 2011 +0000 +++ b/.hgignore Wed Nov 09 17:00:38 2011 +0000 @@ -4,6 +4,7 @@ *.orig *.pyc *.zip +*.exe # Generated by LaTeX Beamer. *.aux
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core-javascript/core-javascript-work/answers/closure-exercises.js Wed Nov 09 17:00:38 2011 +0000 @@ -0,0 +1,205 @@ +var something; + +TEST('anon', function() +{ + var answer; + + // start + answer = function(){ + return 1; + }; + // stop + + assert( answer() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(){ + + var answer; + + // start + answer = function(){ + return 1; + }; + // stop + + return answer; + }; + + var my_inner_function = outer_function(); + + assert( typeof my_inner_function === 'function' ); + assert( my_inner_function() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(){ + + var answer; + + // start + answer = function(){ + return 1; + }; + // stop + + return answer; + }; + + assert( outer_function()() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(n){ + + var answer; + + // start + answer = function(){ + return n; + }; + // stop + + return answer; + }; + + assert( outer_function(1)() === 1 ); + assert( outer_function(2)() === 2 ); + assert( outer_function(3)() === 3 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(n){ + + // start + return function(){ + return n; + }; + // stop + }; + + assert( outer_function(1)() === 1 ); + assert( outer_function(2)() === 2 ); + assert( outer_function(3)() === 3 ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var get_value = function(){ + return value; + }; + + something = 1; + assert( get_value() === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var set_value = function(n){ + value = n; + }; + + set_value(2); + something = 2; + assert( value === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var get_value = function(){ + return value; + }; + + var set_value = function(n){ + value = n; + }; + + something = 1; + assert( get_value() === something ); + + set_value(2); + something = 2; + assert( get_value() === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var ddd = function(aaa, bbb){ + return { + // start + aaa: aaa, + bbb: bbb + // stop + }; + }; + + var obj = ddd(1, 2); + + assert( obj.aaa === 1 ); + assert( obj.bbb === 2 ); + +}); + + +TEST('anon', function() +{ + + var get_set_factory = function(){ + + // start + var value; + + var get = function(){ + return value; + }; + + var set = function(new_value){ + value = new_value; + }; + // stop + + return { + get : get, + set : set + }; + }; + + 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; + + + set_a('aaa'); + assert( get_a() == 'aaa' ); + + set_b('bbb'); + assert( get_b() == 'bbb' ); + + assert( get_a() == 'aaa' ); +});
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core-javascript/core-javascript-work/closure-exercises.js Wed Nov 09 17:00:38 2011 +0000 @@ -0,0 +1,168 @@ +var something; + +TEST('anon', function() +{ + var answer; + + // Please write your answer here. + + assert( answer() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(){ + + var answer; + + // Please write your answer here. + + return answer; + }; + + var my_inner_function = outer_function(); + + assert( typeof my_inner_function === 'function' ); + assert( my_inner_function() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(){ + + var answer; + + // Please write your answer here. + + return answer; + }; + + assert( outer_function()() === 1 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(n){ + + var answer; + + // Please write your answer here. + + return answer; + }; + + assert( outer_function(1)() === 1 ); + assert( outer_function(2)() === 2 ); + assert( outer_function(3)() === 3 ); +}); + + +TEST('anon', function() +{ + var outer_function = function(n){ + + // Please write your answer here. + }; + + assert( outer_function(1)() === 1 ); + assert( outer_function(2)() === 2 ); + assert( outer_function(3)() === 3 ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var get_value = function(){ + return value; + }; + + assert( get_value() === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var set_value = function(n){ + value = n; + }; + + set_value(2); + assert( value === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var get_value = function(){ + return value; + }; + + var set_value = function(n){ + value = n; + }; + + assert( get_value() === something ); + + set_value(2); + assert( get_value() === something ); +}); + + +TEST('anon', function() +{ + var value = 1; + + var ddd = function(aaa, bbb){ + return { + // Please write your answer here. + }; + }; + + var obj = ddd(1, 2); + + assert( obj.aaa === 1 ); + assert( obj.bbb === 2 ); + +}); + + +TEST('anon', function() +{ + + var get_set_factory = function(){ + + // Please write your answer here. + + return { + get : get, + set : set + }; + }; + + 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; + + + set_a('aaa'); + assert( get_a() == 'aaa' ); + + set_b('bbb'); + assert( get_b() == 'bbb' ); + + assert( get_a() == 'aaa' ); +});
--- a/core-javascript/core-javascript-work/exercise-1.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/exercise-1.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,9 +1,9 @@ -var AAA = (function (BBB) +var AAA = (function (BBB) { - BBB.fff = function(ccc) + BBB.fff = function(ccc) { return { - ggg: function(ddd) + ggg: function(ddd) { return BBB.hhh(ddd, ccc.iii()); }
--- a/core-javascript/core-javascript-work/exercise-2.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/exercise-2.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,5 +1,5 @@ var copy_attributes = function(tgt, src){ - + tgt.aaa = src.get_aaa(); tgt.bbb = src.get_bbb(); tgt.ccc = src.get_ccc();
--- a/core-javascript/core-javascript-work/library.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/library.js Wed Nov 09 17:00:38 2011 +0000 @@ -14,7 +14,7 @@ var SimpleClass = function(prototype){ var cls = function(){ - + var instance = create(prototype); instance.__init__.apply(instance, arguments); return instance;
--- a/core-javascript/core-javascript-work/solution-1-a.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-1-a.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,10 +1,10 @@ -var AAA = function () +var AAA = function () { var BBB = AAA || {}; - BBB.fff = function(ccc) + BBB.fff = function(ccc) { return { - ggg: function(ddd) + ggg: function(ddd) { return BBB.hhh(ddd, ccc.iii()); }
--- a/core-javascript/core-javascript-work/solution-1-b.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-1-b.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,4 +1,4 @@ -var AAA = function () +var AAA = function () { var BBB = AAA || {}; return BBB;
--- a/core-javascript/core-javascript-work/solution-1-d.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-1-d.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,9 +1,9 @@ var AAA = AAA || {}; -AAA.fff = function(ccc) +AAA.fff = function(ccc) { return { - ggg: function(ddd) + ggg: function(ddd) { return AAA.hhh(ddd, ccc.iii()); }
--- a/core-javascript/core-javascript-work/solution-2-a.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-2-a.js Wed Nov 09 17:00:38 2011 +0000 @@ -1,10 +1,10 @@ var copy_attributes = function(tgt, src){ - + var keys = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg', 'hhh']; var i; var key; for(i=0; i< keys.length; i++){ - tgt[key] = src['get_' + key](); + tgt[key] = src['get_' + key](); } };
--- a/core-javascript/core-javascript-work/solution-2-b.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-2-b.js Wed Nov 09 17:00:38 2011 +0000 @@ -5,7 +5,7 @@ var key; for(i=0; i< keys.length; i++){ - tgt[key] = src['get_' + key](); + tgt[key] = src['get_' + key](); }; }; };
--- a/core-javascript/core-javascript-work/solution-2-c.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/solution-2-c.js Wed Nov 09 17:00:38 2011 +0000 @@ -9,7 +9,7 @@ var i; for(i=0; i< keys.length; i++){ - tgt[key] = src['get_' + key](); + tgt[key] = src['get_' + key](); }; } };
--- a/core-javascript/core-javascript-work/testtools.js Tue Nov 01 09:07:46 2011 +0000 +++ b/core-javascript/core-javascript-work/testtools.js Wed Nov 09 17:00:38 2011 +0000 @@ -4,20 +4,29 @@ // Define a global function 'log'. var log; if (this.hasOwnProperty('jsArguments')){ - + log = function(s){ print(s + '\n'); }; } else { - log = print; + log = print; } -// +// var TEST = function(title, code){ + var x; + log( 'Testing: ' + title ); _assertion_count = 0; - code(); + + try { + code(); + } catch (x) { + log('! Exception at ' + x.fileName +':' + x.lineNumber); + log('! [' + x.name + '] ' + x.message ); + } + }; var assert = function(arg){
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core-javascript/py/remove_answers.py Wed Nov 09 17:00:38 2011 +0000 @@ -0,0 +1,94 @@ +'''Remove answers from exercises file.''' + +import os +import sys + +NORMAL, SKIPPING, ERROR = range(3) +LINE, SOMETHING, START, STOP = range(4) + +lookup = {} + +# All other states are an error. +lookup[NORMAL, LINE] = NORMAL +lookup[NORMAL, SOMETHING] = NORMAL +lookup[NORMAL, START] = SKIPPING +lookup[SKIPPING, LINE] = SKIPPING +# lookup[NORMAL, STOP] = ERROR +# lookup[SKIPPING, SOMETHING] = ERROR +lookup[SKIPPING, STOP] = NORMAL + + +def doit(src, tgt): + + pending = [] + with open(src, 'rb') as lines: + + new_state = NORMAL + + for lineno, line in enumerate(lines): + + state = new_state + + + stripped_line = line.strip() + + if stripped_line.startswith('something'): + event = SOMETHING + + elif stripped_line == '// start': + event = START + + elif stripped_line == '// stop': + event = STOP + + else: + event = LINE + + new_state = lookup[state, event] + + if event == SOMETHING: + pass + + elif event == STOP: + pass + + elif event == START: + indent = len(line) - len(line.lstrip()) + spaces = line[0:indent] + pending.append(spaces + '// Please write your answer here.') + + elif state == SKIPPING: + pass + + elif event == LINE: + pending.append(line.rstrip()) + + + with open(tgt, 'wb') as f: + + for line in pending: + f.write(line + '\r\n') + + + +if __name__ == '__main__': + + + root = 'core-javascript-work' + exercises_dir = root + answers_dir = os.path.join(root, 'answers') + + + names = [ + name + for name in os.listdir(answers_dir) + if name.endswith('.js') + ] + + + for name in names: + + src = os.path.join(answers_dir, name) + tgt = os.path.join(exercises_dir, name) + + doit(src, tgt)
