envjs 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,113 +1,36 @@
1
- env.js : A pure JavaScript browser environment.
2
- Developed by John Resig (http://ejohn.org)
1
+ This is a fork of the env.js project (http://github.com/thatcher/env-js/). See that link for env.js details.
3
2
 
4
- Major Contributers:
5
- Chris Thatcher (http://github.com/thatcher)
3
+ This fork is based on the Johnson Ruby gem (http://github.com/jbarnette/johnson). It should become obsolete when the Johnson support has been reintegrated into the master repo.
6
4
 
7
- GitHub repositories:
8
- http://github.com/jeresig/env-js/
9
- http://github.com/thatcher/env-js/
5
+ For now, you can install the envjs gem by installing Johnson:
10
6
 
11
- Mailing List:
12
- http://groups.google.com/group/envjs
7
+ gem install johnson --prerelease
13
8
 
14
- Lighthouse (Bug Tracking):
15
- http://envjs.lighthouseapp.com/projects/21590-envjs/
9
+ (You'll need to manually install any prerequisites it asks for) and then installing the envjs gem with
16
10
 
17
- Build Status:
18
- http://runcoderun.com/thatcher/env-js
11
+ gem install envjs
19
12
 
20
- Original blog post:
21
- http://ejohn.org/projects/bringing-the-browser-to-the-server/
13
+ The envjs gem provides the envjsrb command, which functions as an extended version of the Johnson javascript shell. For example:
22
14
 
23
- Rhino (Java-based JavaScript engine)
24
- http://www.mozilla.org/rhino/
15
+ mbp:env-js smparkes$ envjsrb
16
+ js> this
17
+ => [object Window 0]
18
+ js> window.location
19
+ => about:blank
20
+ js> document.innerHTML
21
+ => "<html><head><title></title></head><body></body></html>"
22
+ js>
25
23
 
26
- Getting the code:
24
+ It's also possible to embed the envjs interpreter similar to the way it's done in Johnson, e.g.,
27
25
 
28
- * Check the code out from git: git clone git://github.com/thatcher/env-js.git
26
+ require 'rubygems' # if necessary
27
+ require 'johnson/tramonkey'
28
+ require 'envjs/runtime'
29
29
 
30
- Building:
31
- * run "ant concat"
32
- * Creates a platform-agnostic "dist/env.js" file and a Rhino-specific "dist/env.rhino.js" file.
30
+ envjs = Johnson::Runtime.new
31
+ envjs.extend Envjs::Runtime
32
+ window = envjs.evaluate("window")
33
+ puts window.location.to_s # == "about:blank"
34
+ puts window.document.innerHTML # == "<html><head><title></title></head><body></body></html>"
33
35
 
34
- Testing:
35
- * Checkout qunit: "git submodule update --init"
36
- * run "ant test"
37
-
38
- Java command line:
39
-
40
- env.rhino.js can be run either with a "generic" version of the Rhino
41
- library (js.jar), or with the repackaged/extended version of Rhino
42
- supplied with env.js (env-js.jar). If your application uses multiple
43
- windows, frames, or iframes, or if it depends on precise adherence to
44
- JavaScript object scoping in event handlers, you will have to use
45
- env-js.jar. Simple applications may be able to run with the generic
46
- version of Rhino.
47
-
48
- The command line used for testing env.js can be found in build.xml,
49
- although the general form is:
50
- java -jar [jar file] [javascript file]
51
- Where "jar file" is either "dist/env-js.jar", "rhino/js.jar", or your
52
- local path to a different version of the Rhino js.jar file. The
53
- "javascript file" is the path to the JavaScript you wish to execute.
54
-
55
- Installing:
56
- 1) Include the proper env.js file for your platform.
57
- load('env.rhino.js'); //if in a Rhino script
58
-
59
- 2) Tell env.js to load an HTML file from your file system that it should model:
60
- Envjs("some/file.html");
61
- or
62
- var someWindow = window.open("some/file.html");
63
- or
64
- window.location = "some/file.html";
65
-
66
- Optionally you can turn on/off settings by passing an options object:
67
- Envjs("some/file.html", {log: function(msg){ console.debug(msg) }});
68
-
69
- 3) Optionally trigger "document ready" events in one of these ways:
70
-
71
- 4) Start processing of window(s)' event queue:
72
- Envjs.wait();
73
-
74
- All together, the steps could be:
75
-
76
- a) simplest method:
77
- load('env.rhino.js');
78
- Envjs("some/file.html");
79
- Envjs.wait();
80
-
81
- b) jQuery ready method:
82
- load('env.rhino.js');
83
- load('jquery-1.3.2.js');
84
- Envjs("some/file.html");
85
- load('some-code-that-sets-up-jquery-onready-behaviors.js')
86
- jQuery.ready();
87
- Envjs.wait();
88
-
89
- c) Other JavaScript frameworks have their own methods of setup, but the general pattern is:
90
- // step 1: load env.js
91
- // optionally: load your framework(s)
92
- // step 2: tell env.js the base DOM to model
93
- // optionally: run any setup code for your framework(s0
94
- // step 3: tell the framework that the document is loaded
95
- // step 4: Envjs.wait();
96
-
97
- Note that env.js is currently limited to loading a single HTML page
98
- from the original window. If you are going to load multiple pages in
99
- succession into the same window, load the first into a new window
100
- object using window.open().
101
-
102
- Testing jQuery Compatibility:
103
- * run ./bin/test-jquery.sh 1.3.2
104
- * run ./bin/test-jquery.sh 1.3.1
105
- * run ./bin/test-jquery.sh 1.2.6
106
- * Checks out the given jQuery tag from Subversion into test/vendor/jQuery/[version],
107
- moves dist/env.rhino.js into the correct location in their tree, and runs the test suites.
108
-
109
- Changes with new timer code:
110
-
111
- Previously with envjs, you could call Java's thread sleep() method to delay execution. This was mostly used in test suites. This may no
112
- longer work the same since it will inhibit all events from firing. You can now use the Envjs.wait(milliseconds) call to achieve an
113
- effect similar to calling sleep().
36
+ Comments to http://groups.google.com/group/envjs or #envjs on freenode.
data/lib/envjs/env.js CHANGED
@@ -37,10 +37,11 @@
37
37
 
38
38
  ( master.window_index === undefined ) && ( master.window_index = 0 );
39
39
 
40
- $platform.init_window = function(window) {
40
+ $platform.init_window = function(inner) {
41
41
  var index = master.window_index++;
42
- window.toString = function(){
43
- return "[object Window "+index+"]";
42
+ inner.toString = function(){
43
+ // return "[object Window "+index+"]";
44
+ return "[object Window]";
44
45
  };
45
46
  };
46
47
 
@@ -51,10 +52,10 @@
51
52
  var swap_script_window = ( $master.first_script_window.window === proxy );
52
53
  if(!proxy){
53
54
  proxy = $platform.new_split_global_outer();
54
- // $master.print("np",proxy);
55
55
  }
56
56
  $master.proxy = proxy;
57
57
  new_window = $platform.new_split_global_inner(proxy,undefined);
58
+ new_window.$inner = new_window;
58
59
  if(swap_script_window) {
59
60
  $master.first_script_window = new_window;
60
61
  }
@@ -69,6 +70,9 @@
69
70
  $master.load(f,new_window);
70
71
  }
71
72
  };
73
+ new_window.evaluate = function(string){
74
+ return $master.evaluate.call(string,new_window);
75
+ };
72
76
  return [ proxy, new_window ];
73
77
  };
74
78
 
@@ -79,13 +83,18 @@
79
83
  var options = this.$options;
80
84
  delete this.$options;
81
85
  $env.$master = $master;
82
- $env.init_window.call(this,options);
86
+ var $inner = this.$inner;
87
+ delete this.$inner;
88
+ $env.init_window.call($inner,$inner,options);
83
89
  };
84
90
 
85
- $env.init_window = function(options){
91
+ $env.init_window = function(inner,options){
92
+ var $inner = inner;
93
+ var $w = this;
94
+
86
95
  options = options || {};
87
96
 
88
- $platform.init_window(this);
97
+ $platform.init_window($w);
89
98
 
90
99
  var print = $master.print;
91
100
 
@@ -98,10 +107,8 @@
98
107
  }
99
108
  // print("setx",this);
100
109
  // print("setx",this.window);
101
-
102
- var $w = this;
103
- // print("$$w",$w);
104
- // print("$$w",$w === this);
110
+
111
+ // print("$$w",$w,this,$w.isInner,this.isInner,$w === this);
105
112
  $env.log = function(msg, level){
106
113
  debug(' '+ (level?level:'LOG') + ':\t['+ new Date()+"] {ENVJS} "+msg);
107
114
  };
@@ -111,7 +118,7 @@ $env.location = function(path, base){
111
118
  if ( path == "about:blank" ) {
112
119
  return path;
113
120
  }
114
- var protocol = new RegExp('(^file\:|^http\:|^https\:)');
121
+ var protocol = new RegExp('(^file\:|^http\:|^https\:|data:)');
115
122
  var m = protocol.exec(path);
116
123
  if(m&&m.length>1){
117
124
  var url = Ruby.URI.parse(path);
@@ -424,16 +431,20 @@ $env.lineSource = function(e){
424
431
 
425
432
  $env.loadInlineScript = function(script){
426
433
  var original_script_window = $master.first_script_window;
434
+ // debug("lis",original_script_window,original_script_window.isInner);
435
+ // debug("XX",window,window.isInner);
427
436
  if ( !$master.first_script_window ) {
428
437
  $master.first_script_window = window;
429
438
  }
439
+ // debug("lix",$master.first_script_window,$master.first_script_window.isInner,$w,$w.isInner);
430
440
  try {
431
- $master.evaluate(script.text,$w);
441
+ $master.evaluate(script.text,$inner);
432
442
  } catch(e) {
433
443
  $env.error("error evaluating script: "+script.text);
434
444
  $env.error(e);
435
445
  }
436
446
  $master.first_script_window = original_script_window;
447
+ // debug("lis",original_script_window,original_script_window.isInner);
437
448
  };
438
449
 
439
450
  $env.writeToTempFile = function(text, suffix){
@@ -484,7 +495,7 @@ $env.__eval__ = function(script,scope){
484
495
  if ( !$master.first_script_window ) {
485
496
  $master.first_script_window = window;
486
497
  }
487
- var result = $master.evaluate(script,$w)(original,scopes);
498
+ var result = $master.evaluate(script,$inner)(original,scopes);
488
499
  $master.first_script_window = original_script_window;
489
500
  return result;
490
501
  }catch(e){
@@ -854,7 +865,87 @@ print("TT");
854
865
  setScope($env.loadLocalScript, scopes.local_load);
855
866
  }
856
867
 
857
- })($env);/*
868
+ })($env);// This code was written by Tyler Akins and has been placed in the
869
+ // public domain. It would be nice if you left this header intact.
870
+ // Base64 code from Tyler Akins -- http://rumkin.com
871
+
872
+ var Base64 = (function () {
873
+ var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
874
+
875
+ var obj = {
876
+ /**
877
+ * Encodes a string in base64
878
+ * @param {String} input The string to encode in base64.
879
+ */
880
+ encode: function (input) {
881
+ var output = "";
882
+ var chr1, chr2, chr3;
883
+ var enc1, enc2, enc3, enc4;
884
+ var i = 0;
885
+
886
+ do {
887
+ chr1 = input.charCodeAt(i++);
888
+ chr2 = input.charCodeAt(i++);
889
+ chr3 = input.charCodeAt(i++);
890
+
891
+ enc1 = chr1 >> 2;
892
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
893
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
894
+ enc4 = chr3 & 63;
895
+
896
+ if (isNaN(chr2)) {
897
+ enc3 = enc4 = 64;
898
+ } else if (isNaN(chr3)) {
899
+ enc4 = 64;
900
+ }
901
+
902
+ output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
903
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
904
+ } while (i < input.length);
905
+
906
+ return output;
907
+ },
908
+
909
+ /**
910
+ * Decodes a base64 string.
911
+ * @param {String} input The string to decode.
912
+ */
913
+ decode: function (input) {
914
+ var output = "";
915
+ var chr1, chr2, chr3;
916
+ var enc1, enc2, enc3, enc4;
917
+ var i = 0;
918
+
919
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
920
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
921
+
922
+ do {
923
+ enc1 = keyStr.indexOf(input.charAt(i++));
924
+ enc2 = keyStr.indexOf(input.charAt(i++));
925
+ enc3 = keyStr.indexOf(input.charAt(i++));
926
+ enc4 = keyStr.indexOf(input.charAt(i++));
927
+
928
+ chr1 = (enc1 << 2) | (enc2 >> 4);
929
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
930
+ chr3 = ((enc3 & 3) << 6) | enc4;
931
+
932
+ output = output + String.fromCharCode(chr1);
933
+
934
+ if (enc3 != 64) {
935
+ output = output + String.fromCharCode(chr2);
936
+ }
937
+ if (enc4 != 64) {
938
+ output = output + String.fromCharCode(chr3);
939
+ }
940
+ } while (i < input.length);
941
+
942
+ return output;
943
+ }
944
+ };
945
+
946
+ return obj;
947
+ })();
948
+ /*
858
949
  * window.js
859
950
  * - this file will be wrapped in a closure providing the window object as $w
860
951
  */
@@ -5185,6 +5276,33 @@ __extend__(DOMDocument.prototype, {
5185
5276
  },
5186
5277
  status: 200
5187
5278
  });
5279
+ } else if (url.indexOf("data:") === 0) {
5280
+ url = url.slice(5);
5281
+ var fields = url.split(",");
5282
+ var content = fields[1];
5283
+ var fields = fields[0].split(";");
5284
+ if(fields[1] === "base64" || (fields[1] && fields[1].indexOf("charset=") === 0 && fields[2] === "base64" ) ) {
5285
+ content = Base64.decode(content);
5286
+ } else {
5287
+ content = unescape(content);
5288
+ }
5289
+ if(fields[0] === "text/html") {
5290
+ } else if(fields[0] === "image/png") {
5291
+ throw new Error("png");
5292
+ } else {
5293
+ content = "<html><head><title></title></head><body>"+content+"</body></html>";
5294
+ }
5295
+ xhr = ({
5296
+ open: function(){},
5297
+ send: function(){
5298
+ var self = this;
5299
+ setTimeout(function(){
5300
+ self.responseText = content;
5301
+ self.onreadystatechange();
5302
+ },0);
5303
+ },
5304
+ status: 200
5305
+ });
5188
5306
  } else {
5189
5307
  xhr = new XMLHttpRequest();
5190
5308
  }
@@ -21542,7 +21660,8 @@ Html5Parser();
21542
21660
  })(); // close function definition begun in 'intro.js'
21543
21661
 
21544
21662
  // Initial window setup
21545
- $env.init.call(this);
21663
+ var init = $env.init;
21664
+ init();
21546
21665
 
21547
21666
  })();
21548
21667
 
data/lib/envjs/runtime.rb CHANGED
@@ -197,6 +197,8 @@ EOJS
197
197
 
198
198
  if uri.scheme == "file"
199
199
  uri_s = uri.path
200
+ elsif uri.scheme == "data"
201
+ raise "implement 0"
200
202
  end
201
203
 
202
204
  v = open(uri_s).read.gsub(/\A#!.*$/, '')
@@ -224,6 +226,8 @@ EOJS
224
226
 
225
227
  if uri.scheme == "file"
226
228
  super uri.path
229
+ elsif uri.scheme == "data"
230
+ raise "implement 1"
227
231
  else
228
232
  raise "hell 1"
229
233
  end
@@ -268,10 +272,15 @@ EOJS
268
272
 
269
273
  master.first_script_window = window
270
274
 
275
+ window["$inner"] = inner
271
276
  window["$master"] = master
272
277
  window["$options"] = evaluate("new Object");
273
278
  window["$options"].proxy = outer
274
279
 
280
+ window.evaluate = lambda { |s|
281
+ return master.evaluate.call(s,window);
282
+ }
283
+
275
284
  window.load = lambda { |*files|
276
285
  files.each do |f|
277
286
  master.load.call f, window
@@ -292,23 +301,24 @@ EOJS
292
301
  scripts = {}
293
302
 
294
303
  ( class << self; self; end ).send :define_method, :become_first_script_window do
295
- # p "heh", inner, master.first_script_window
304
+ # p "heh ++++++++++++++++++++++++++++", inner, master.first_script_window
296
305
  inner = master.first_script_window
297
306
  end
298
307
 
299
308
  ( class << self; self; end ).send :define_method, :evaluate do |*args|
300
309
  ( script, file, line, global, scope, fn ) = *args
301
- # print "eval in " + script[0,50].inspect + (scope ? scope.toString() : "nil") + "\n"
310
+ # print "eval in " + script[0,50].inspect + scope.inspect + " " + ( scope ? scope.isInner.inspect : "none" ) + "\n"
302
311
  global = nil
303
312
  scope ||= inner
304
313
  if fn
305
314
  compiled_script = scripts[fn]
306
315
  end
307
- # compiled_script = compile(script, file, line, global)
308
316
  compiled_script ||= compile(script, file, line, global)
317
+ # compiled_script = compile(script, file, line, global)
309
318
  if fn && !scripts[fn]
310
319
  scripts[fn] = compiled_script
311
320
  end
321
+ # p "?", script
312
322
  evaluate_compiled_script(compiled_script,scope)
313
323
  end
314
324
 
data/test/base64.js ADDED
@@ -0,0 +1,80 @@
1
+ // This code was written by Tyler Akins and has been placed in the
2
+ // public domain. It would be nice if you left this header intact.
3
+ // Base64 code from Tyler Akins -- http://rumkin.com
4
+
5
+ var Base64 = (function () {
6
+ var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
7
+
8
+ var obj = {
9
+ /**
10
+ * Encodes a string in base64
11
+ * @param {String} input The string to encode in base64.
12
+ */
13
+ encode: function (input) {
14
+ var output = "";
15
+ var chr1, chr2, chr3;
16
+ var enc1, enc2, enc3, enc4;
17
+ var i = 0;
18
+
19
+ do {
20
+ chr1 = input.charCodeAt(i++);
21
+ chr2 = input.charCodeAt(i++);
22
+ chr3 = input.charCodeAt(i++);
23
+
24
+ enc1 = chr1 >> 2;
25
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
26
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
27
+ enc4 = chr3 & 63;
28
+
29
+ if (isNaN(chr2)) {
30
+ enc3 = enc4 = 64;
31
+ } else if (isNaN(chr3)) {
32
+ enc4 = 64;
33
+ }
34
+
35
+ output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) +
36
+ keyStr.charAt(enc3) + keyStr.charAt(enc4);
37
+ } while (i < input.length);
38
+
39
+ return output;
40
+ },
41
+
42
+ /**
43
+ * Decodes a base64 string.
44
+ * @param {String} input The string to decode.
45
+ */
46
+ decode: function (input) {
47
+ var output = "";
48
+ var chr1, chr2, chr3;
49
+ var enc1, enc2, enc3, enc4;
50
+ var i = 0;
51
+
52
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
53
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
54
+
55
+ do {
56
+ enc1 = keyStr.indexOf(input.charAt(i++));
57
+ enc2 = keyStr.indexOf(input.charAt(i++));
58
+ enc3 = keyStr.indexOf(input.charAt(i++));
59
+ enc4 = keyStr.indexOf(input.charAt(i++));
60
+
61
+ chr1 = (enc1 << 2) | (enc2 >> 4);
62
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
63
+ chr3 = ((enc3 & 3) << 6) | enc4;
64
+
65
+ output = output + String.fromCharCode(chr1);
66
+
67
+ if (enc3 != 64) {
68
+ output = output + String.fromCharCode(chr2);
69
+ }
70
+ if (enc4 != 64) {
71
+ output = output + String.fromCharCode(chr3);
72
+ }
73
+ } while (i < input.length);
74
+
75
+ return output;
76
+ }
77
+ };
78
+
79
+ return obj;
80
+ })();
@@ -0,0 +1,14 @@
1
+ window.location = "test/index.html";
2
+ window.load("test/qunit.js");
3
+
4
+ test("'index.html' loaded correctly via 'Envjs()' call", function(){
5
+ expect(1);
6
+ try{ ok(document.getElementById('body').id == "body",
7
+ "'index.html' page content available");
8
+ }catch(e){print(e);}
9
+ });
10
+
11
+ test("window.location= following Envjs() initialization flagged as error",
12
+ function(){
13
+ expect(0);
14
+ });
data/test/data.js ADDED
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env envjsrb
2
+ load('base64.js');
3
+ inner = "<head><title>Hello, World from a data uri!</title></head><body></body>";
4
+ doc = "<html>"+inner+"</html>";
5
+ url_escaped = "data:text/html,"+escape(doc);
6
+ base64 = "data:text/html;base64,"+Base64.encode(doc);
7
+ debug(url_escaped);
8
+ window.location = "about:blank";
9
+ Envjs.wait();
10
+ window.location = url_escaped;
11
+ Envjs.wait();
12
+ debug(window.document.documentElement.innerHTML);
13
+ if(window.document.documentElement.innerHTML != inner){
14
+ debug(window.document.documentElement.innerHTML);
15
+ debug(inner);
16
+ throw new Error(window.document.documentElement.innerHTML);
17
+ }
18
+ debug(base64);
19
+ window.location = "about:blank";
20
+ Envjs.wait();
21
+ window.location = base64;
22
+ Envjs.wait();
23
+ debug(window.document.documentElement.innerHTML);
24
+ if(window.document.documentElement.innerHTML != inner){
25
+ throw new Error("b"+window.document.documentElement.innerHTML);
26
+ }
27
+ window.location = "about:blank";
28
+ Envjs.wait();
29
+ window.location = "data:,"+escape("Hello, World from a data uri!");
30
+ Envjs.wait();
31
+ debug(window.location+"");
32
+ debug(window.document.documentElement.innerHTML);
33
+ inner = "<head><title></title></head><body>Hello, World from a data uri!</body>";
34
+ if(window.document.documentElement.innerHTML != inner){
35
+ throw new Error("c"+window.document.documentElement.innerHTML);
36
+ }
37
+
38
+ /* not implemented yet ...
39
+ w = open("about:blank");
40
+ w.foo = 10;
41
+ debug(w.foo);
42
+ uri = "data:text/javascript;base64,"+"foo = 20;";
43
+ w.load(uri);
44
+ debug(w.foo);
45
+ */
data/test/scope.html ADDED
@@ -0,0 +1,19 @@
1
+ <html>
2
+ <head>
3
+ <title>
4
+ </title>
5
+ <script>
6
+ var foo = 10;
7
+ if(foo!=10) {
8
+ throw new Error("scope problem occured");
9
+ }
10
+ </script>
11
+ <script>
12
+ if(foo!=10) {
13
+ throw new Error("scope problem occured");
14
+ }
15
+ </script>
16
+ </head>
17
+ <body>
18
+ </body>
19
+ </html>
data/test/scope.rb ADDED
@@ -0,0 +1,24 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rubygems'
3
+ require 'johnson/tracemonkey'
4
+ require 'envjs/runtime'
5
+
6
+ require 'nanotest'
7
+ include Nanotest
8
+
9
+ rt = Johnson::Runtime.new
10
+ rt.extend(Envjs::Runtime)
11
+
12
+ rt.evaluate("var foo = 10");
13
+ assert { rt.evaluate("foo") == 10 }
14
+
15
+ rt.evaluate('window.location = "http://example.com"')
16
+ assert { 'Example Web Page' == rt.evaluate('window.document.title') }
17
+ assert { 'Example Web Page' == rt.evaluate('this.document.title') }
18
+ assert { 'Example Web Page' == rt.evaluate('document.title') }
19
+
20
+ rt.evaluate('window.location = "http://montrealrb.org"')
21
+ assert { 'Montreal.rb' == rt.evaluate('window.document.title') }
22
+ assert { 'Montreal.rb' == rt.evaluate('this.document.title') }
23
+
24
+ assert { 'Example Web Page' == rt.evaluate('document.title') }
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: envjs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Resig
8
8
  - Chris Thatcher
9
+ - Steven Parkes
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
13
 
13
- date: 2010-02-05 00:00:00 -08:00
14
+ date: 2010-02-09 00:00:00 -08:00
14
15
  default_executable: envjsrb
15
16
  dependencies:
16
17
  - !ruby/object:Gem::Dependency
@@ -21,7 +22,7 @@ dependencies:
21
22
  requirements:
22
23
  - - ">="
23
24
  - !ruby/object:Gem::Version
24
- version: 2.0.0.pre0
25
+ version: 2.0.0.pre1
25
26
  version:
26
27
  description: Browser environment for javascript interpreters
27
28
  email: smparkes@smparkes.net
@@ -49,7 +50,10 @@ files:
49
50
  - lib/envjs/options.rb
50
51
  - lib/envjs/runtime.rb
51
52
  - lib/envjs/tempfile.rb
53
+ - test/base64.js
52
54
  - test/call-load-test.js
55
+ - test/call-load-test.js.smp
56
+ - test/data.js
53
57
  - test/debug.js
54
58
  - test/firebug/errorIcon.png
55
59
  - test/firebug/firebug.css
@@ -90,6 +94,8 @@ files:
90
94
  - test/qunit.js
91
95
  - test/qunit/qunit/qunit.css
92
96
  - test/qunit/qunit/qunit.js
97
+ - test/scope.html
98
+ - test/scope.rb
93
99
  - test/specs/dist/env.spec.js
94
100
  - test/specs/envjs.spec.css
95
101
  - test/specs/parser/html.js
@@ -133,7 +139,7 @@ files:
133
139
  - test/vendor/prototype-1.6.0.3.js
134
140
  - README
135
141
  has_rdoc: true
136
- homepage: http://github.com/thatcher/env-js
142
+ homepage: http://github.com/smparkes/env-js
137
143
  licenses: []
138
144
 
139
145
  post_install_message:
@@ -160,5 +166,5 @@ rubygems_version: 1.3.5
160
166
  signing_key:
161
167
  specification_version: 3
162
168
  summary: Browser environment for javascript interpreters
163
- test_files: []
164
-
169
+ test_files:
170
+ - test/scope.rb