Skip to content

Commit

Permalink
Merge pull request #23 from YusukeIwaki/cdp_session_spec
Browse files Browse the repository at this point in the history
add RSpec: CDPSession_spec
  • Loading branch information
YusukeIwaki committed Sep 17, 2020
2 parents 13e3ace + f6a0a27 commit c8613da
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 2 deletions.
10 changes: 10 additions & 0 deletions lib/puppeteer/cdp_session.rb
Original file line number Diff line number Diff line change
Expand Up @@ -81,4 +81,14 @@ def handle_closed
@connection = nil
emit_event 'Events.CDPSession.Disconnected'
end

# @param event_name [String]
def on(event_name, &block)
add_event_listener(event_name, &block)
end

# @param event_name [String]
def once(event_name, &block)
observe_first(event_name, &block)
end
end
4 changes: 2 additions & 2 deletions lib/puppeteer/connection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -204,8 +204,8 @@ def handle_message(message)
callback.reject(
ProtocolError.new(
method: callback.method,
error_message: response['error']['message'],
error_data: response['error']['data']))
error_message: message['error']['message'],
error_data: message['error']['data']))
else
callback.resolve(message['result'])
end
Expand Down
74 changes: 74 additions & 0 deletions spec/integration/cdp_session_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
require 'spec_helper'

RSpec.describe Puppeteer::CDPSession do
it 'should work' do
client = page.target.create_cdp_session

client.send_message('Runtime.enable')
client.send_message('Runtime.evaluate', expression: 'window.foo = "bar"')

foo = page.evaluate('() => globalThis.foo')
expect(foo).to eq('bar')
end

context 'with empty page' do
sinatra do
get('/') { 'Hello' }
end

it 'should send events' do
client = page.target.create_cdp_session

client.send_message('Network.enable')

events = []
client.on('Network.requestWillBeSent') do |event|
events << event
end
page.goto('http://127.0.0.1:4567/')
expect(events.size).to eq(1)
end
end

# it('should enable and disable domains independently', async () => {
# const { page } = getTestState();

# const client = await page.target().createCDPSession();
# await client.send('Runtime.enable');
# await client.send('Debugger.enable');
# // JS coverage enables and then disables Debugger domain.
# await page.coverage.startJSCoverage();
# await page.coverage.stopJSCoverage();
# // generate a script in page and wait for the event.
# const [event] = await Promise.all([
# waitEvent(client, 'Debugger.scriptParsed'),
# page.evaluate('//# sourceURL=foo.js'),
# ]);
# // expect events to be dispatched.
# expect(event.url).toBe('foo.js');
# });

it_fails_firefox 'should be able to detach session' do
client = page.target.create_cdp_session

client.send_message('Runtime.enable')
eval_response = client.send_message('Runtime.evaluate', expression: '1 + 2', returnByValue: true)
expect(eval_response['result']['value']).to eq(3)

# Target.detachFromTarget seems not to be implemented in Firefox.
# Only Chrome can pass this spec.
client.detach

expect {
client.send_message('Runtime.evaluate', expression: '3 + 1', returnByValue: true)
}.to raise_error(/Session closed./)
end

it 'should throw nice errors' do
client = page.target.create_cdp_session

expect {
client.send_message('ThisCommand.DoesNotExist')
}.to raise_error(/ThisCommand.DoesNotExist/)
end
end

0 comments on commit c8613da

Please sign in to comment.