提交 fb02f7c3 编写于 作者: Huan (李卓桓)'s avatar Huan (李卓桓)

finish smoking tests

上级 b6db59a7
......@@ -29,7 +29,7 @@ class Browser {
}
open() {
const WX_URL = 'http://zixia.net/~zixia/dl/' // 'https://wx.qq.com'
const WX_URL = 'https://wx.qq.com'
console.error(`browser init ${this.browser}:${this.port}`)
this.driver = new WebDriver.Builder().forBrowser(this.browser).build()
......@@ -44,7 +44,7 @@ class Browser {
)
}
inject() {
const injectio = getInjectio()
const injectio = this.getInjectio()
console.error('injecting')
return this.execute(injectio, this.port)
.then(() => {
......@@ -79,4 +79,4 @@ class Browser {
}
}
module.exports = Browser
\ No newline at end of file
module.exports = Browser
......@@ -53,12 +53,12 @@
, send: send
, clog: clog // Console log
, slog: slog // Socket IO log
, ping: ping
, ding: ding
, quit: quit
}
function isReady() {
return (typeof angular)!=='undefined' && angular.element && angular.element("body")
return !!((typeof angular)!=='undefined' && angular.element && angular.element("body"))
}
function init() {
// XXX
......@@ -108,7 +108,7 @@
clog('quit()')
}
function slog(data) { return Wechaty.socket && Wechaty.socket.emit('log', data) }
function ping() { return 'pong' }
function ding() { return 'dong' }
function send(ToUserName, Content) {
var c = Wechaty.glue.chatFactory
var m = c.createMessage({
......@@ -157,10 +157,11 @@
Wechaty.glue.rootScope.$on("message:add:success", function (event, data) {
socket.emit('message', data)
})
// ping -> pong. for test & live check purpose
socket.on('ping', function (e) {
clog('received socket io event: ping. emit pong...')
socket.emit('pong', 'pong')
// ding -> dong. for test & live check purpose
// ping/pong are reserved by socket.io https://github.com/socketio/socket.io/issues/2414
socket.on('ding', function (e) {
clog('received socket io event: ding. emit dong...')
socket.emit('dong', 'dong')
})
// re-connect XXX will socketio library auto re-connect by itself???
// socket.on('disconnect', function(e) {
......
......@@ -44,12 +44,12 @@ class Server extends EventEmitter {
}
createBrowser() {
const b = new Browser('chrome', this.port)
const b = new Browser('chrome', this.port)
/**
* `unload` event is sent from js@browser to webserver via socketio
* after received `unload`, we re-inject the Wechaty js code into browser.
*/
* `unload` event is sent from js@browser to webserver via socketio
* after received `unload`, we re-inject the Wechaty js code into browser.
*/
this.on('unload', () => {
console.error('server received unload event')
this.browser.inject()
......@@ -92,9 +92,9 @@ class Server extends EventEmitter {
next()
})
app.get('/ping', function (req, res) {
console.error(new Date() + ' GET /ping')
res.send('pong')
app.get('/ding', function (req, res) {
console.error(new Date() + ' GET /ding')
res.send('dong')
})
// app.post('/', function (req, res) {
......@@ -124,20 +124,21 @@ class Server extends EventEmitter {
s.on('disconnect', function() {
console.error('socket.io disconnected')
/**
* Possible conditions:
* 1. Browser reload
* 2. Lost connection(Bad network
* 3.
*/
* Possible conditions:
* 1. Browser reload
* 2. Lost connection(Bad network
* 3.
*/
this.socketClient = null
})
// Events from Wechaty@Broswer --to--> Server
const events = [
'message'
, 'login'
, 'logout'
, 'unload'
'message'
, 'login'
, 'logout'
, 'unload'
, 'zixia'
]
events.map(e => {
s.on(e, data => {
......@@ -146,6 +147,10 @@ class Server extends EventEmitter {
})
})
s.on('dong', data => {
console.log(`recv event[dong] from browser:` + data)
})
/**
* prevent lost event: buffer new event received when socket disconnected
while (buff.length) {
......@@ -167,26 +172,26 @@ class Server extends EventEmitter {
this.browser.quit()
delete this.browser
}
if (this.socketClient) {
this.socketClient.disconnect(0)
delete this.socketClient
}
if (this.socketServer) {
socketServer.httpsServer.close()
socketServer.close()
delete this.socketServer
socketServer.httpsServer.close()
socketServer.close()
delete this.socketServer
}
if (this.socketClient) {
this.socketClient.disconnect(0)
delete this.socketClient
}
if (this.server) {
this.server.close()
delete this.server
this.server.close()
delete this.server
}
}
/**
*
* Proxy Call to Wechaty in Browser
*
*/
*
* Proxy Call to Wechaty in Browser
*
*/
browserExecute(script) {
if (!this.browser)
throw new Error('no browser!')
......
......@@ -4,42 +4,38 @@ const Browser = require('../lib/puppet-web-browser')
test('Browser class smoking tests', function (t) {
//t.plan(5)
const PORT = 58788
const b = new Browser('firefox', PORT)
const b = new Browser('chrome', PORT)
t.ok(b, 'Browser instance created')
b.open()
.then(() => {
t.ok(true, 'url opened')
b.execute('return 1+1')
.then(n => {
t.equal(n, 2, 'exec 1+1 in browser, equal 2')
// b.inject().then( r => {
// console.log('injected: ' + r)
b.quit()
t.end()
// })
b.inject()
.then(() => {
t.ok(true, 'wechaty injected')
Promise.all([
b.execute('return Wechaty && Wechaty.ding()') // ret_ding
, b.execute('return Wechaty && Wechaty.isReady()') // ret_ready
]).then(([
ret_ding
, ret_ready
]) => {
t.equal(ret_ding , 'dong', 'Wechaty.ding() returns dong' )
t.equal(typeof ret_ready, 'boolean', 'Wechaty.isReady() returns boollean' )
b.quit() + t.end()
}).catch((e) => { // Promise.all
t.ok(false, 'Promise.all promise rejected:' + e)
b.quit() + t.end()
})
}).catch((e) => { // b.inject
t.ok(false, 'b.inject promise rejected:' + e)
b.quit() + t.end()
})
// b.inject()
// .then(() => {
// t.ok(true, 'wechaty injected')
// b.execute('return Wechaty && Wechaty.ping()')
// .then(r => t.equal(r, 'pong', 'Wechaty.ping() returns pong'))
// b.execute('return Wechaty && Wechaty.isReady()')
// .then(r => t.notEqual(typeof r, 'bool', 'Wechaty.isReady() returns bool'))
// b.quit(true)
// t.end()
// })
}).catch((e) => { // b.open
t.ok(false, 'open promise rejected:' + e)
t.end() + b.quit()
})
})
......@@ -4,7 +4,5 @@ const PuppetWeb = require('../lib/puppet-web')
test('test', function (t) {
t.plan(1)
t.ok(ret, 'test')
t.pass('test')
})
console.log('ok')
......@@ -29,15 +29,16 @@ test('WebDriver smoking test', function(t) {
t.end()
driver.quit()
}).catch(e => {
t.ok(false, 'promise rejected. e:' + e)
t.end()
driver.quit()
})/* .finally(() => {
console.log('final')
})
*/
})
function verifyJson(expected) {
return function(actual) {
assert(JSON.stringify(actual)).equalTo(JSON.stringify(expected))
};
}
function execute() {
return driver.executeScript.apply(driver, arguments)
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册