steam 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/lib/core_ext/ruby/string/camelize.rb +1 -1
- data/lib/core_ext/ruby/string/underscore.rb +8 -1
- data/lib/steam/browser/html_unit.rb +9 -5
- data/lib/steam/browser/html_unit/client.rb +14 -2
- data/lib/steam/browser/html_unit/connection.rb +10 -10
- data/lib/steam/browser/html_unit/web_response.rb +0 -1
- data/lib/steam/connection/net_http.rb +4 -4
- data/lib/steam/java.rb +7 -6
- data/lib/steam/request.rb +88 -35
- data/lib/steam/session/rails.rb +1 -1
- data/lib/steam/version.rb +1 -1
- metadata +23 -50
- data/Rakefile +0 -23
- data/test/all.rb +0 -3
- data/test/browser/html_unit/actions_test.rb +0 -183
- data/test/browser/html_unit/javascript_test.rb +0 -60
- data/test/browser/html_unit/rails_actions_test.rb +0 -150
- data/test/browser/html_unit_test.rb +0 -98
- data/test/connection/cascade_test.rb +0 -42
- data/test/connection/mock_test.rb +0 -58
- data/test/connection/rails_test.rb +0 -16
- data/test/connection/static_test.rb +0 -14
- data/test/example/webrat_compat_steps_test.rb +0 -307
- data/test/fixtures/html_fakes.rb +0 -191
- data/test/java_test.rb +0 -29
- data/test/playground/connection.rb +0 -19
- data/test/playground/dragdrop_behavior.rb +0 -60
- data/test/playground/drb.rb +0 -55
- data/test/playground/java_signature.rb +0 -22
- data/test/playground/nokogiri.rb +0 -15
- data/test/playground/put_headers.rb +0 -83
- data/test/playground/rack.rb +0 -11
- data/test/playground/rjb_bind.rb +0 -42
- data/test/playground/stack_level_problem.rb +0 -129
- data/test/playground/thread_problem.rb +0 -57
- data/test/playground/web_response_data.rb +0 -21
- data/test/playground/webrat.rb +0 -48
- data/test/playground/xhr_accept_headers.rb +0 -61
- data/test/process_test.rb +0 -55
- data/test/session_test.rb +0 -40
- data/test/test_helper.rb +0 -80
@@ -1,57 +0,0 @@
|
|
1
|
-
# require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
-
|
3
|
-
$: << File.expand_path(File.dirname(__FILE__) + "/../../lib")
|
4
|
-
require 'steam'
|
5
|
-
include Steam
|
6
|
-
|
7
|
-
Java.import 'com.gargoylesoftware.htmlunit.WebClient'
|
8
|
-
Java.import 'com.gargoylesoftware.htmlunit.BrowserVersion'
|
9
|
-
Java.import 'com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException'
|
10
|
-
|
11
|
-
page = <<-erb
|
12
|
-
<html>
|
13
|
-
<head>
|
14
|
-
<script>
|
15
|
-
document.title = 'pre ajax call';
|
16
|
-
function some_ajax(url) {
|
17
|
-
http = new XMLHttpRequest();
|
18
|
-
http.open("GET", url, true);
|
19
|
-
http.onreadystatechange = function() {
|
20
|
-
document.title = document.title + ' ' + http.readyState
|
21
|
-
if(http.readyState == 4) document.title = http.responseText
|
22
|
-
}
|
23
|
-
http.send(null);
|
24
|
-
}
|
25
|
-
some_ajax('/ajax/1');
|
26
|
-
// some_ajax('/ajax/2');
|
27
|
-
</script>
|
28
|
-
</head>
|
29
|
-
</html>
|
30
|
-
erb
|
31
|
-
|
32
|
-
client = Java::WebClient.new(Java::BrowserVersion.FIREFOX_3)
|
33
|
-
client.setCssEnabled(true)
|
34
|
-
client.setJavaScriptEnabled(true)
|
35
|
-
|
36
|
-
mock = Connection::Mock.new
|
37
|
-
mock.mock :get, 'http://localhost:3000/', page
|
38
|
-
mock.mock :get, 'http://localhost:3000/ajax/1', 'post ajax call 1!', 'Content-Type' => 'application/javascript'
|
39
|
-
# mock.mock :get, 'http://localhost:3000/ajax/2', 'post ajax call 2!', 'Content-Type' => 'application/javascript'
|
40
|
-
|
41
|
-
connection = Browser::HtmlUnit::Connection.new(mock)
|
42
|
-
client.setWebConnection(Rjb::bind(connection, 'com.gargoylesoftware.htmlunit.WebConnection'))
|
43
|
-
|
44
|
-
page = client.getPage('http://localhost:3000/')
|
45
|
-
puts page.asXml
|
46
|
-
puts page.getTitleText
|
47
|
-
|
48
|
-
# mock = Connection::Mock.new
|
49
|
-
# mock.mock :get, 'http://localhost:3000/', page
|
50
|
-
# mock.mock :get, 'http://localhost:3000/ajax', 'post ajax call!', 'Content-Type' => 'application/javascript'
|
51
|
-
#
|
52
|
-
# browser = Browser::HtmlUnit.new(mock)
|
53
|
-
# # client.setWebConnection(Rjb::bind(connection, 'com.gargoylesoftware.htmlunit.WebConnection'))
|
54
|
-
#
|
55
|
-
# response = browser.get('http://localhost:3000/').last
|
56
|
-
# puts browser.page.asXml
|
57
|
-
|
@@ -1,21 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rjb'
|
3
|
-
|
4
|
-
class_path = Dir[File.expand_path(File.dirname(__FILE__) + '/../../lib/htmlunit') + '/*.jar'].join(':')
|
5
|
-
Rjb::load(class_path)
|
6
|
-
|
7
|
-
|
8
|
-
# klass = Rjb::import('java.lang.String')
|
9
|
-
Arrays = Rjb::import('java.util.Arrays')
|
10
|
-
WebResponseData = Rjb::import('com.gargoylesoftware.htmlunit.WebResponseData')
|
11
|
-
|
12
|
-
# WebResponseData.getConstructors.each do |method|
|
13
|
-
# params = method.getParameterTypes.map { |type| type.getName }.join(', ')
|
14
|
-
# puts "#{method.getName}(#{params})"
|
15
|
-
# end
|
16
|
-
|
17
|
-
headers = Arrays.asList([])
|
18
|
-
|
19
|
-
# com.gargoylesoftware.htmlunit.WebResponseData([B, int, java.lang.String, java.util.List)
|
20
|
-
signature = '[B;I;Ljava.lang.String;Ljava.util.List;'
|
21
|
-
WebResponseData.new_with_sig(signature, 'foo'.split(/./), 1, "", headers)
|
data/test/playground/webrat.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'webrat'
|
3
|
-
|
4
|
-
|
5
|
-
class Browser
|
6
|
-
include Webrat::Locators
|
7
|
-
|
8
|
-
class Cache
|
9
|
-
def elements
|
10
|
-
@elements ||= {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def clear
|
14
|
-
@elements.clear
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def initialize
|
19
|
-
@cache = Cache.new
|
20
|
-
end
|
21
|
-
|
22
|
-
def find_link(text_or_title_or_id)
|
23
|
-
element = LinkLocator.new(@cache, dom, text_or_title_or_id).locate!
|
24
|
-
end
|
25
|
-
|
26
|
-
def dom
|
27
|
-
Webrat::XML.xml_document(html)
|
28
|
-
end
|
29
|
-
|
30
|
-
def html
|
31
|
-
<<-html
|
32
|
-
<html>
|
33
|
-
<head>
|
34
|
-
</head>
|
35
|
-
<body>
|
36
|
-
<a href="/">Home</a>
|
37
|
-
<p>Welcome!</p>
|
38
|
-
<p>Click here to <a href="/foo">foo</a>.</p>
|
39
|
-
</body>
|
40
|
-
</html>
|
41
|
-
html
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
browser = Browser.new
|
46
|
-
# p Webrat::XML.xpath_to(browser.find_link_element('foo'))
|
47
|
-
p browser.find_link('foo').path
|
48
|
-
|
@@ -1,61 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'rjb'
|
3
|
-
|
4
|
-
class_path = Dir[File.expand_path(File.dirname(__FILE__) + '/../../lib/htmlunit') + '/*.jar'].join(':')
|
5
|
-
|
6
|
-
Rjb::load(class_path)
|
7
|
-
|
8
|
-
Url = Rjb::import('java.net.URL')
|
9
|
-
WebClient = Rjb::import('com.gargoylesoftware.htmlunit.WebClient')
|
10
|
-
HtmlUnitMockWebConnection = Rjb::import('com.gargoylesoftware.htmlunit.MockWebConnection')
|
11
|
-
|
12
|
-
class MockConnection
|
13
|
-
attr_reader :connection
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
@connection = HtmlUnitMockWebConnection.new
|
17
|
-
end
|
18
|
-
|
19
|
-
def method_missing(method, *args)
|
20
|
-
p [method, args.first.toString]
|
21
|
-
@connection.send(method, *args)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
connection = MockConnection.new
|
26
|
-
# connection = HtmlUnitMockWebConnection.new
|
27
|
-
|
28
|
-
content = <<-html
|
29
|
-
<html>
|
30
|
-
<head>
|
31
|
-
<script>
|
32
|
-
document.title = 'pre ajax call';
|
33
|
-
function some_ajax(url) {
|
34
|
-
xhr = new XMLHttpRequest();
|
35
|
-
xhr.open("GET", url, true);
|
36
|
-
xhr.setRequestHeader("Accept", "application/json, text/javascript, */*");
|
37
|
-
xhr.onreadystatechange = function() {
|
38
|
-
document.title = document.title + ' ' + xhr.readyState
|
39
|
-
if(xhr.readyState == 4) document.title = xhr.responseText
|
40
|
-
}
|
41
|
-
xhr.send(null);
|
42
|
-
}
|
43
|
-
some_ajax('/ajax/1');
|
44
|
-
</script>
|
45
|
-
</head>
|
46
|
-
</html>
|
47
|
-
html
|
48
|
-
url = Url.new('http://localhost:3000/foo')
|
49
|
-
connection.setResponse(url, content, 'text/html')
|
50
|
-
|
51
|
-
content = 'document.title = "FOO";'
|
52
|
-
url = Url.new('http://localhost:3000/ajax/1')
|
53
|
-
connection.setResponse(url, content, 'application/javascript')
|
54
|
-
|
55
|
-
client = WebClient.new
|
56
|
-
client.setCssEnabled(true)
|
57
|
-
client.setJavaScriptEnabled(true)
|
58
|
-
client.setWebConnection(Rjb::bind(connection, 'com.gargoylesoftware.htmlunit.WebConnection'))
|
59
|
-
# client.setWebConnection(connection)
|
60
|
-
page = client.getPage('http://localhost:3000/foo')
|
61
|
-
# puts page.asXml
|
data/test/process_test.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
class ProcessTest < Test::Unit::TestCase
|
4
|
-
include Steam
|
5
|
-
|
6
|
-
def setup
|
7
|
-
delete_pid
|
8
|
-
end
|
9
|
-
|
10
|
-
def teardown
|
11
|
-
delete_pid
|
12
|
-
end
|
13
|
-
|
14
|
-
def write_pid(pid)
|
15
|
-
File.open('/tmp/steam.pid', 'w') { |f| f.write(pid) }
|
16
|
-
end
|
17
|
-
|
18
|
-
def delete_pid
|
19
|
-
File.delete('/tmp/steam.pid') rescue Errno::ENOENT
|
20
|
-
end
|
21
|
-
|
22
|
-
test "new instance recalls an existing pid" do
|
23
|
-
write_pid(::Process.pid)
|
24
|
-
assert_equal ::Process.pid, Process.new.pid
|
25
|
-
end
|
26
|
-
|
27
|
-
test "pid? returns true if pid was recalled" do
|
28
|
-
write_pid(::Process.pid)
|
29
|
-
assert_equal true, Process.new.pid?
|
30
|
-
end
|
31
|
-
|
32
|
-
test "pid? returns false if pid could not be recalled" do
|
33
|
-
assert_equal false, Process.new.pid?
|
34
|
-
end
|
35
|
-
|
36
|
-
test "running? returns true if pid refers to an existing process" do
|
37
|
-
write_pid(::Process.pid)
|
38
|
-
assert_equal true, Process.new.running?
|
39
|
-
end
|
40
|
-
|
41
|
-
test "running? returns false if pid does not refer to an existing process" do
|
42
|
-
write_pid(1073741823)
|
43
|
-
assert_equal false, Process.new.running?
|
44
|
-
end
|
45
|
-
|
46
|
-
# # WTF the child process actually writes to /tmp/out.txt but File.read('/tmp/out.txt')
|
47
|
-
# # returns an empty string
|
48
|
-
# test "fork forks the process, reopens given streams and yields the given block" do
|
49
|
-
# File.delete('/tmp/out.txt') rescue Errno::ENOENT
|
50
|
-
# io = File.open('/tmp/out.txt', 'w+')
|
51
|
-
# io.sync = true
|
52
|
-
# Process.new.fork(:out => io) { puts 'foo' }
|
53
|
-
# assert_equal 'foo', File.open('/tmp/out.txt', 'r') { |f| f.read }
|
54
|
-
# end
|
55
|
-
end
|
data/test/session_test.rb
DELETED
@@ -1,40 +0,0 @@
|
|
1
|
-
require File.expand_path('../test_helper', __FILE__)
|
2
|
-
|
3
|
-
class SessionTest < Test::Unit::TestCase
|
4
|
-
include Steam
|
5
|
-
|
6
|
-
def setup
|
7
|
-
@browser = Browser::HtmlUnit.new(Connection::Mock.new)
|
8
|
-
@session = Session.new(@browser)
|
9
|
-
|
10
|
-
perform(:get, 'http://localhost:3000/', '<div id="foo"><div id="bar"><a id="buz" href="">bar!</a></div></div>')
|
11
|
-
end
|
12
|
-
|
13
|
-
test 'session responds to browser methods' do
|
14
|
-
assert @session.respond_to?(:response)
|
15
|
-
end
|
16
|
-
|
17
|
-
test 'assert_contain' do
|
18
|
-
@session.assert_contain(@session.response.body, 'bar!')
|
19
|
-
end
|
20
|
-
|
21
|
-
test 'assert_not_contain' do
|
22
|
-
@session.assert_not_contain(@session.response.body, 'bar!!')
|
23
|
-
end
|
24
|
-
|
25
|
-
test 'assert_have_tag' do
|
26
|
-
@session.assert_have_tag(@session.response.body, :a, 'bar!', :id => 'buz')
|
27
|
-
end
|
28
|
-
|
29
|
-
test 'assert_have_no_tag' do
|
30
|
-
@session.assert_have_no_tag(@session.response.body, :a, 'bar!', :class => 'buz')
|
31
|
-
end
|
32
|
-
|
33
|
-
test 'assert_have_xpath' do
|
34
|
-
@session.assert_have_xpath(@session.response.body, '//div/a[@id="buz"]')
|
35
|
-
end
|
36
|
-
|
37
|
-
test 'assert_have_no_xpath' do
|
38
|
-
@session.assert_have_no_xpath(@session.response.body, '//div/a[@class="buz"]')
|
39
|
-
end
|
40
|
-
end
|
data/test/test_helper.rb
DELETED
@@ -1,80 +0,0 @@
|
|
1
|
-
require 'test/unit'
|
2
|
-
require 'mocha'
|
3
|
-
require 'erb'
|
4
|
-
|
5
|
-
TEST_ROOT = File.expand_path("../", __FILE__)
|
6
|
-
|
7
|
-
$: << File.expand_path("../lib", TEST_ROOT)
|
8
|
-
$: << TEST_ROOT
|
9
|
-
|
10
|
-
FIXTURES_PATH = File.expand_path("../fixtures", __FILE__)
|
11
|
-
|
12
|
-
require 'steam'
|
13
|
-
|
14
|
-
# Steam::Java.import('com.gargoylesoftware.htmlunit.StringWebResponse')
|
15
|
-
# Steam::Java.import('com.gargoylesoftware.htmlunit.WebClient')
|
16
|
-
# Steam::Java.import('com.gargoylesoftware.htmlunit.TopLevelWindow')
|
17
|
-
# Steam::Java.import('com.gargoylesoftware.htmlunit.DefaultPageCreator')
|
18
|
-
|
19
|
-
module TestMethod
|
20
|
-
def self.included(base)
|
21
|
-
base.class_eval do
|
22
|
-
def test(name, &block)
|
23
|
-
test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
|
24
|
-
defined = instance_method(test_name) rescue false
|
25
|
-
raise "#{test_name} is already defined in #{self}" if defined
|
26
|
-
if block_given?
|
27
|
-
define_method(test_name, &block)
|
28
|
-
else
|
29
|
-
define_method(test_name) do
|
30
|
-
flunk "No implementation provided for #{name}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class Module
|
39
|
-
include TestMethod
|
40
|
-
end
|
41
|
-
|
42
|
-
class Test::Unit::TestCase
|
43
|
-
include TestMethod
|
44
|
-
|
45
|
-
def mock(method, url, response)
|
46
|
-
connection = @browser.connection
|
47
|
-
connection = connection.apps.last if connection.is_a?(Rack::Cascade)
|
48
|
-
connection.mock(method, url, response)
|
49
|
-
end
|
50
|
-
|
51
|
-
def perform(method, url, response)
|
52
|
-
mock(method, url, response)
|
53
|
-
@status, @headers, @response = @browser.call(Steam::Request.env_for(url))
|
54
|
-
end
|
55
|
-
|
56
|
-
def assert_response_contains(text, options = {})
|
57
|
-
tag_name = options[:in] || 'body'
|
58
|
-
response = yield
|
59
|
-
assert_equal 200, response.status
|
60
|
-
assert_match %r(<#{tag_name}>\s*#{text}\s*<\/#{tag_name}>), response.body
|
61
|
-
end
|
62
|
-
|
63
|
-
def assert_passes
|
64
|
-
begin
|
65
|
-
yield
|
66
|
-
rescue Test::Unit::AssertionFailedError => e
|
67
|
-
ensure
|
68
|
-
assert_nil e
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def assert_fails
|
73
|
-
begin
|
74
|
-
yield
|
75
|
-
rescue Test::Unit::AssertionFailedError => e
|
76
|
-
ensure
|
77
|
-
assert_not_nil e
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|