capybara-webkit 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore CHANGED
@@ -11,3 +11,4 @@ qrc_*
11
11
  moc_*.cpp
12
12
  .bundle
13
13
  pkg
14
+ src/webkit_server
@@ -1,8 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "capybara-webkit"
3
- s.version = "0.3.0"
3
+ s.version = "0.4.0"
4
4
  s.authors = ["thoughtbot", "Joe Ferris", "Jason Morrison", "Tristan Dunn",
5
- "Joshua Clayton", "Yuichi Tateno", "Aaron Gibralter"]
5
+ "Joshua Clayton", "Yuichi Tateno", "Aaron Gibralter",
6
+ "Vasily Reys", "petrushka", "John Bintz",
7
+ "Christopher Meiklejohn", "John Barker", "Jeremy Wells"]
6
8
  s.email = "support@thoughtbot.com"
7
9
  s.files = `git ls-files`.split("\n")
8
10
  s.test_files = `git ls-files -- {spec,features}/*`.split("\n")
@@ -6,7 +6,7 @@ class Capybara::Driver::Webkit
6
6
 
7
7
  def [](name)
8
8
  value = invoke("attribute", name)
9
- if name == 'checked'
9
+ if name == 'checked' || name == 'disabled'
10
10
  value == 'true'
11
11
  else
12
12
  value
@@ -53,6 +53,10 @@ class Capybara::Driver::Webkit
53
53
  invoke("visible") == "true"
54
54
  end
55
55
 
56
+ def disabled?
57
+ self['disabled']
58
+ end
59
+
56
60
  def path
57
61
  raise Capybara::NotSupportedByDriverError
58
62
  end
@@ -4,7 +4,14 @@ module CapybaraWebkitBuilder
4
4
  extend self
5
5
 
6
6
  def makefile
7
- system("qmake -spec macx-g++")
7
+ qmake_binaries = ['qmake', 'qmake-qt4']
8
+ qmake = qmake_binaries.detect { |qmake| system("which #{qmake}") }
9
+ case RUBY_PLATFORM
10
+ when /linux/
11
+ system("#{qmake} -spec linux-g++")
12
+ else
13
+ system("#{qmake} -spec macx-g++")
14
+ end
8
15
  end
9
16
 
10
17
  def qmake
@@ -15,12 +22,7 @@ module CapybaraWebkitBuilder
15
22
  system("make") or return false
16
23
 
17
24
  FileUtils.mkdir("bin") unless File.directory?("bin")
18
-
19
- if File.exist?("src/webkit_server.app")
20
- FileUtils.cp("src/webkit_server.app/Contents/MacOS/webkit_server", "bin", :preserve => true)
21
- else
22
- FileUtils.cp("src/webkit_server", "bin", :preserve => true)
23
- end
25
+ FileUtils.cp("src/webkit_server", "bin", :preserve => true)
24
26
  end
25
27
 
26
28
  def build_all
@@ -118,6 +118,7 @@ describe Capybara::Driver::Webkit do
118
118
  <div id="display_none">
119
119
  <div id="invisible">Can't see me</div>
120
120
  </div>
121
+ <input type="text" disabled="disabled"/>
121
122
  <script type="text/javascript">
122
123
  document.write("<p id='greeting'>he" + "llo</p>");
123
124
  </script>
@@ -243,6 +244,10 @@ describe Capybara::Driver::Webkit do
243
244
  subject.find("//p").first.tag_name.should == "p"
244
245
  end
245
246
 
247
+ it "reads disabled property" do
248
+ subject.find("//input").first.should be_disabled
249
+ end
250
+
246
251
  it "finds visible elements" do
247
252
  subject.find("//p").first.should be_visible
248
253
  subject.find("//*[@id='invisible']").first.should_not be_visible
@@ -256,6 +261,7 @@ describe Capybara::Driver::Webkit do
256
261
  <html><body>
257
262
  <form action="/" method="GET">
258
263
  <input type="text" name="foo" value="bar"/>
264
+ <input type="text" id="disabled_input" disabled="disabled"/>
259
265
  <input type="checkbox" name="checkedbox" value="1" checked="checked"/>
260
266
  <input type="checkbox" name="uncheckedbox" value="2"/>
261
267
  <select name="animal">
@@ -377,6 +383,17 @@ describe Capybara::Driver::Webkit do
377
383
  unchecked_box.set(false)
378
384
  unchecked_box['checked'].should_not be_true
379
385
  end
386
+
387
+ let(:enabled_input) { subject.find("//input[@name='foo']").first }
388
+ let(:disabled_input) { subject.find("//input[@id='disabled_input']").first }
389
+
390
+ it "knows a disabled input is disabled" do
391
+ disabled_input['disabled'].should be_true
392
+ end
393
+
394
+ it "knows a not disabled input is not disabled" do
395
+ enabled_input['disabled'].should_not be_true
396
+ end
380
397
  end
381
398
 
382
399
  context "form events app" do
@@ -405,6 +422,7 @@ describe Capybara::Driver::Webkit do
405
422
  var element = elements[i];
406
423
  element.addEventListener("focus", recordEvent);
407
424
  element.addEventListener("keydown", recordEvent);
425
+ element.addEventListener("keypress", recordEvent);
408
426
  element.addEventListener("keyup", recordEvent);
409
427
  element.addEventListener("change", recordEvent);
410
428
  element.addEventListener("blur", recordEvent);
@@ -419,19 +437,27 @@ describe Capybara::Driver::Webkit do
419
437
  end
420
438
  end
421
439
 
440
+ let(:newtext) { 'newvalue' }
441
+
442
+ let(:keyevents) do
443
+ (%w{focus} +
444
+ newtext.length.times.collect { %w{keydown keypress keyup} } +
445
+ %w{change blur}).flatten
446
+ end
447
+
422
448
  it "triggers text input events" do
423
- subject.find("//input[@type='text']").first.set("newvalue")
424
- subject.find("//li").map(&:text).should == %w(focus keydown keyup change blur)
449
+ subject.find("//input[@type='text']").first.set(newtext)
450
+ subject.find("//li").map(&:text).should == keyevents
425
451
  end
426
452
 
427
453
  it "triggers textarea input events" do
428
- subject.find("//textarea").first.set("newvalue")
429
- subject.find("//li").map(&:text).should == %w(focus keydown keyup change blur)
454
+ subject.find("//textarea").first.set(newtext)
455
+ subject.find("//li").map(&:text).should == keyevents
430
456
  end
431
457
 
432
458
  it "triggers password input events" do
433
- subject.find("//input[@type='password']").first.set("newvalue")
434
- subject.find("//li").map(&:text).should == %w(focus keydown keyup change blur)
459
+ subject.find("//input[@type='password']").first.set(newtext)
460
+ subject.find("//li").map(&:text).should == keyevents
435
461
  end
436
462
 
437
463
  it "triggers radio input events" do
@@ -453,7 +479,17 @@ describe Capybara::Driver::Webkit do
453
479
  <div id="change">Change me</div>
454
480
  <div id="mouseup">Push me</div>
455
481
  <div id="mousedown">Release me</div>
482
+ <form action="/" method="GET">
483
+ <select id="change_select" name="change_select">
484
+ <option value="1" id="option-1" selected="selected">one</option>
485
+ <option value="2" id="option-2">two</option>
486
+ </select>
487
+ </form>
456
488
  <script type="text/javascript">
489
+ document.getElementById("change_select").
490
+ addEventListener("change", function () {
491
+ this.className = "triggered";
492
+ });
457
493
  document.getElementById("change").
458
494
  addEventListener("change", function () {
459
495
  this.className = "triggered";
@@ -491,6 +527,15 @@ describe Capybara::Driver::Webkit do
491
527
  subject.find("//*[@class='triggered']").should_not be_empty
492
528
  end
493
529
 
530
+ it "fires a change on select" do
531
+ select = subject.find("//select").first
532
+ select.value.should == "1"
533
+ option = subject.find("//option[@id='option-2']").first
534
+ option.select_option
535
+ select.value.should == "2"
536
+ subject.find("//select[@class='triggered']").should_not be_empty
537
+ end
538
+
494
539
  it "fires drag events" do
495
540
  draggable = subject.find("//*[@id='mousedown']").first
496
541
  container = subject.find("//*[@id='mouseup']").first
@@ -31,9 +31,16 @@ Capybara = {
31
31
  },
32
32
 
33
33
  attribute: function (index, name) {
34
- if (name == "checked") {
34
+ switch(name) {
35
+ case 'checked':
35
36
  return this.nodes[index].checked;
36
- } else {
37
+ break;
38
+
39
+ case 'disabled':
40
+ return this.nodes[index].disabled;
41
+ break;
42
+
43
+ default:
37
44
  return this.nodes[index].getAttribute(name);
38
45
  }
39
46
  },
@@ -54,6 +61,19 @@ Capybara = {
54
61
  this.nodes[index].dispatchEvent(eventObject);
55
62
  },
56
63
 
64
+ keypress: function(index, altKey, ctrlKey, shiftKey, metaKey, keyCode, charCode) {
65
+ var eventObject = document.createEvent("Events");
66
+ eventObject.initEvent('keypress', true, true);
67
+ eventObject.window = window;
68
+ eventObject.altKey = altKey;
69
+ eventObject.ctrlKey = ctrlKey;
70
+ eventObject.shiftKey = shiftKey;
71
+ eventObject.metaKey = metaKey;
72
+ eventObject.keyCode = keyCode;
73
+ eventObject.charCode = charCode;
74
+ this.nodes[index].dispatchEvent(eventObject);
75
+ },
76
+
57
77
  visible: function (index) {
58
78
  var element = this.nodes[index];
59
79
  while (element) {
@@ -73,9 +93,13 @@ Capybara = {
73
93
  var type = (node.type || node.tagName).toLowerCase();
74
94
  if (type == "text" || type == "textarea" || type == "password") {
75
95
  this.trigger(index, "focus");
76
- node.value = value;
77
- this.trigger(index, "keydown");
78
- this.trigger(index, "keyup");
96
+ node.value = "";
97
+ for(var strindex = 0; strindex < value.length; strindex++) {
98
+ node.value += value[strindex];
99
+ this.trigger(index, "keydown");
100
+ this.keypress(index, false, false, false, false, 0, value[strindex]);
101
+ this.trigger(index, "keyup");
102
+ }
79
103
  this.trigger(index, "change");
80
104
  this.trigger(index, "blur");
81
105
  } else if(type == "checkbox" || type == "radio") {
@@ -87,11 +111,15 @@ Capybara = {
87
111
  },
88
112
 
89
113
  selectOption: function(index) {
114
+ this.nodes[index].selected = true;
90
115
  this.nodes[index].setAttribute("selected", "selected");
116
+ this.trigger(index, "change");
91
117
  },
92
118
 
93
119
  unselectOption: function(index) {
120
+ this.nodes[index].selected = false;
94
121
  this.nodes[index].removeAttribute("selected");
122
+ this.trigger(index, "change");
95
123
  },
96
124
 
97
125
  centerPostion: function(element) {
@@ -6,4 +6,5 @@ SOURCES = main.cpp WebPage.cpp Server.cpp Connection.cpp Command.cpp Visit.cpp F
6
6
  RESOURCES = webkit_server.qrc
7
7
  QT += network webkit
8
8
  CONFIG += console
9
+ CONFIG -= app_bundle
9
10
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capybara-webkit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - thoughtbot
@@ -17,11 +17,17 @@ authors:
17
17
  - Joshua Clayton
18
18
  - Yuichi Tateno
19
19
  - Aaron Gibralter
20
+ - Vasily Reys
21
+ - petrushka
22
+ - John Bintz
23
+ - Christopher Meiklejohn
24
+ - John Barker
25
+ - Jeremy Wells
20
26
  autorequire:
21
27
  bindir: bin
22
28
  cert_chain: []
23
29
 
24
- date: 2011-05-05 00:00:00 -04:00
30
+ date: 2011-05-24 00:00:00 -04:00
25
31
  default_executable:
26
32
  dependencies:
27
33
  - !ruby/object:Gem::Dependency