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

#40 fix all unit tests with typescript linting

上级 278d8091
......@@ -3,7 +3,7 @@ import Contact from './src/contact'
import IoClient from './src/io-client'
import Message from './src/message'
import Puppet from './src/puppet'
import PuppetWeb from './src/puppet-web'
import PuppetWeb from './src/puppet-web/'
import Room from './src/room'
import UtilLib from './src/util-lib'
import Wechaty from './src/wechaty'
......
......@@ -14,6 +14,7 @@ import {
Config
, WechatyEventName
} from './config'
import Contact from './contact'
import Message from './message'
import Room from './room'
......@@ -202,5 +203,4 @@ function wrapFilehelper(listener) {
}
}
// module.exports = WechatyEvent.default = WechatyEvent
export default EventScope
......@@ -234,15 +234,15 @@ class Message {
Object.keys(this.rawObj).forEach(k => console.error(`${k}: ${this.rawObj[k]}`))
}
public static find(selector, option) {
// return new Message({MsgId: '-1'})
public static async find(query) {
return Promise.resolve(new Message(<MessageRawObj>{MsgId: '-1'}))
}
public static findAll(selector, option) {
return [
// new Message ({MsgId: '-2'})
// , new Message ({MsgId: '-3'})
]
public static async findAll(query) {
return Promise.resolve([
new Message (<MessageRawObj>{MsgId: '-2'})
, new Message (<MessageRawObj>{MsgId: '-3'})
])
}
public static initType() {
......
......@@ -70,7 +70,7 @@ class Bridge {
})
}
private async inject(): Promise<any> {
public async inject(): Promise<any> {
log.verbose('PuppetWebBridge', 'inject()')
// return co.call(this, function* () {
......@@ -313,7 +313,7 @@ class Bridge {
/**
* Proxy Call to Wechaty in Bridge
*/
private proxyWechaty(wechatyFunc, ...args): Promise<any> {
public proxyWechaty(wechatyFunc, ...args): Promise<any> {
const argsEncoded = new Buffer(
encodeURIComponent(
JSON.stringify(args)
......@@ -362,7 +362,7 @@ class Bridge {
/**
* call REAL browser excute for other methods
*/
private execute(script, ...args): Promise<any> {
public execute(script, ...args): Promise<any> {
if (!this.puppet || !this.puppet.browser) {
return Promise.reject(new Error('execute(): no puppet or no puppet.browser in bridge'))
}
......
......@@ -22,30 +22,30 @@ import log from'../brolog-env'
import Config from'../config'
type BrowserSetting = {
head?: string
sessionFile?: string
}
class Browser extends EventEmitter {
private _targetState
private _currentState
private driver: WebDriver
public driver: WebDriver
constructor(
private head: string = process.env['WECHATY_HEAD'] || Config.DEFAULT_HEAD
, private sessionFile: string = null // a file to save session cookies
) {
constructor(private setting: BrowserSetting = {}) {
super()
log.verbose('PuppetWebBrowser', 'constructor() with head(%s) sessionFile(%s)', head, sessionFile)
// this.head = head
// this.sessionFile = sessionFile
log.verbose('PuppetWebBrowser', 'constructor() with head(%s) sessionFile(%s)', setting.head, setting.sessionFile)
// this.live = false
setting.head = setting.head || process.env['WECHATY_HEAD'] || Config.DEFAULT_HEAD
this.targetState('close')
this.currentState('close')
}
// targetState : 'open' | 'close'
private targetState(newState?) {
public targetState(newState?) {
if (newState) {
log.verbose('PuppetWebBrowser', 'targetState(%s)', newState)
this._targetState = newState
......@@ -62,7 +62,7 @@ class Browser extends EventEmitter {
return this._currentState
}
public toString() { return `Browser({head:${this.head})` }
public toString() { return `Browser({head:${this.setting.head})` }
public async init(): Promise<Browser> {
this.targetState('open')
......@@ -80,7 +80,7 @@ class Browser extends EventEmitter {
await this.open(fastUrl)
await this.loadSession()
.catch(e => { // fail safe
log.verbose('PuppetWeb', 'browser.loadSession(%s) exception: %s', this.sessionFile, e && e.message || e)
log.verbose('PuppetWeb', 'browser.loadSession(%s) exception: %s', this.setting.sessionFile, e && e.message || e)
})
await this.open()
/**
......@@ -128,29 +128,31 @@ class Browser extends EventEmitter {
})
}
private initDriver(): Promise<WebDriver> {
log.verbose('PuppetWebBrowser', 'initDriver(head: %s)', this.head)
public initDriver(): Promise<WebDriver> {
log.verbose('PuppetWebBrowser', 'initDriver(head: %s)', this.setting.head)
const head = this.setting.head
switch (true) {
case !this.head: // no head default to phantomjs
case /phantomjs/i.test(this.head):
case /phantom/i.test(this.head):
case !head: // no head default to phantomjs
case /phantomjs/i.test(head):
case /phantom/i.test(head):
this.driver = this.getPhantomJsDriver()
break
case /firefox/i.test(this.head):
case /firefox/i.test(head):
this.driver = new Builder()
.setAlertBehavior('ignore')
.forBrowser('firefox')
.build()
break
case /chrome/i.test(this.head):
case /chrome/i.test(head):
this.driver = this.getChromeDriver()
break
default: // unsupported browser head
throw new Error('unsupported head: ' + this.head)
throw new Error('unsupported head: ' + head)
}
this.driver.manage()
......@@ -362,9 +364,11 @@ class Browser extends EventEmitter {
})
}
private getBrowserPids(): Promise<string[]> {
public getBrowserPids(): Promise<string[]> {
log.silly('PuppetWebBrowser', 'getBrowserPids()')
const head = this.setting.head
return new Promise((resolve, reject) => {
require('ps-tree')(process.pid, (err, children) => {
if (err) {
......@@ -374,20 +378,20 @@ class Browser extends EventEmitter {
let browserRe
switch (true) {
case !this.head: // no head default to phantomjs
case /phantomjs/i.test(this.head):
case /phantom/i.test(this.head):
case !head: // no head default to phantomjs
case /phantomjs/i.test(head):
case /phantom/i.test(head):
browserRe = 'phantomjs'
break
case !!(this.head): // head default to chrome
case /chrome/i.test(this.head):
case !!(head): // head default to chrome
case /chrome/i.test(head):
browserRe = 'chrome(?!driver)|chromium'
break
default:
log.warn('PuppetWebBrowser', 'getBrowserPids() for unsupported head: %s', this.head)
browserRe = this.head
log.warn('PuppetWebBrowser', 'getBrowserPids() for unsupported head: %s', head)
browserRe = head
}
let matchRegex = new RegExp(browserRe, 'i')
......@@ -549,32 +553,34 @@ class Browser extends EventEmitter {
return dead
}
public checkSession() {
public checkSession(): Promise<Object[]> {
// just check cookies, no file operation
log.verbose('PuppetWebBrowser', 'checkSession()')
if (this.dead()) { Promise.reject(new Error('checkSession() - browser dead'))}
return this.driver.manage().getCookies()
return new Promise((resolve, reject) => {
this.driver.manage().getCookies()
.then(cookies => {
log.silly('PuppetWebBrowser', 'checkSession %s', cookies.map(c => c.name).join(','))
return cookies
resolve(cookies)
})
.catch(e => {
log.error('PuppetWebBrowser', 'checkSession() getCookies() exception: %s', e && e.message || e)
throw e
reject(e)
})
})
}
public cleanSession() {
log.verbose('PuppetWebBrowser', `cleanSession(${this.sessionFile})`)
if (!this.sessionFile) {
log.verbose('PuppetWebBrowser', `cleanSession(${this.setting.sessionFile})`)
if (!this.setting.sessionFile) {
return Promise.reject(new Error('cleanSession() no session'))
}
if (this.dead()) { return Promise.reject(new Error('cleanSession() - browser dead'))}
const filename = this.sessionFile
const filename = this.setting.sessionFile
return new Promise((resolve, reject) => {
fs.unlink(filename, err => {
if (err && err.code !== 'ENOENT') {
......@@ -585,15 +591,15 @@ class Browser extends EventEmitter {
})
}
public saveSession() {
log.silly('PuppetWebBrowser', `saveSession(${this.sessionFile})`)
if (!this.sessionFile) {
public saveSession(): Promise<Object[]> {
log.silly('PuppetWebBrowser', `saveSession(${this.setting.sessionFile})`)
if (!this.setting.sessionFile) {
return Promise.reject(new Error('saveSession() no session'))
} else if (this.dead()) {
return Promise.reject(new Error('saveSession() - browser dead'))
}
const filename = this.sessionFile
const filename = this.setting.sessionFile
function cookieFilter(cookies) {
const skipNames = [
......@@ -635,14 +641,14 @@ class Browser extends EventEmitter {
}
public loadSession(): Promise<any> {
log.verbose('PuppetWebBrowser', `loadSession(${this.sessionFile})`)
if (!this.sessionFile) {
log.verbose('PuppetWebBrowser', `loadSession(${this.setting.sessionFile})`)
if (!this.setting.sessionFile) {
return Promise.reject(new Error('loadSession() no sessionFile'))
} else if (this.dead()) {
return Promise.reject(new Error('loadSession() - browser dead'))
}
const filename = this.sessionFile
const filename = this.setting.sessionFile
return new Promise((resolve, reject) => {
fs.readFile(filename, (err, jsonStr) => {
......
......@@ -17,7 +17,7 @@ import Watchdog from './watchdog'
export default PuppetWeb
export {
Bridge
Bridge
, Browser
, Event
, PuppetWeb
......
......@@ -18,10 +18,11 @@
// const co = require('co')
import {
Config
, ScanInfo
// Config
ScanInfo
, WatchdogFood
} from '../config'
import Contact from '../contact'
// import FriendRequest from '../friend-request'
import Message from '../message'
......@@ -36,28 +37,24 @@ import Event from './event'
import Server from './server'
import Watchdog from './watchdog'
type PuppetWebSetting = {
head?: string
profile?: string
}
const DEFAULT_PUPPET_PORT = 18788 // // W(87) X(88), ascii char code ;-]
class PuppetWeb extends Puppet {
public browser: Browser
public bridge: Bridge
private server: Server
public server: Server
public scan: ScanInfo
private port: number
constructor(
private head: string = Config.head
, private profile: string = null // if not set profile, then do not store session.
) {
constructor(private setting: PuppetWebSetting = {}) {
super()
// this.head = head
// this.profile = profile
// this.userId = null // user id
// this.user = null // <Contact> of user self
this.on('watchdog', Watchdog.onFeed.bind(this))
}
......@@ -65,7 +62,7 @@ class PuppetWeb extends Puppet {
public toString() { return `Class PuppetWeb({browser:${this.browser},port:${this.port}})` }
public async init(): Promise<PuppetWeb> {
log.verbose('PuppetWeb', `init() with head:${this.head}, profile:${this.profile}`)
log.verbose('PuppetWeb', `init() with head:${this.setting.head}, profile:${this.setting.profile}`)
// this.readyState('connecting')
this.targetState('live')
......@@ -180,10 +177,10 @@ class PuppetWeb extends Puppet {
private async initBrowser(): Promise<Browser> {
log.verbose('PuppetWeb', 'initBrowser()')
const browser = new Browser(
this.head
, this.profile
)
const browser = new Browser({
head: this.setting.head
, sessionFile: this.setting.profile
})
browser.on('dead', Event.onBrowserDead.bind(this))
......
......@@ -62,7 +62,7 @@ class Server extends EventEmitter {
/**
* Https Server
*/
private createHttpsServer(express: express.Application): Promise<https.Server> {
public createHttpsServer(express: express.Application): Promise<https.Server> {
return new Promise((resolve, reject) => {
const srv = https.createServer({
key: require('./ssl-pem').key
......@@ -85,7 +85,7 @@ class Server extends EventEmitter {
/**
* express Middleware
*/
private createExpress(): express.Application {
public createExpress(): express.Application {
const e = express()
e.use(bodyParser.json())
e.use(function(req, res, next) {
......@@ -107,7 +107,7 @@ class Server extends EventEmitter {
/**
* Socket IO
*/
private createSocketIo(httpsServer): SocketIO.Server {
public createSocketIo(httpsServer): SocketIO.Server {
const socketServer = io.listen(httpsServer, {
// log: true
})
......
......@@ -182,10 +182,10 @@ class Wechaty extends EventEmitter {
let puppet
switch (this.setting.type) {
case 'web':
puppet = new PuppetWeb(
this.setting.head
, this.setting.profile
)
puppet = new PuppetWeb({
head: this.setting.head
, profile: this.setting.profile
})
break
default:
throw new Error('Puppet unsupport(yet): ' + this.setting.type)
......
import { test } from 'ava'
import {
Contact
, Wechaty
// , Wechaty
, Config
, Puppet
, log
, PuppetWeb
// , log
} from '../'
// const test = require('tape')
// const Contact = require('../src/contact')
// const Puppet = require('../src/puppet')
// const log = require('../src/brolog-env')
Config.puppetInstance(new Puppet())
Config.puppetInstance(new PuppetWeb())
// Contact.attach()
test('Contact smoke testing', async t => {
......
import { test } from 'ava'
import fs from 'fs'
import * as fs from 'fs'
import { execSync } from 'child_process'
import sinon from 'sinon'
// import { execSync } from 'child_process'
// import * as sinon from 'sinon'
import { Config, log } from '../'
import { Config } from '../'
/**
* need keep this !Config.isDocker because ava need at least one test() inside.
......@@ -17,7 +17,7 @@ import { Config, log } from '../'
Config.isDocker && test('Docker smoking test', function(t) {
// const n = execSync('ps a | grep Xvfb | grep -v grep | wc -l').toString().replace(/\n/, '', 'g')
// t.is(parseInt(n), 1, 'should has Xvfb started')
t.notThrows(_ => {
fs.accessSync(Config.CMD_CHROMIUM, fs.X_OK)
t.notThrows(() => {
fs.accessSync(Config.CMD_CHROMIUM, fs['X_OK'])
}, 'should exist xvfb-chrome exectable')
})
......@@ -4,4 +4,6 @@ test('Electron smoke testing', async t => {
t.true(true, 'test')
})
test.todo('Electron open wx')
test.todo('Electron open wx', t => {
})
import { test } from 'ava'
import {
Message
, Wechaty
, Config
Config
, Contact
, Puppet
, Message
, PuppetWeb
// , Wechaty
, log
} from '../'
// const test = require('tape')
// const Message = require('../src/message')
// const Contact = require('../src/contact')
// const Puppet = require('../src/puppet')
} from '../'
// const log = require('../src/brolog-env')
const puppet = new Puppet()
const puppet = new PuppetWeb()
Config.puppetInstance(puppet)
// Contact.attach(puppet)
// Message.attach(puppet)
......@@ -58,7 +52,7 @@ test('Message ready() promise testing', async t => {
// Contact.attach(puppet)
// Message.attach(puppet)
Contact.init()
// Contact.init()
// Mock
function mockGetContact(id) {
......@@ -105,22 +99,18 @@ test('Message ready() promise testing', async t => {
t.is(tc.get('name') , expectedToNickName , 'contact ready for ToNickName')
})
test('TBW: Message static method', t => {
test('TBW: Message static method', async t => {
// Contact.attach(new Puppet())
// Message.attach(new Puppet())
const m = Message.find({
const m = await Message.find({
id: 'xxx'
}, {
limit: 1
})
t.truthy(m.get('id'), 'Message.find')
const ms = Message.findAll({
const ms = await Message.findAll({
from: 'yyy'
}, {
limit: 2
})
t.is(ms.length, 2, 'Message.findAll with limit 2')
......
import { test } from 'ava'
import { log } from '../'
// import { log } from '../'
import { spy } from 'sinon'
test('Node.js function params destructuring behaviour test', function(t) {
test('Node.js function params destructuring behaviour test', t => {
const DEFAULT_N = 1
const DEFAULT_S = 't'
......@@ -26,6 +26,4 @@ test('Node.js function params destructuring behaviour test', function(t) {
paramSpy.reset()
paramTest({s: 'life'})
t.deepEqual(paramSpy.args[0], [DEFAULT_N, 'life'], 'should be equal to default n args')
// t.end()
})
import { test } from 'ava'
import {
PuppetWeb
, log
} from '../../'
Bridge
, Browser
, PuppetWeb
// , log
} from '../../src/puppet-web/'
import { spy } from 'sinon'
const Browser = PuppetWeb.Browser
const Bridge = PuppetWeb.Bridge
test('Bridge retry-promise testing', async t => {
// co(function* () {
const EXPECTED_RESOLVE = 'Okey'
......@@ -74,11 +73,11 @@ test('Bridge retry-promise testing', async t => {
test('Bridge smoking test', async t => {
const PORT = 58788
const browser = new Browser({port: PORT})
const browser = new Browser()
t.truthy(browser, 'should instanciated a browser')
const mockPuppet = {browser: browser}
const b = new Bridge({puppet: mockPuppet, port: PORT})
const b = new Bridge(mockPuppet as PuppetWeb, PORT)
t.truthy(b, 'should instanciated a bridge with mocked puppet')
// co(function* () {
......
import fs from 'fs'
import * as fs from 'fs'
import { test } from 'ava'
import {
PuppetWeb
, Config
// PuppetWeb
Config
, log
} from '../../'
const Browser = PuppetWeb.Browser
import {
Browser
// , PuppetWeb
} from '../../src/puppet-web/'
const PROFILE = Config.DEFAULT_PROFILE + '-' + process.pid + '-'
let profileCounter = 1
......@@ -73,16 +77,15 @@ test('Browser class cookie smoking tests', async t => {
})
test('Browser session save before quit, and load after restart', async t => {
const profileName = PROFILE + profileCounter++
let b
const profileName = PROFILE + profileCounter++
let b = new Browser({
sessionFile: profileName
})
/**
* use exception to call b.quit() to clean up
*/
try {
b = new Browser({
sessionFile: profileName
})
t.truthy(b, 'new Browser')
b.targetState('open')
......@@ -113,14 +116,14 @@ test('Browser session save before quit, and load after restart', async t => {
let cookiesFromCheck = await b.checkSession()
t.truthy(cookiesFromCheck.length, 'should get cookies from checkSession() after addCookies()')
let cookieFromCheck = cookiesFromCheck.filter(c => EXPECTED_NAME_REGEX.test(c.name))
t.is(cookieFromCheck[0].name, EXPECTED_COOKIE.name, 'cookie from checkSession() return should be same as we just set by addCookies()')
let cookieFromCheck = cookiesFromCheck.filter(c => EXPECTED_NAME_REGEX.test(c['name']))
t.is(cookieFromCheck[0]['name'], EXPECTED_COOKIE.name, 'cookie from checkSession() return should be same as we just set by addCookies()')
const cookiesFromSave = await b.saveSession()
t.truthy(cookiesFromSave.length, 'should get cookies from saveSession()')
const cookieFromSave = cookiesFromSave.filter(c => EXPECTED_NAME_REGEX.test(c.name))
const cookieFromSave = cookiesFromSave.filter(c => EXPECTED_NAME_REGEX.test(c['name']))
t.is(cookieFromSave.length, 1, 'should has the cookie we just set')
t.is(cookieFromSave[0].name, EXPECTED_COOKIE.name, 'cookie from saveSession() return should be same as we just set')
t.is(cookieFromSave[0]['name'], EXPECTED_COOKIE.name, 'cookie from saveSession() return should be same as we just set')
await b.driver.manage().deleteAllCookies()
cookiesFromCheck = await b.checkSession()
......@@ -133,9 +136,9 @@ test('Browser session save before quit, and load after restart', async t => {
cookiesFromCheck = await b.checkSession()
t.truthy(cookiesFromCheck.length, 'should get cookies from checkSession() after loadSession()')
cookieFromCheck = cookiesFromCheck.filter(c => EXPECTED_NAME_REGEX.test(c.name))
cookieFromCheck = cookiesFromCheck.filter(c => EXPECTED_NAME_REGEX.test(c['name']))
t.truthy(cookieFromCheck.length, 'should has cookie after filtered after loadSession()')
t.is(cookieFromCheck[0].name, EXPECTED_COOKIE.name, 'cookie from checkSession() return should has expected cookie after loadSession')
t.is(cookieFromCheck[0]['name'], EXPECTED_COOKIE.name, 'cookie from checkSession() return should has expected cookie after loadSession')
await b.quit()
t.pass('quited')
......
import { test } from 'ava'
import {
PuppetWeb
, log
// PuppetWeb
// , log
} from '../../'
import util from 'util'
import {
Event
, PuppetWeb
} from '../../src/puppet-web/'
// import util from 'util'
const PORT = process.env.WECHATY_PORT || 58788
// const PORT = process.env.WECHATY_PORT || 58788
const PROFILE = 'unit-test-session.wechaty.json'
// const PuppetWeb = require('../../src/puppet-web')
const PuppetWebEvent = PuppetWeb.Event // require('../../src/puppet-web/event')
const PuppetWebEvent = Event // require('../../src/puppet-web/event')
test('Puppet Web Event smoking test', async t => {
let pw = new PuppetWeb({profile: PROFILE})
......
......@@ -6,11 +6,11 @@ import {
, log
} from '../../'
import util from 'util'
import retryPormise from 'retry-promise'
import EventEmitter from 'events'
// import * as util from 'util'
// const retryPormise = require('retry-promise').default
// import { EventEmitter } from 'events'
import { spy } from 'sinon'
// import { spy } from 'sinon'
test('Puppet Web Self Message Identification', t => {
const p = new PuppetWeb()
......@@ -24,7 +24,7 @@ test('Puppet Web Self Message Identification', t => {
})
/**
* the reason why use `test.serial` here is:
* the reason why use `test.serial` here is:
* static variable `Contact.puppet` will be changed
* when `PuppteWeb.init()` and `PuppteWeb.quit()`
*/
......
import { test } from 'ava'
import https from 'https'
import sinon from 'sinon'
import * as https from 'https'
import * as sinon from 'sinon'
import {
PuppetWeb
, Message
, log
// PuppetWeb
// , Message
log
} from '../../'
const PuppetWebServer = PuppetWeb.Server //require('../../src/puppet-web/server')
import {
// PuppetWeb
Server
} from '../../src/puppet-web/'
const PuppetWebServer = Server //require('../../src/puppet-web/server')
const PORT = 48788
test('PuppetWebServer basic tests', async t => {
const s = new PuppetWebServer({port: PORT})
const s = new PuppetWebServer(PORT)
t.is(typeof s, 'object', 'PuppetWebServer instance created')
let httpsServer = null
// co(function* () {
const spy = sinon.spy()
const express = s.createExpress()
t.is(typeof express, 'function', 'create express')
httpsServer = s.createHttpsServer(express)
httpsServer = await s.createHttpsServer(express)
t.is(typeof httpsServer, 'object', 'create https server')
httpsServer.on('close', _ => spy('onClose'))
......@@ -58,7 +63,7 @@ test('PuppetWebServer basic tests', async t => {
})
test('PuppetWebServer smoke testing', async t => {
const server = new PuppetWebServer({port: PORT})
const server = new Server(PORT)
t.truthy(server, 'new server instance')
// co(function* () {
......
import { test } from 'ava'
import util from 'util'
import retryPromise from 'retry-promise'
// import * as util from 'util'
const retryPromise = require('retry-promise').default
import {
PuppetWeb
, log
log
} from '../../'
import {
PuppetWeb
, Watchdog
} from '../../src/puppet-web/'
// const co = require('co')
// const util = require('util')
// const test = require('tape')
......@@ -18,7 +22,7 @@ import {
const PROFILE = 'unit-test-session.wechaty.json'
// const PuppetWeb = require('../../src/puppet-web')
const Watchdog = PuppetWeb.Watchdog // require('../../src/puppet-web/watchdog.js')
// const Watchdog = PuppetWeb.Watchdog // require('../../src/puppet-web/watchdog.js')
test('Puppet Web watchdog timer', async t => {
const pw = new PuppetWeb({profile: PROFILE})
......@@ -29,9 +33,9 @@ test('Puppet Web watchdog timer', async t => {
// co(function* () {
const origLogLevel = log.level
if (log.level === 'info') {
log.level = 'silent'
const origLogLevel = log.level()
if (log.level() === 'info') {
log.level('silent')
t.pass('set log.level = silent to mute log when watchDog reset wechaty temporary')
}
......@@ -59,7 +63,7 @@ test('Puppet Web watchdog timer', async t => {
const dong = await waitDing(EXPECTED_DING_DATA)
t.is(dong, EXPECTED_DING_DATA, 'should get EXPECTED_DING_DATA from ding after watchdog reset, and restored log level')
log.level = origLogLevel
log.level(origLogLevel)
await pw.quit()
// })
......
import { test } from 'ava'
import { Wechaty, Puppet } from '../'
// const test = require('tape')
// const Wechaty = require('../')
// const Puppet = Wechaty.Puppet
import { PuppetWeb } from '../'
test('Puppet smoking test', t => {
const p = new Puppet()
const p = new PuppetWeb()
t.is(p.targetState(), 'dead', 'should be dead target state after instanciate')
t.is(p.currentState(), 'dead', 'should be dead current state after instanciate')
p.targetState('live')
......@@ -14,5 +11,4 @@ test('Puppet smoking test', t => {
t.is(p.targetState(), 'live', 'should be live target state after set')
t.is(p.currentState(), 'birthing', 'should be birthing current state after set')
// t.end()
})
import { test } from 'ava'
import {
Room
, Wechaty
// , Wechaty
, Config
, Message
// , Message
, Contact
, Puppet
// , Puppet
, PuppetWeb
, log
// , log
} from '../'
Config.puppetInstance(new PuppetWeb())
......@@ -97,7 +97,8 @@ test('Room smoking test', async t => {
t.is(nick2, EXPECTED.memberNick2, 'should get nick2 from NickName because there is no DisplayName, ')
t.truthy(r.has(contact1), 'should has contact1')
t.falsy(r.has(new Contact('not exist id'), 'should has no this member'))
const noSuchContact = new Contact('not exist id')
t.false(r.has(noSuchContact), 'should has no this member')
const owner = r.owner()
t.true(owner === null || owner instanceof Contact, 'should get Contact instance for owner, or null')
......@@ -116,13 +117,13 @@ test('Room smoking test', async t => {
test('Room static method', async t => {
const room = await Room.find({
name: 'xxx'
topic: 'xxx'
})
t.truthy(room === null, 'should return null before login')
const roomList = await Room.findAll({
name: 'yyy'
topic: 'yyy'
})
t.is(roomList.length, 0, 'should return empty array before login')
......
import { test } from 'ava'
import {
UtilLib
, log
} from '../'
import express from 'express'
import http from 'http'
// 'use strict'
// const co = require('co')
// const test = require('tape')
// const Express = require('express')
// const http = require('http')
// const log = require('../src/brolog-env')
// const UtilLib = require('../src/util-lib')
import * as express from 'express'
// import * as http from 'http'
test('Html smoking test', t => {
const HTML_BEFORE_STRIP = 'Outer<html>Inner</html>'
......@@ -79,27 +68,20 @@ test('Media download smoking test', t => {
})
})
.catch(e => {
t.fail('downloadStream() exception: %s', e.message)
t.fail('downloadStream() exception: ' + e.message)
})
})
test('getPort with free & busy port', async t => {
const PORT = 8788
// co(function* () {
let port = await UtilLib.getPort(PORT)
t.notDeepEqual(port, PORT, 'should not be same port even it is available(to provent conflict between concurrency tests in AVA)')
let port = await UtilLib.getPort(PORT)
t.notDeepEqual(port, PORT, 'should not be same port even it is available(to provent conflict between concurrency tests in AVA)')
const app = express()
const server = app.listen(PORT)
port = await UtilLib.getPort(PORT)
server.close()
t.true(port > PORT, 'should bigger then PORT when it is not availble')
const app = express()
const server = app.listen(PORT)
port = await UtilLib.getPort(PORT)
server.close()
// }).catch(e => {
// t.fail(e)
// }).then(_ => {
// t.end()
// })
t.true(port > PORT, 'should bigger then PORT when it is not availble')
})
import WebDriver from 'selenium-webdriver'
import express from 'express'
import * as http from 'http'
import * as url from 'url'
import * as WebDriver from 'selenium-webdriver'
import * as express from 'express'
import * as http from 'http'
import * as url from 'url'
import Phantomjs from 'phantomjs-prebuilt'
const Phantomjs = require('phantomjs-prebuilt')
import { test } from 'ava'
import { UtilLib, log } from '../'
import { UtilLib } from '../'
test.skip('Phantomjs replace javascript source file content test', async t => {
const phantomjsArgs = [
......@@ -31,7 +31,7 @@ test.skip('Phantomjs replace javascript source file content test', async t => {
.build()
// http://stackoverflow.com/questions/24834403/phantomjs-change-webpage-content-before-evaluating
driver.executePhantomJS(`
;(driver as any).executePhantomJS(`
this.onResourceRequested = function(request, net) {
console.log('REQUEST ' + request.url);
alert('REQUEST ' + request.url);
......@@ -83,7 +83,7 @@ test('Phantomjs http header', async t => {
const app = express()
app.use((req, res, done) => {
//console.log(req.headers)
t.is(req.headers.referer, 'https://wx.qq.com/')
t.is(req.headers['referer'], 'https://wx.qq.com/')
done()
})
......@@ -92,18 +92,18 @@ test('Phantomjs http header', async t => {
})
const serverUrl = 'http://127.0.0.1:' + port
const options = url.parse(serverUrl)
const options: url.Url = url.parse(serverUrl)
options.headers = {
options['headers'] = {
Accept: 'image/webp,image/*,*/*;q=0.8'
, 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'
, Referer: 'https://wx.qq.com/'
, 'Accept-Encoding': 'gzip, deflate, sdch'
, 'Accept-Language': 'zh-CN,zh;q=0.8'
}
options.agent = http.globalAgent
options['agent'] = http.globalAgent
const req = http.request(options, (res) => {
const req = http.request(options as any as http.RequestOptions, (res) => {
// console.log(`STATUS: ${res.statusCode}`);
// console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
// res.setEncoding('utf8');
......
import path from 'path'
// import * as path from 'path'
import { test } from 'ava'
import { test } from 'ava'
// import {
// Browser
// , By
// } from 'selenium-webdriver'
import {
Browser
, By
} from 'selenium-webdriver'
import {
PuppetWeb
, log
} from '../'
// 'use strict'
// const path = require('path')
// const co = require('co')
// const test = require('tape')
// const log = require('../src/brolog-env')
// const WebDriver = require('selenium-webdriver')
// const Browser = WebDriver.Browser
// const By = WebDriver.By
// const PuppetWebBrowser = require('../src/puppet-web/browser')
// const PuppetWebBridge = require('../src/puppet-web/bridge')
Bridge as PuppetWebBridge
, Browser as PuppetWebBrowser
, PuppetWeb
} from '../src/puppet-web/'
/**
* WHY USE test.serial
*
*
* serial here is because we are checking browser pids inside test.
* if 2 tests run parallel in the same process,
* there will have race conditions for the conflict of `getBrowserPids()`
*/
*/
test.serial('WebDriver process create & quit test', async t => {
// co(function* () {
const b = new PuppetWeb.Browser()
const b = new PuppetWebBrowser()
t.truthy(b, 'should instanciate a browser')
await b.init()
......@@ -58,6 +43,7 @@ test.serial('WebDriver process create & quit test', async t => {
t.is(pids.length, 0, 'no driver process after quit')
}
return
// })
// .catch(e => t.fail(e))
// .then(_ => t.end())
......@@ -66,11 +52,11 @@ test.serial('WebDriver process create & quit test', async t => {
})
test.serial('WebDriver smoke testing', async t => {
const wb = new PuppetWeb.Browser()
const wb = new PuppetWebBrowser()
t.truthy(wb, 'Browser instnace')
const mockPuppet = {browser: wb}
const bridge = new PuppetWeb.Bridge({puppet: mockPuppet})
const mockPuppet = <PuppetWeb>{browser: wb}
const bridge = new PuppetWebBridge(mockPuppet, 8788)
t.truthy(bridge, 'Bridge instnace')
var driver // for help function `execute`
......@@ -121,7 +107,7 @@ test.serial('WebDriver smoke testing', async t => {
return
//////////////////////////////////
function driverExecute() {
function driverExecute(arg1: any, arg2?: any) {
return driver.executeScript.apply(driver, arguments)
}
})
import { test } from 'ava'
import { Wechaty } from '../'
import { test } from 'ava'
import {
Config
, Contact
, IoClient
, Message
, Puppet
, PuppetWeb
, Room
, Wechaty
, log
, version
} from '../'
test('Wechaty Framework', t => {
t.truthy(Wechaty , 'should export Wechaty')
t.truthy(Wechaty.Message , 'should export Wechaty.Message')
t.truthy(Wechaty.Contact , 'should export Wechaty.Contact')
t.truthy(Wechaty.Room , 'should export Wechaty.Room')
t.truthy(Wechaty , 'should export Wechaty')
t.truthy(Message , 'should export Message')
t.truthy(Contact , 'should export Contact')
t.truthy(Room , 'should export Room')
t.truthy(Wechaty.IoClient , 'should export Wechaty.IoClient')
t.truthy(IoClient , 'should export IoClient')
t.truthy(Wechaty.log , 'should export Wechaty.log')
t.truthy(log , 'should export log')
t.truthy(Wechaty.Puppet , 'should export Wechaty.Puppet')
t.truthy(Wechaty.PuppetWeb , 'should export Wechaty.PuppetWeb')
t.truthy(Puppet , 'should export Puppet')
t.truthy(PuppetWeb , 'should export PuppetWeb')
const bot = new Wechaty()
t.is(bot.version(true), Wechaty.version, 'should export version in package.json')
const bot = Wechaty.instance()
t.is(bot.version(true), version, 'should export version in package.json')
})
test('Wechaty Config setting', t => {
const Config = Wechaty.Config
t.truthy(Config , 'should export Wechaty.Config')
t.truthy(Config , 'should export Config')
t.truthy(Config.DEFAULT_HEAD , 'should has DEFAULT_HEAD')
t.truthy(Config.DEFAULT_PUPPET , 'should has DEFAULT_PUPPET')
t.truthy(Config.DEFAULT_PORT , 'should has DEFAULT_PORT')
......
......@@ -19,12 +19,11 @@
, "exclude": [
"node_modules"
, "dist"
, "**/*.spec.ts"
]
, "include": [
"src/**/*.ts"
, "bin/*.ts"
"bin/*.ts"
, "example/*.ts"
// , "test/*.ts"
, "src/**/*.ts"
, "test/**/*.spec.ts"
]
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册