casperjs 1.0.0.RC1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/CHANGELOG.md +179 -0
  2. data/LICENSE.md +19 -0
  3. data/README.md +30 -0
  4. data/bin/bootstrap.js +292 -0
  5. data/bin/usage.txt +10 -0
  6. data/casperjs.gemspec +21 -0
  7. data/modules/casper.js +1679 -0
  8. data/modules/cli.js +138 -0
  9. data/modules/clientutils.js +595 -0
  10. data/modules/colorizer.js +129 -0
  11. data/modules/events.js +247 -0
  12. data/modules/injector.js +93 -0
  13. data/modules/mouse.js +110 -0
  14. data/modules/querystring.js +187 -0
  15. data/modules/tester.js +807 -0
  16. data/modules/utils.js +429 -0
  17. data/modules/vendors/coffee-script.js +8 -0
  18. data/modules/xunit.js +123 -0
  19. data/package.json +35 -0
  20. data/rubybin/casperjs +57 -0
  21. data/samples/bbcshots.coffee +64 -0
  22. data/samples/bbcshots.js +80 -0
  23. data/samples/cliplay.coffee +19 -0
  24. data/samples/cliplay.js +21 -0
  25. data/samples/customevents.coffee +11 -0
  26. data/samples/customevents.js +13 -0
  27. data/samples/customlogging.coffee +33 -0
  28. data/samples/customlogging.js +42 -0
  29. data/samples/download.coffee +10 -0
  30. data/samples/download.js +11 -0
  31. data/samples/dynamic.coffee +60 -0
  32. data/samples/dynamic.js +65 -0
  33. data/samples/each.coffee +14 -0
  34. data/samples/each.js +17 -0
  35. data/samples/events.coffee +34 -0
  36. data/samples/events.js +41 -0
  37. data/samples/extends.coffee +29 -0
  38. data/samples/extends.js +37 -0
  39. data/samples/googlelinks.coffee +27 -0
  40. data/samples/googlelinks.js +33 -0
  41. data/samples/googlematch.coffee +47 -0
  42. data/samples/googlematch.js +65 -0
  43. data/samples/googlepagination.coffee +40 -0
  44. data/samples/googlepagination.js +51 -0
  45. data/samples/googletesting.coffee +17 -0
  46. data/samples/googletesting.js +23 -0
  47. data/samples/logcolor.coffee +10 -0
  48. data/samples/logcolor.js +11 -0
  49. data/samples/metaextract.coffee +23 -0
  50. data/samples/metaextract.js +29 -0
  51. data/samples/multirun.coffee +37 -0
  52. data/samples/multirun.js +56 -0
  53. data/samples/screenshot.coffee +28 -0
  54. data/samples/screenshot.js +33 -0
  55. data/samples/statushandlers.coffee +15 -0
  56. data/samples/statushandlers.js +19 -0
  57. data/samples/steptimeout.coffee +37 -0
  58. data/samples/steptimeout.js +45 -0
  59. data/samples/timeout.coffee +39 -0
  60. data/samples/timeout.js +47 -0
  61. data/tests/run.js +76 -0
  62. data/tests/site/alert.html +10 -0
  63. data/tests/site/click.html +40 -0
  64. data/tests/site/confirm.html +12 -0
  65. data/tests/site/elementattribute.html +6 -0
  66. data/tests/site/error.html +10 -0
  67. data/tests/site/form.html +26 -0
  68. data/tests/site/global.html +9 -0
  69. data/tests/site/images/phantom.png +0 -0
  70. data/tests/site/index.html +17 -0
  71. data/tests/site/mouse-events.html +47 -0
  72. data/tests/site/multiple-forms.html +16 -0
  73. data/tests/site/page1.html +8 -0
  74. data/tests/site/page2.html +8 -0
  75. data/tests/site/page3.html +8 -0
  76. data/tests/site/prompt.html +12 -0
  77. data/tests/site/resources.html +16 -0
  78. data/tests/site/result.html +11 -0
  79. data/tests/site/test.html +10 -0
  80. data/tests/site/visible.html +17 -0
  81. data/tests/site/waitFor.html +22 -0
  82. data/tests/suites/casper/agent.js +24 -0
  83. data/tests/suites/casper/capture.js +31 -0
  84. data/tests/suites/casper/click.js +61 -0
  85. data/tests/suites/casper/confirm.js +21 -0
  86. data/tests/suites/casper/elementattribute.js +8 -0
  87. data/tests/suites/casper/encode.js +20 -0
  88. data/tests/suites/casper/evaluate.js +27 -0
  89. data/tests/suites/casper/events.js +38 -0
  90. data/tests/suites/casper/exists.js +9 -0
  91. data/tests/suites/casper/fetchtext.js +9 -0
  92. data/tests/suites/casper/flow.coffee +38 -0
  93. data/tests/suites/casper/formfill.js +69 -0
  94. data/tests/suites/casper/global.js +9 -0
  95. data/tests/suites/casper/history.js +21 -0
  96. data/tests/suites/casper/hooks.js +41 -0
  97. data/tests/suites/casper/logging.js +38 -0
  98. data/tests/suites/casper/mouseevents.js +27 -0
  99. data/tests/suites/casper/onerror.js +19 -0
  100. data/tests/suites/casper/open.js +73 -0
  101. data/tests/suites/casper/prompt.js +17 -0
  102. data/tests/suites/casper/resources.coffee +24 -0
  103. data/tests/suites/casper/start.js +15 -0
  104. data/tests/suites/casper/steps.js +32 -0
  105. data/tests/suites/casper/viewport.js +11 -0
  106. data/tests/suites/casper/visible.js +17 -0
  107. data/tests/suites/casper/wait.js +27 -0
  108. data/tests/suites/casper/xpath.js +32 -0
  109. data/tests/suites/cli.js +125 -0
  110. data/tests/suites/clientutils.js +84 -0
  111. data/tests/suites/coffee.coffee +19 -0
  112. data/tests/suites/fs.js +36 -0
  113. data/tests/suites/http_status.js +28 -0
  114. data/tests/suites/injector.js +64 -0
  115. data/tests/suites/tester.js +121 -0
  116. data/tests/suites/utils.js +209 -0
  117. data/tests/suites/xunit.js +16 -0
  118. data/tests/testdir/01_a/abc.js +0 -0
  119. data/tests/testdir/01_a/def.js +0 -0
  120. data/tests/testdir/02_b/abc.js +0 -0
  121. data/tests/testdir/03_a.js +0 -0
  122. data/tests/testdir/03_b.js +0 -0
  123. data/tests/testdir/04/01_init.js +0 -0
  124. data/tests/testdir/04/02_do.js +0 -0
  125. metadata +192 -0
@@ -0,0 +1,10 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>CasperJS test target</title>
6
+ </head>
7
+ <body>
8
+ <a href="form.html">test form</a>
9
+ </body>
10
+ </html>
@@ -0,0 +1,17 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>CasperJS test index</title>
6
+ <script>
7
+ setTimeout(function() {
8
+ document.querySelector('#img1').style.display = 'none';
9
+ }, 1000);
10
+ </script>
11
+ </head>
12
+ <body>
13
+ <img src="images/phantom.png" id="img1">
14
+ <img src="images/phantom.png" id="img2" style="display:none">
15
+ <img src="images/phantom.png" id="img3" style="visibility:hidden">
16
+ </body>
17
+ </html>
@@ -0,0 +1,22 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5
+ <title>waitFor test</title>
6
+ </head>
7
+ <body>
8
+ <img src="images/phantom.png"/>
9
+ <ul>
10
+ <li>one</li>
11
+ <li>two</li>
12
+ <li>three</li>
13
+ </ul>
14
+ <script>
15
+ setTimeout(function() {
16
+ var li = document.createElement('li')
17
+ li.appendChild(document.createTextNode('four'));
18
+ document.querySelector('ul').appendChild(li);
19
+ }, 2000);
20
+ </script>
21
+ </body>
22
+ </html>
@@ -0,0 +1,24 @@
1
+ function testUA(ua, match) {
2
+ casper.test.assertMatch(
3
+ ua, match, 'Default user agent matches ' + match
4
+ );
5
+ }
6
+
7
+ function fetchUA(request) {
8
+ testUA(request.headers.filter(function(header) {
9
+ return header.name === "User-Agent";
10
+ }).pop().value, /plop/);
11
+ }
12
+
13
+ testUA(casper.options.pageSettings.userAgent, /CasperJS/);
14
+
15
+ casper.start();
16
+
17
+ casper.userAgent('plop').on('resource.requested', fetchUA);
18
+
19
+ casper.thenOpen('tests/site/index.html');
20
+
21
+ casper.run(function() {
22
+ this.removeListener('resource.requested', fetchUA);
23
+ this.test.done();
24
+ });
@@ -0,0 +1,31 @@
1
+ var fs = require('fs'), testFile = '/tmp/__casper_test_capture.png';
2
+
3
+ if (fs.exists(testFile) && fs.isFile(testFile)) {
4
+ fs.remove(testFile);
5
+ }
6
+
7
+ casper.start('tests/site/index.html', function() {
8
+ this.viewport(300, 200);
9
+ this.test.comment('Casper.capture()');
10
+ this.capture(testFile);
11
+ this.test.assert(fs.isFile(testFile), 'Casper.capture() captured a screenshot');
12
+ });
13
+
14
+ if (phantom.version.major === 1 && phantom.version.minor >= 6) {
15
+ casper.thenOpen('tests/site/index.html', function() {
16
+ this.test.comment('Casper.captureBase64()');
17
+ this.test.assert(this.captureBase64('png').length > 0,
18
+ 'Casper.captureBase64() rendered a page capture as base64');
19
+ this.test.assert(this.captureBase64('png', 'ul').length > 0,
20
+ 'Casper.captureBase64() rendered a capture from a selector as base64');
21
+ this.test.assert(this.captureBase64('png', {top: 0, left: 0, width: 30, height: 30}).length > 0,
22
+ 'Casper.captureBase64() rendered a capture from a clipRect as base64');
23
+ });
24
+ }
25
+
26
+ casper.run(function() {
27
+ try {
28
+ fs.remove(testFile);
29
+ } catch(e) {}
30
+ this.test.done();
31
+ });
@@ -0,0 +1,61 @@
1
+ casper.start('tests/site/index.html', function() {
2
+ this.click('a[href="test.html"]');
3
+ });
4
+
5
+ casper.then(function() {
6
+ this.test.comment('Casper.click()');
7
+ this.test.assertTitle('CasperJS test target', 'Casper.click() can click on a link');
8
+ }).thenClick('a', function() {
9
+ this.test.comment('Casper.thenClick()');
10
+ this.test.assertTitle('CasperJS test form', 'Casper.thenClick() can click on a link');
11
+ });
12
+
13
+ // onclick variants tests
14
+ casper.thenOpen('tests/site/click.html', function() {
15
+ this.test.comment('Casper.click()');
16
+ this.test.assert(this.click('#test1'), 'Casper.click() can click an `href="javascript:` link');
17
+ this.test.assert(this.click('#test2'), 'Casper.click() can click an `href="#"` link');
18
+ this.test.assert(this.click('#test3'), 'Casper.click() can click an `onclick=".*; return false"` link');
19
+ this.test.assert(this.click('#test4'), 'Casper.click() can click an unobstrusive js handled link');
20
+ var results = this.getGlobal('results');
21
+ this.test.assert(results.test1, 'Casper.click() has clicked an `href="javascript:` link');
22
+ this.test.assert(results.test2, 'Casper.click() has clicked an `href="#"` link');
23
+ this.test.assert(results.test3, 'Casper.click() has clicked an `onclick=".*; return false"` link');
24
+ this.test.assert(results.test4, 'Casper.click() has clicked an unobstrusive js handled link');
25
+ });
26
+
27
+ // clickLabel tests
28
+ casper.thenOpen('tests/site/click.html', function() {
29
+ this.test.comment('Casper.clickLabel()');
30
+ this.test.assert(this.clickLabel('test1'), 'Casper.clickLabel() can click an `href="javascript:` link');
31
+ this.test.assert(this.clickLabel('test2'), 'Casper.clickLabel() can click an `href="#"` link');
32
+ this.test.assert(this.clickLabel('test3'), 'Casper.clickLabel() can click an `onclick=".*; return false"` link');
33
+ this.test.assert(this.clickLabel('test4'), 'Casper.clickLabel() can click an unobstrusive js handled link');
34
+ var results = this.getGlobal('results');
35
+ this.test.assert(results.test1, 'Casper.clickLabel() has clicked an `href="javascript:` link');
36
+ this.test.assert(results.test2, 'Casper.clickLabel() has clicked an `href="#"` link');
37
+ this.test.assert(results.test3, 'Casper.clickLabel() has clicked an `onclick=".*; return false"` link');
38
+ this.test.assert(results.test4, 'Casper.clickLabel() has clicked an unobstrusive js handled link');
39
+ });
40
+
41
+ // casper.mouse
42
+ casper.then(function() {
43
+ this.test.comment('Mouse.down()');
44
+ this.mouse.down(200, 100);
45
+ var results = this.getGlobal('results');
46
+ this.test.assertEquals(results.testdown, [200, 100], 'Mouse.down() has pressed button to the specified position');
47
+
48
+ this.test.comment('Mouse.up()');
49
+ this.mouse.up(200, 100);
50
+ results = this.getGlobal('results');
51
+ this.test.assertEquals(results.testup, [200, 100], 'Mouse.up() has released button to the specified position');
52
+
53
+ this.test.comment('Mouse.move()');
54
+ this.mouse.move(200, 100);
55
+ results = this.getGlobal('results');
56
+ this.test.assertEquals(results.testmove, [200, 100], 'Mouse.move() has moved to the specified position');
57
+ });
58
+
59
+ casper.run(function() {
60
+ this.test.done();
61
+ });
@@ -0,0 +1,21 @@
1
+ // skip this test for phantom versions < 1.5
2
+ if (phantom.version.major === 1 && phantom.version.minor < 6) {
3
+ casper.test.comment('Skipped tests, PhantomJS 1.6 required');
4
+ casper.test.done();
5
+ } else {
6
+ var received;
7
+
8
+ casper.setFilter('page.confirm', function(message) {
9
+ received = message;
10
+ return true;
11
+ });
12
+
13
+ casper.start('tests/site/confirm.html', function() {
14
+ this.test.assert(this.getGlobal('confirmed'), 'confirmation received');
15
+ });
16
+
17
+ casper.run(function() {
18
+ this.test.assertEquals(received, 'are you sure?', 'confirmation message is ok');
19
+ this.test.done();
20
+ });
21
+ }
@@ -0,0 +1,8 @@
1
+ casper.start('tests/site/elementattribute.html', function() {
2
+ this.test.comment('Casper.getElementAttribute()');
3
+ this.test.assertEquals(this.getElementAttribute('.testo','data-stuff'), 'beautiful string', 'Casper.getElementAttribute() works as intended');
4
+ });
5
+
6
+ casper.run(function() {
7
+ this.test.done();
8
+ });
@@ -0,0 +1,20 @@
1
+ var fs = require('fs');
2
+
3
+ casper.start('tests/site/index.html', function() {
4
+ var imageUrl = 'file://' + phantom.casperPath + '/tests/site/images/phantom.png';
5
+ var image = this.base64encode(imageUrl);
6
+
7
+ this.test.comment('Casper.base64encode()');
8
+ this.test.assertEquals(image.length, 6160, 'Casper.base64encode() can retrieve base64 contents');
9
+
10
+ this.test.comment('Casper.download()');
11
+ this.download(imageUrl, '__test_logo.png');
12
+ this.test.assert(fs.exists('__test_logo.png'), 'Casper.download() downloads a file');
13
+ if (fs.exists('__test_logo.png')) {
14
+ fs.remove('__test_logo.png');
15
+ }
16
+ });
17
+
18
+ casper.run(function() {
19
+ this.test.done();
20
+ });
@@ -0,0 +1,27 @@
1
+ casper.test.comment('Casper.evaluate()');
2
+
3
+ casper.start();
4
+
5
+ var params = {
6
+ "boolean true": true,
7
+ "boolean false": false,
8
+ "int number": 42,
9
+ "float number": 1337.42,
10
+ "string": "plop! \"Ÿ£$\" 'no'",
11
+ "array": [1, 2, 3],
12
+ "object": {a: 1, b: 2}
13
+ };
14
+
15
+ var casperParams = casper.evaluate(function() {
16
+ return __casper_params__;
17
+ }, params);
18
+
19
+ casper.test.assertType(casperParams, "object", 'Casper.evaluate() exposes parameters in a dedicated object');
20
+ casper.test.assertEquals(Object.keys(casperParams).length, 7, 'Casper.evaluate() object containing parameters has the correct length');
21
+
22
+ for (var param in casperParams) {
23
+ casper.test.assertEquals(JSON.stringify(casperParams[param]), JSON.stringify(params[param]), 'Casper.evaluate() can pass a ' + param);
24
+ casper.test.assertEquals(typeof casperParams[param], typeof params[param], 'Casper.evaluate() preserves the ' + param + ' type');
25
+ }
26
+
27
+ casper.test.done();
@@ -0,0 +1,38 @@
1
+ // events
2
+
3
+ casper.test.comment("events");
4
+
5
+ casper.plopped = false;
6
+
7
+ casper.on("plop", function() {
8
+ this.plopped = true;
9
+ });
10
+
11
+ casper.test.assert(Object.keys(casper._events).some(function(i) {
12
+ return i === "plop";
13
+ }), "on() has set an event handler");
14
+
15
+ casper.emit("plop");
16
+
17
+ casper.test.assert(casper.plopped, "emit() emits an event");
18
+
19
+ // filters
20
+
21
+ casper.test.comment("filters");
22
+
23
+ casper.foo = 0;
24
+ casper.setFilter("test", function(a) {
25
+ this.foo = 42;
26
+ return a + 1;
27
+ });
28
+
29
+ casper.test.assert(Object.keys(casper._filters).some(function(i) {
30
+ return i === "test";
31
+ }), "setFilter() has set a filter");
32
+
33
+ casper.test.assertEquals(casper.filter("test", 1), 2, "filter() filters a value");
34
+ casper.test.assertEquals(casper.foo, 42, "filter() applies the correct context");
35
+
36
+ delete casper.foo;
37
+
38
+ casper.test.done();
@@ -0,0 +1,9 @@
1
+ casper.test.comment('Casper.exists()');
2
+
3
+ casper.start('tests/site/index.html', function() {
4
+ this.test.assert(this.exists('a') && !this.exists('chucknorriz'), 'Casper.exists() can check if an element exists');
5
+ });
6
+
7
+ casper.run(function() {
8
+ this.test.done();
9
+ });
@@ -0,0 +1,9 @@
1
+ casper.test.comment('Casper.fetchText()');
2
+
3
+ casper.start('tests/site/index.html', function() {
4
+ this.test.assertEquals(this.fetchText('ul li'), 'onetwothree', 'Casper.fetchText() can retrieve text contents');
5
+ });
6
+
7
+ casper.run(function() {
8
+ this.test.done();
9
+ });
@@ -0,0 +1,38 @@
1
+ step = 0
2
+
3
+ # testing resources
4
+ casper.start "tests/site/resources.html", ->
5
+ @test.assertEquals ++step, 1, "step 1"
6
+ @wait 400, ->
7
+ @test.assertEquals ++step, 2, "step 1.1"
8
+ @wait 200, ->
9
+ @test.assertEquals ++step, 3, "step 1.1.1"
10
+ @wait 200, ->
11
+ @test.assertEquals ++step, 4, "step 1.1.1.1"
12
+ @then ->
13
+ @test.assertEquals ++step, 5, "step 1.1.2.1"
14
+ @wait 400, ->
15
+ @test.assertEquals ++step, 6, "step 1.2"
16
+
17
+ casper.wait 200, ->
18
+ @test.assertEquals ++step, 7, "step 2"
19
+
20
+ casper.waitForSelector(
21
+ '#noneExistingSelector'
22
+ -> @test.fail "should run into timeout"
23
+ -> @test.assertEquals ++step, 8, "step 3 sucessfully timed out"
24
+ 1000
25
+ )
26
+ casper.then ->
27
+ @test.assertEquals ++step, 9, "step 4"
28
+ @wait 300, ->
29
+ @test.assertEquals ++step, 10, "step 4.1"
30
+ @wait 300, ->
31
+ @test.assertEquals ++step, 11, "step 4.1.1"
32
+ @wait 100, ->
33
+ @test.assertEquals ++step, 12, "step 5.2"
34
+
35
+ casper.then ->
36
+ @test.assertEquals ++step, 13, "last step"
37
+
38
+ casper.run(-> @test.done())
@@ -0,0 +1,69 @@
1
+ casper.start('tests/site/form.html', function() {
2
+ this.test.comment('Casper.fill()');
3
+ this.fill('form[action="result.html"]', {
4
+ email: 'chuck@norris.com',
5
+ password: 'chuck',
6
+ content: 'Am watching thou',
7
+ check: true,
8
+ choice: 'no',
9
+ topic: 'bar',
10
+ file: phantom.libraryPath + '/README.md',
11
+ 'checklist[]': ['1', '3']
12
+ });
13
+ this.test.assertEvalEquals(function() {
14
+ return document.querySelector('input[name="email"]').value;
15
+ }, 'chuck@norris.com', 'Casper.fill() can fill an input[type=text] form field');
16
+ this.test.assertEvalEquals(function() {
17
+ return document.querySelector('input[name="password"]').value;
18
+ }, 'chuck', 'Casper.fill() can fill an input[type=password] form field');
19
+ this.test.assertEvalEquals(function() {
20
+ return document.querySelector('textarea[name="content"]').value;
21
+ }, 'Am watching thou', 'Casper.fill() can fill a textarea form field');
22
+ this.test.assertEvalEquals(function() {
23
+ return document.querySelector('select[name="topic"]').value;
24
+ }, 'bar', 'Casper.fill() can pick a value from a select form field');
25
+ this.test.assertEvalEquals(function() {
26
+ return document.querySelector('input[name="check"]').checked;
27
+ }, true, 'Casper.fill() can check a form checkbox');
28
+ this.test.assertEvalEquals(function() {
29
+ return document.querySelector('input[name="choice"][value="no"]').checked;
30
+ }, true, 'Casper.fill() can check a form radio button 1/2');
31
+ this.test.assertEvalEquals(function() {
32
+ return document.querySelector('input[name="choice"][value="yes"]').checked;
33
+ }, false, 'Casper.fill() can check a form radio button 2/2');
34
+ this.test.assertEvalEquals(function() {
35
+ return document.querySelector('input[name="file"]').files.length === 1;
36
+ }, true, 'Casper.fill() can select a file to upload');
37
+ this.test.assertEvalEquals(function() {
38
+ return (document.querySelector('input[name="checklist[]"][value="1"]').checked &&
39
+ !document.querySelector('input[name="checklist[]"][value="2"]').checked &&
40
+ document.querySelector('input[name="checklist[]"][value="3"]').checked);
41
+ }, true, 'Casper.fill() can fill a list of checkboxes');
42
+ this.click('input[type="submit"]');
43
+ });
44
+
45
+ casper.then(function() {
46
+ this.test.comment('Form submitted');
47
+ this.test.assertUrlMatch(/email=chuck@norris.com/, 'Casper.fill() input[type=email] field was submitted');
48
+ this.test.assertUrlMatch(/password=chuck/, 'Casper.fill() input[type=password] field was submitted');
49
+ this.test.assertUrlMatch(/content=Am\+watching\+thou/, 'Casper.fill() textarea field was submitted');
50
+ this.test.assertUrlMatch(/check=on/, 'Casper.fill() input[type=checkbox] field was submitted');
51
+ this.test.assertUrlMatch(/choice=no/, 'Casper.fill() input[type=radio] field was submitted');
52
+ this.test.assertUrlMatch(/topic=bar/, 'Casper.fill() select field was submitted');
53
+ });
54
+
55
+ // multiple forms
56
+ casper.thenOpen('tests/site/multiple-forms.html', function() {
57
+ this.test.comment('Multiple forms');
58
+ this.fill('form[name="f2"]', {
59
+ yo: "ok"
60
+ }, true);
61
+ });
62
+
63
+ casper.then(function() {
64
+ this.test.assertUrlMatch(/\?f=f2&yo=ok$/, 'Casper.fill() handles multiple forms');
65
+ }),
66
+
67
+ casper.run(function() {
68
+ this.test.done();
69
+ });
@@ -0,0 +1,9 @@
1
+ casper.start('tests/site/global.html', function() {
2
+ this.test.comment('Casper.getGlobal()');
3
+ this.test.assertEquals(this.getGlobal('myGlobal'), 'awesome string', 'Casper.getGlobal() can retrieve a remote global variable');
4
+ this.test.assertRaises(this.getGlobal, ['myUnencodableGlobal'], 'Casper.getGlobal() does not fail trying to encode an unencodable global');
5
+ });
6
+
7
+ casper.run(function() {
8
+ this.test.done();
9
+ });
@@ -0,0 +1,21 @@
1
+ casper.start('tests/site/page1.html');
2
+ casper.thenOpen('tests/site/page2.html');
3
+ casper.thenOpen('tests/site/page3.html');
4
+
5
+ casper.back();
6
+ casper.then(function() {
7
+ this.test.comment('navigating history backward');
8
+ this.test.assertMatch(this.getCurrentUrl(), /tests\/site\/page2\.html$/, 'Casper.back() can go back an history step');
9
+ });
10
+
11
+ casper.forward();
12
+ casper.then(function() {
13
+ this.test.comment('navigating history forward');
14
+ this.test.assertMatch(this.getCurrentUrl(), /tests\/site\/page3\.html$/, 'Casper.forward() can go forward an history step');
15
+ });
16
+
17
+ casper.run(function() {
18
+ this.test.assert(this.history.length > 0, 'Casper.history contains urls');
19
+ this.test.assertMatch(this.history[0], /tests\/site\/page1\.html$/, 'Casper.history has the correct first url');
20
+ this.test.done();
21
+ });