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

fix sloc file glob bug in win32

上级 1af458b5
......@@ -23,7 +23,7 @@
"eslint": "eslint \"{bin,example,src,test}/**/*.js\"",
"tslint": "tslint \"{bin,example,src,test}/**/*.ts\" && tsc --noEmit",
"pretest": "npm run lint && npm run clean && npm run build",
"sloc": "sloc {bin,example,script,src,test,index.ts} --details --format cli-table --keys total,source,comment && sloc {bin,example,script,src,test,index.ts}",
"sloc": "sloc \"{bin,example,src,test,index.ts}\" --details --format cli-table --keys total,source,comment && sloc \"{bin,example,src,test,index.ts}\"",
"test": "npm run test:chrome",
"posttest": "npm run clean && npm run sloc",
"test:phantomjs": "cross-env LC_ALL=C WECHATY_LOG=info WECHATY_HEAD=phantomjs ava --timeout=10m \"dist/test/*.spec.js\"",
......
......@@ -9,6 +9,8 @@ import {
Brolog
} from 'brolog'
export let log: Brolog
const level = process.env['WECHATY_LOG']
// use a typescript switch/case/default: never to replace regex
......@@ -16,16 +18,13 @@ const levelRegexStr = 'silly|verbose|info|warn|error|silent'
const levelRegex = new RegExp(levelRegexStr, 'i')
if (levelRegex.test(level)) {
// log.level = level.toLowerCase()
Brolog.level(level)
Brolog.silly('Brolog', 'WECHATY_LOG set level to %s', level)
}
else if (level) {
Brolog.warn('Brolog', 'env WECHATY_LOG(%s) must be one of silly|verbose|info|warn|error|silent', level)
log = new Brolog(level)
log.silly('Brolog', 'WECHATY_LOG set level to %s', level)
} else {
log = new Brolog()
log.warn('Brolog', 'env WECHATY_LOG(%s) must be one of silly|verbose|info|warn|error|silent', level)
}
export {
Brolog
, Brolog as log
}
export { Brolog }
export default Brolog
export default log
......@@ -23,22 +23,20 @@ import Wechaty from './wechaty'
import brolog from './brolog-env'
export class IoClient {
// private _targetState
// private _currentState
private state = new StateMonitor<'online', 'offline'>('IoClient', 'offline')
private wechaty: Wechaty | null
private io: Io | null
private state = new StateMonitor<'online', 'offline'>('IoClient', 'offline')
constructor(
private token: string = Config.token || Config.DEFAULT_TOKEN
, private log = brolog
, private log: any = brolog
) {
if (!log) {
const e = new Error('constructor() log(npmlog/brolog) must be set')
throw e
}
this.log = log
this.log.verbose('IoClient', 'constructor() with token: %s', token)
if (!token) {
......@@ -46,38 +44,16 @@ export class IoClient {
this.log.error('IoClient', e.message)
throw e
}
// this.targetState('disconnected')
// this.currentState('disconnected')
// this.state.target('offline')
// this.state.current('offline')
}
// // targetState : 'connected' | 'disconnected'
// private targetState(newState?) {
// if (newState) {
// this.log.verbose('IoClient', 'targetState(%s)', newState)
// this._targetState = newState
// }
// return this._targetState
// }
// // currentState : 'connecting' | 'connected' | 'disconnecting' | 'disconnected'
// private currentState(newState?) {
// if (newState) {
// this.log.verbose('IoClient', 'currentState(%s)', newState)
// this._currentState = newState
// }
// return this._currentState
// }
public async init(): Promise<IoClient> {
this.log.verbose('IoClient', 'init()')
// if (/connecting|disconnecting/.test(this.currentState())) {
if (this.state.inprocess()) {
this.log.warn('IoClient', 'init() with state.inprocess(), skip init')
return Promise.reject('pending')
const e = new Error('state.inprocess(), skip init')
this.log.warn('IoClient', 'init() with %s', e.message)
throw e
}
// this.targetState('connected')
......
......@@ -148,8 +148,8 @@ export class BrowserCookie {
await new Promise((resolve, reject) => {
fs.readFile(storeFile, (err, jsonStr) => {
if (err) {
if (err) { log.silly('PuppetWebBrowserCookie', 'load(%s) skipped because error code: %s', this.storeFile, err.code) }
return reject(new Error('error code:' + err.code))
log.verbose('PuppetWebBrowserCookie', 'load(%s) skipped because error code: %s', this.storeFile, err.code)
return // fail safe
}
const cookies = JSON.parse(jsonStr.toString())
......@@ -165,6 +165,9 @@ export class BrowserCookie {
})
})
})
return
}
/**
......
......@@ -97,11 +97,31 @@ export class BrowserDriver {
const customChrome = Capabilities.chrome()
.set('chromeOptions', options)
return new Builder()
.setAlertBehavior('ignore')
.forBrowser('chrome')
.withCapabilities(customChrome)
.build()
/**
* XXX when will Builder().build() throw exception???
*/
let driver
let ttl = 3
let err
while (!driver && ttl--) {
try {
driver = new Builder()
.setAlertBehavior('ignore')
.forBrowser('chrome')
.withCapabilities(customChrome)
.build()
} catch (e) {
log.warn('PuppetWebBrowserDriver', 'getChromeDriver() exception: %s, retry ttl: %d', e.message, ttl)
err = e
}
}
if (driver) {
return driver
}
throw err
}
private getPhantomJsDriver(): WebDriver {
......
......@@ -33,9 +33,9 @@ export type BrowserSetting = {
export class Browser extends EventEmitter {
private cookie: BrowserCookie
public driver: BrowserDriver
public state = new StateMonitor<'open', 'close'>('Browser', 'close')
public driver: BrowserDriver
constructor(private setting: BrowserSetting = {
head: Config.head
......@@ -44,11 +44,6 @@ export class Browser extends EventEmitter {
super()
log.verbose('PuppetWebBrowser', 'constructor() with head(%s) sessionFile(%s)', setting.head, setting.sessionFile)
// this.targetState('close')
// this.currentState('close')
// this.state.target('close')
// this.state.current('close')
this.driver = new BrowserDriver(this.setting.head)
this.cookie = new BrowserCookie(this.driver, this.setting.sessionFile)
}
......
......@@ -193,15 +193,13 @@ export class PuppetWeb extends Puppet {
// if (this.targetState() !== 'live') {
if (this.state.target() !== 'live') {
log.warn('PuppetWeb', 'initBrowser() found state.target()) != live, no init anymore')
// return Promise.resolve('skipped')
return Promise.reject('skipped')
const e = new Error('found state.target()) != live, no init anymore')
log.warn('PuppetWeb', 'initBrowser() %s', e.message)
throw e
}
// return co.call(this, function* () {
try {
await browser.init()
// }).catch(e => {
} catch (e) {
log.error('PuppetWeb', 'initBrowser() exception: %s', e.message)
throw e
......@@ -225,17 +223,18 @@ export class PuppetWeb extends Puppet {
return Promise.reject(errMsg)
}
await bridge.init()
.catch(e => {
if (!this.browser) {
log.warn('PuppetWeb', 'initBridge() without browser?')
} else if (this.browser.dead()) {
log.warn('PuppetWeb', 'initBridge() found browser dead, wait it to restore')
} else {
log.error('PuppetWeb', 'initBridge() exception: %s', e.message)
throw e
}
})
try {
await bridge.init()
} catch (e) {
if (!this.browser) {
log.warn('PuppetWeb', 'initBridge() without browser?')
} else if (this.browser.dead()) {
log.warn('PuppetWeb', 'initBridge() found browser dead, wait it to restore')
} else {
log.error('PuppetWeb', 'initBridge() exception: %s', e.message)
throw e
}
}
return
}
......
......@@ -22,7 +22,7 @@ export class StateMonitor <A, B>{
private _stable: boolean
constructor(private _client: string, initState: A|B) {
log.verbose('StateMonitor', 'constructor(%s, %s)', _client, initState)
log.silly('StateMonitor', 'constructor(%s, %s)', _client, initState)
this._target = initState
this._current = initState
......
......@@ -128,7 +128,7 @@ class UtilLib {
log.verbose('UtilLib', 'getPort(%d) return: %d'
, port
, okPort
)
)
resolve(okPort)
})
})
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册