akephalos2 2.0.7-java
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/MIT_LICENSE +20 -0
- data/README.md +330 -0
- data/bin/akephalos +102 -0
- data/lib/akephalos/capybara.rb +347 -0
- data/lib/akephalos/client/cookies.rb +73 -0
- data/lib/akephalos/client/filter.rb +120 -0
- data/lib/akephalos/client.rb +192 -0
- data/lib/akephalos/configuration.rb +49 -0
- data/lib/akephalos/console.rb +32 -0
- data/lib/akephalos/cucumber.rb +6 -0
- data/lib/akephalos/htmlunit/ext/confirm_handler.rb +18 -0
- data/lib/akephalos/htmlunit/ext/http_method.rb +30 -0
- data/lib/akephalos/htmlunit.rb +31 -0
- data/lib/akephalos/node.rb +192 -0
- data/lib/akephalos/page.rb +118 -0
- data/lib/akephalos/remote_client.rb +93 -0
- data/lib/akephalos/server.rb +79 -0
- data/lib/akephalos/version.rb +3 -0
- data/lib/akephalos.rb +19 -0
- data/vendor/html-unit/apache-mime4j-0.6.jar +0 -0
- data/vendor/html-unit/commons-codec-1.4.jar +0 -0
- data/vendor/html-unit/commons-collections-3.2.1.jar +0 -0
- data/vendor/html-unit/commons-io-2.0.1.jar +0 -0
- data/vendor/html-unit/commons-lang3-3.0.1.jar +0 -0
- data/vendor/html-unit/commons-logging-1.1.1.jar +0 -0
- data/vendor/html-unit/cssparser-0.9.6-20110829.205617-3.jar +0 -0
- data/vendor/html-unit/htmlunit-2.10-SNAPSHOT.jar +0 -0
- data/vendor/html-unit/htmlunit-core-js-2.9.jar +0 -0
- data/vendor/html-unit/httpclient-4.1.2.jar +0 -0
- data/vendor/html-unit/httpcore-4.1.2.jar +0 -0
- data/vendor/html-unit/httpmime-4.1.2.jar +0 -0
- data/vendor/html-unit/nekohtml-1.9.15.jar +0 -0
- data/vendor/html-unit/sac-1.3.jar +0 -0
- data/vendor/html-unit/serializer-2.7.1.jar +0 -0
- data/vendor/html-unit/xalan-2.7.1.jar +0 -0
- data/vendor/html-unit/xercesImpl-2.9.1.jar +0 -0
- data/vendor/html-unit/xml-apis-1.3.04.jar +0 -0
- metadata +127 -0
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'drb/drb'
|
3
|
+
|
4
|
+
# We need to define our own NativeException class for the cases when a native
|
5
|
+
# exception is raised by the JRuby DRb server.
|
6
|
+
class NativeException < StandardError; end
|
7
|
+
|
8
|
+
module Akephalos
|
9
|
+
|
10
|
+
# The +RemoteClient+ class provides an interface to an +Akephalos::Client+
|
11
|
+
# isntance on a remote DRb server.
|
12
|
+
#
|
13
|
+
# == Usage
|
14
|
+
# client = Akephalos::RemoteClient.new
|
15
|
+
# client.visit "http://www.oinopa.com"
|
16
|
+
# client.page.source # => "<!DOCTYPE html PUBLIC..."
|
17
|
+
class RemoteClient
|
18
|
+
|
19
|
+
# @return [DRbObject] a new instance of Akephalos::Client from the DRb
|
20
|
+
# server
|
21
|
+
def self.new(options = {})
|
22
|
+
manager.new_client(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Starts a remove JRuby DRb server unless already running and returns an
|
26
|
+
# instance of Akephalos::ClientManager.
|
27
|
+
#
|
28
|
+
# @return [DRbObject] an instance of Akephalos::ClientManager
|
29
|
+
def self.manager
|
30
|
+
return @manager if defined?(@manager)
|
31
|
+
|
32
|
+
server_port = start!
|
33
|
+
|
34
|
+
DRb.start_service("druby://127.0.0.1:#{find_available_port}")
|
35
|
+
manager = DRbObject.new_with_uri("druby://127.0.0.1:#{server_port}")
|
36
|
+
|
37
|
+
# We want to share our local configuration with the remote server
|
38
|
+
# process, so we share an undumped version of our configuration. This
|
39
|
+
# lets us continue to make changes locally and have them reflected in the
|
40
|
+
# remote process.
|
41
|
+
manager.configuration = Akephalos.configuration.extend(DRbUndumped)
|
42
|
+
|
43
|
+
@manager = manager
|
44
|
+
end
|
45
|
+
|
46
|
+
# Start a remote server process and return when it is available for use.
|
47
|
+
def self.start!
|
48
|
+
port = find_available_port
|
49
|
+
|
50
|
+
remote_client = IO.popen("ruby #{Akephalos::BIN_DIR + 'akephalos'} #{port}")
|
51
|
+
|
52
|
+
# Set up a monitor thread to detect if the forked server exits
|
53
|
+
# prematurely.
|
54
|
+
server_monitor = Thread.new { Thread.current[:exited] = Process.wait(remote_client.pid) }
|
55
|
+
|
56
|
+
# Wait for the server to be accessible on the socket we specified.
|
57
|
+
until responsive?(port)
|
58
|
+
exit!(1) if server_monitor[:exited]
|
59
|
+
sleep 0.5
|
60
|
+
end
|
61
|
+
server_monitor.kill
|
62
|
+
|
63
|
+
# Ensure that the remote server shuts down gracefully when we are
|
64
|
+
# finished.
|
65
|
+
at_exit { Process.kill(:INT, remote_client.pid) }
|
66
|
+
|
67
|
+
port
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# @api private
|
73
|
+
# @param [Integer] port the port to check for responsiveness
|
74
|
+
# @return [true, false] whether the port is responsive
|
75
|
+
def self.responsive?(port)
|
76
|
+
socket = TCPSocket.open('127.0.0.1', port)
|
77
|
+
true
|
78
|
+
rescue Errno::ECONNREFUSED
|
79
|
+
false
|
80
|
+
ensure
|
81
|
+
socket.close if socket
|
82
|
+
end
|
83
|
+
|
84
|
+
# @api private
|
85
|
+
# @return [Integer] the next available port
|
86
|
+
def self.find_available_port
|
87
|
+
server = TCPServer.new('127.0.0.1', 0)
|
88
|
+
server.addr[1]
|
89
|
+
ensure
|
90
|
+
server.close if server
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require "pathname"
|
2
|
+
require "drb/drb"
|
3
|
+
require "akephalos/client"
|
4
|
+
|
5
|
+
# In ruby-1.8.7 and later, the message for a NameError exception is lazily
|
6
|
+
# evaluated. There are, however, different implementations of this between ruby
|
7
|
+
# and jruby, so we realize these messages when sending over DRb.
|
8
|
+
class NameError::Message
|
9
|
+
# @note This method is called by DRb before sending the error to the remote
|
10
|
+
# connection.
|
11
|
+
# @return [String] the inner message.
|
12
|
+
def _dump
|
13
|
+
to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
[
|
18
|
+
Akephalos::Page,
|
19
|
+
Akephalos::Node,
|
20
|
+
Akephalos::Client::Cookies,
|
21
|
+
Akephalos::Client::Cookies::Cookie
|
22
|
+
].each { |klass| klass.send(:include, DRbUndumped) }
|
23
|
+
|
24
|
+
module Akephalos
|
25
|
+
|
26
|
+
# The ClientManager is shared over DRb with the remote process, and
|
27
|
+
# facilitates communication between the processes.
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
class ClientManager
|
31
|
+
include DRbUndumped
|
32
|
+
|
33
|
+
# @return [Akephalos::Client] a new client instance
|
34
|
+
def self.new_client(options = {})
|
35
|
+
# Store the client to ensure it isn't prematurely garbage collected.
|
36
|
+
@client = Client.new(options)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Set the global configuration settings for Akephalos.
|
40
|
+
#
|
41
|
+
# @param [Hash] config the configuration settings
|
42
|
+
# @return [Hash] the configuration
|
43
|
+
def self.configuration=(config)
|
44
|
+
Akephalos.configuration = config
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
# Akephalos::Server is used by `akephalos --server` to start a DRb server
|
50
|
+
# serving Akephalos::ClientManager.
|
51
|
+
class Server
|
52
|
+
|
53
|
+
# Start DRb service for Akephalos::ClientManager.
|
54
|
+
#
|
55
|
+
# @param [String] port attach server to
|
56
|
+
def self.start!(port)
|
57
|
+
abort_on_parent_exit!
|
58
|
+
DRb.start_service("druby://127.0.0.1:#{port}", ClientManager)
|
59
|
+
DRb.thread.join
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
# Exit if STDIN is no longer readable, which corresponds to the process
|
65
|
+
# which started the server exiting prematurely.
|
66
|
+
#
|
67
|
+
# @api private
|
68
|
+
def self.abort_on_parent_exit!
|
69
|
+
Thread.new do
|
70
|
+
begin
|
71
|
+
STDIN.read
|
72
|
+
rescue IOError
|
73
|
+
exit
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/lib/akephalos.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# **Akephalos** is a cross-platform Ruby interface for *HtmlUnit*, a headless
|
2
|
+
# browser for the Java platform.
|
3
|
+
#
|
4
|
+
# The only requirement is that a Java runtime is available.
|
5
|
+
#
|
6
|
+
require 'java' if RUBY_PLATFORM == 'java'
|
7
|
+
require 'pathname'
|
8
|
+
|
9
|
+
module Akephalos
|
10
|
+
BIN_DIR = Pathname(__FILE__).expand_path.dirname.parent + 'bin'
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'akephalos/client'
|
14
|
+
require 'capybara'
|
15
|
+
require 'akephalos/capybara'
|
16
|
+
|
17
|
+
Capybara.register_driver :akephalos do |app|
|
18
|
+
Capybara::Driver::Akephalos.new(app)
|
19
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: akephalos2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.7
|
5
|
+
prerelease:
|
6
|
+
platform: java
|
7
|
+
authors:
|
8
|
+
- Bernerd Schaefer
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-10-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capybara
|
16
|
+
requirement: &70230659428980 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70230659428980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70230659426900 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70230659426900
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: sinatra
|
38
|
+
requirement: &70230659440860 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70230659440860
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: &70230659437760 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70230659437760
|
58
|
+
description: Headless Browser for Integration Testing with Capybara
|
59
|
+
email: bj.schaefer@gmail.com
|
60
|
+
executables:
|
61
|
+
- akephalos
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- lib/akephalos/capybara.rb
|
66
|
+
- lib/akephalos/client/cookies.rb
|
67
|
+
- lib/akephalos/client/filter.rb
|
68
|
+
- lib/akephalos/client.rb
|
69
|
+
- lib/akephalos/configuration.rb
|
70
|
+
- lib/akephalos/console.rb
|
71
|
+
- lib/akephalos/cucumber.rb
|
72
|
+
- lib/akephalos/htmlunit/ext/confirm_handler.rb
|
73
|
+
- lib/akephalos/htmlunit/ext/http_method.rb
|
74
|
+
- lib/akephalos/htmlunit.rb
|
75
|
+
- lib/akephalos/node.rb
|
76
|
+
- lib/akephalos/page.rb
|
77
|
+
- lib/akephalos/remote_client.rb
|
78
|
+
- lib/akephalos/server.rb
|
79
|
+
- lib/akephalos/version.rb
|
80
|
+
- lib/akephalos.rb
|
81
|
+
- vendor/html-unit/apache-mime4j-0.6.jar
|
82
|
+
- vendor/html-unit/commons-codec-1.4.jar
|
83
|
+
- vendor/html-unit/commons-collections-3.2.1.jar
|
84
|
+
- vendor/html-unit/commons-io-2.0.1.jar
|
85
|
+
- vendor/html-unit/commons-lang3-3.0.1.jar
|
86
|
+
- vendor/html-unit/commons-logging-1.1.1.jar
|
87
|
+
- vendor/html-unit/cssparser-0.9.6-20110829.205617-3.jar
|
88
|
+
- vendor/html-unit/htmlunit-2.10-SNAPSHOT.jar
|
89
|
+
- vendor/html-unit/htmlunit-core-js-2.9.jar
|
90
|
+
- vendor/html-unit/httpclient-4.1.2.jar
|
91
|
+
- vendor/html-unit/httpcore-4.1.2.jar
|
92
|
+
- vendor/html-unit/httpmime-4.1.2.jar
|
93
|
+
- vendor/html-unit/nekohtml-1.9.15.jar
|
94
|
+
- vendor/html-unit/sac-1.3.jar
|
95
|
+
- vendor/html-unit/serializer-2.7.1.jar
|
96
|
+
- vendor/html-unit/xalan-2.7.1.jar
|
97
|
+
- vendor/html-unit/xercesImpl-2.9.1.jar
|
98
|
+
- vendor/html-unit/xml-apis-1.3.04.jar
|
99
|
+
- README.md
|
100
|
+
- MIT_LICENSE
|
101
|
+
- bin/akephalos
|
102
|
+
homepage: https://github.com/Nerian/akephalos
|
103
|
+
licenses: []
|
104
|
+
post_install_message:
|
105
|
+
rdoc_options: []
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
- vendor
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
110
|
+
none: false
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project: akephalos
|
123
|
+
rubygems_version: 1.8.10
|
124
|
+
signing_key:
|
125
|
+
specification_version: 3
|
126
|
+
summary: Headless Browser for Integration Testing with Capybara
|
127
|
+
test_files: []
|