Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
.Veneno.
wechaty
提交
e9930667
W
wechaty
项目概览
.Veneno.
/
wechaty
与 Fork 源项目一致
Fork自
wechaty / wechaty
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
W
wechaty
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
e9930667
编写于
4月 23, 2018
作者:
Huan (李卓桓)
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor file structor
上级
a9775b22
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
78 addition
and
201 deletion
+78
-201
package.json
package.json
+1
-0
src/clone-class.spec.ts
src/clone-class.spec.ts
+0
-71
src/clone-class.ts
src/clone-class.ts
+0
-21
src/contact.spec.ts
src/contact.spec.ts
+0
-0
src/puppet-web/bridge.spec.ts
src/puppet-web/bridge.spec.ts
+69
-0
src/puppet-web/event.spec.ts
src/puppet-web/event.spec.ts
+2
-2
src/puppet-web/puppet-web.spec.ts
src/puppet-web/puppet-web.spec.ts
+0
-0
src/puppet-web/puppet-web.ts
src/puppet-web/puppet-web.ts
+4
-4
src/room.spec.ts
src/room.spec.ts
+0
-0
src/wechaty.spec.ts
src/wechaty.spec.ts
+0
-0
src/wechaty.ts
src/wechaty.ts
+2
-2
tests/puppet-web/bridge.spec.ts
tests/puppet-web/bridge.spec.ts
+0
-101
未找到文件。
package.json
浏览文件 @
e9930667
...
...
@@ -101,6 +101,7 @@
"
@types/ws
"
:
"
^4.0.1
"
,
"
bl
"
:
"
^1.2.0
"
,
"
brolog
"
:
"
^1.2.0
"
,
"
clone-class
"
:
"
^0.4.1
"
,
"
cuid
"
:
"
^2.1.1
"
,
"
hot-import
"
:
"
^0.1.0
"
,
"
mime
"
:
"
^2.2.0
"
,
...
...
src/clone-class.spec.ts
已删除
100755 → 0
浏览文件 @
a9775b22
#!/usr/bin/env ts-node
/**
* Wechaty - https://github.com/chatie/wechaty
*
* @copyright 2016-2018 Huan LI <zixia@zixia.net>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// tslint:disable:no-shadowed-variable
import
*
as
test
from
'
blue-tape
'
// import * as sinon from 'sinon'
import
cloneClass
from
'
./clone-class
'
class
FixtureClass
{
public
static
staticNumber
:
number
public
static
staticMethod
(
n
:
number
)
{
this
.
staticNumber
=
n
}
constructor
(
public
i
:
number
,
public
j
:
number
,
)
{
//
}
public
sum
()
{
return
this
.
i
+
this
.
j
+
(
this
.
constructor
as
any
).
staticNumber
}
}
const
EXPECTED_NUMBER1
=
1
const
EXPECTED_NUMBER2
=
2
test
(
'
cloneClass smoke testing
'
,
async
t
=>
{
// tslint:disable-next-line:variable-name
const
NewClass1
=
cloneClass
(
FixtureClass
)
// tslint:disable-next-line:variable-name
const
NewClass2
=
cloneClass
(
FixtureClass
)
t
.
notEqual
(
NewClass1
,
NewClass2
,
'
NewClass1 should different with NewClass2
'
)
t
.
notEqual
(
NewClass1
,
FixtureClass
,
'
NewClass1 should different with FixtureClass
'
)
NewClass1
.
staticMethod
(
EXPECTED_NUMBER1
)
t
.
equal
(
NewClass1
.
staticNumber
,
EXPECTED_NUMBER1
,
'
should set static number to EXPECTED_NUMBER1
'
)
NewClass2
.
staticMethod
(
EXPECTED_NUMBER2
)
t
.
equal
(
NewClass2
.
staticNumber
,
EXPECTED_NUMBER2
,
'
should set static number to EXPECTED_NUMBER2
'
)
const
nc1
=
new
NewClass1
(
EXPECTED_NUMBER1
,
EXPECTED_NUMBER2
)
const
nc2
=
new
NewClass2
(
EXPECTED_NUMBER1
,
EXPECTED_NUMBER2
)
t
.
ok
(
nc1
instanceof
FixtureClass
,
'
nc1 should instanceof FixtureClass
'
)
t
.
ok
(
nc1
instanceof
NewClass1
,
'
nc1 should instanceof NewClass1
'
)
t
.
equal
(
nc1
.
sum
(),
EXPECTED_NUMBER1
+
EXPECTED_NUMBER1
+
EXPECTED_NUMBER2
,
'
should sum right for 1 + 1 + 2
'
)
t
.
equal
(
nc2
.
sum
(),
EXPECTED_NUMBER2
+
EXPECTED_NUMBER1
+
EXPECTED_NUMBER2
,
'
should sum right for 2 + 1 + 2
'
)
})
src/clone-class.ts
已删除
100644 → 0
浏览文件 @
a9775b22
/**
* Clone Class for easy savig Information into Static Properties
* https://github.com/Chatie/wechaty/issues/518
*/
// https://github.com/Microsoft/TypeScript/issues/10262
// https://github.com/Microsoft/TypeScript/pull/13743
export
type
Constructor
<
T
>
=
new
(...
args
:
any
[])
=>
T
// tslint:disable-next-line:variable-name
export
function
cloneClass
<
T
extends
Constructor
<
{}
>>
(
OrignalClass
:
T
):
T
{
class
NewClass
extends
OrignalClass
{
constructor
(...
args
:
any
[])
{
super
(...
arguments
)
}
}
return
NewClass
as
any
as
T
}
export
default
cloneClass
tests
/contact.spec.ts
→
src
/contact.spec.ts
浏览文件 @
e9930667
文件已移动
src/puppet-web/bridge.spec.ts
浏览文件 @
e9930667
...
...
@@ -26,6 +26,7 @@ import * as test from 'blue-tape'
import
{
launch
,
}
from
'
puppeteer
'
import
{
spy
}
from
'
sinon
'
import
Profile
from
'
../profile
'
...
...
@@ -178,3 +179,71 @@ test('clickSwitchAccount()', async t => {
t
.
equal
(
clicked
,
false
,
'
should no button found
'
)
})
})
test
(
'
retryPromise()
'
,
async
t
=>
{
const
EXPECTED_RESOLVE
=
'
Okey
'
const
EXPECTED_REJECT
=
'
NotTheTime
'
function
delayedFactory
(
timeout
)
{
const
startTime
=
Date
.
now
()
return
function
()
{
const
nowTime
=
Date
.
now
()
if
(
nowTime
-
startTime
>
timeout
)
{
return
Promise
.
resolve
(
EXPECTED_RESOLVE
)
}
return
Promise
.
reject
(
EXPECTED_REJECT
)
}
}
const
thenSpy
=
spy
()
const
retryPromise
=
require
(
'
retry-promise
'
).
default
const
delay500
=
delayedFactory
(
500
)
await
retryPromise
({
max
:
1
,
backoff
:
1
},
function
()
{
return
delay500
()
}).
catch
(
e
=>
{
thenSpy
(
e
)
})
t
.
true
(
thenSpy
.
withArgs
(
EXPECTED_REJECT
).
calledOnce
,
'
should got EXPECTED_REJECT when wait not enough
'
)
thenSpy
.
resetHistory
()
const
anotherDelay50
=
delayedFactory
(
50
)
await
retryPromise
({
max
:
6
,
backoff
:
10
},
function
()
{
return
anotherDelay50
()
})
.
then
(
r
=>
{
thenSpy
(
r
)
})
t
.
true
(
thenSpy
.
withArgs
(
EXPECTED_RESOLVE
).
calledOnce
,
'
should got EXPECTED_RESOLVE when wait enough
'
)
})
declare
const
WechatyBro
test
(
'
WechatyBro.ding()
'
,
async
t
=>
{
const
profile
=
new
Profile
(
Math
.
random
().
toString
(
36
).
substr
(
2
,
5
))
const
bridge
=
new
Bridge
({
profile
,
})
t
.
ok
(
bridge
,
'
should instanciated a bridge
'
)
try
{
await
bridge
.
init
()
t
.
pass
(
'
should init Bridge
'
)
const
retDing
=
await
bridge
.
evaluate
(()
=>
{
return
WechatyBro
.
ding
()
})
as
any
as
string
t
.
is
(
retDing
,
'
dong
'
,
'
should got dong after execute WechatyBro.ding()
'
)
const
retCode
=
await
bridge
.
proxyWechaty
(
'
loginState
'
)
t
.
is
(
typeof
retCode
,
'
boolean
'
,
'
should got a boolean after call proxyWechaty(loginState)
'
)
await
bridge
.
quit
()
t
.
pass
(
'
b.quit()
'
)
}
catch
(
err
)
{
t
.
fail
(
'
exception:
'
+
err
.
message
)
}
finally
{
profile
.
destroy
()
}
})
tests
/puppet-web/event.spec.ts
→
src
/puppet-web/event.spec.ts
浏览文件 @
e9930667
...
...
@@ -22,12 +22,12 @@ import * as test from 'blue-tape'
// tslint:disable:no-shadowed-variable
// import * as sinon from 'sinon'
import
Profile
from
'
../
../src/
profile
'
import
Profile
from
'
../profile
'
import
{
// Event,
PuppetWeb
,
}
from
'
.
./../src/puppet-web/
'
}
from
'
.
/puppet-web
'
test
(
'
Puppet Web Event smoke testing
'
,
async
t
=>
{
const
pw
=
new
PuppetWeb
({
...
...
tests
/puppet-web/puppet-web.spec.ts
→
src
/puppet-web/puppet-web.spec.ts
浏览文件 @
e9930667
文件已移动
src/puppet-web/puppet-web.ts
浏览文件 @
e9930667
...
...
@@ -16,15 +16,15 @@
* limitations under the License.
*
*/
import
cloneClass
from
'
clone-class
'
import
{
ThrottleQueue
,
}
from
'
rx-queue
'
import
{
Watchdog
,
WatchdogFood
,
}
from
'
watchdog
'
import
{
ThrottleQueue
,
}
from
'
rx-queue
'
import
cloneClass
from
'
../clone-class
'
import
{
config
,
log
,
...
...
tests
/room.spec.ts
→
src
/room.spec.ts
浏览文件 @
e9930667
文件已移动
tests
/wechaty.spec.ts
→
src
/wechaty.spec.ts
浏览文件 @
e9930667
文件已移动
src/wechaty.ts
浏览文件 @
e9930667
...
...
@@ -20,13 +20,13 @@
import
*
as
cuid
from
'
cuid
'
import
*
as
os
from
'
os
'
import
StateSwitch
from
'
state-switch
'
import
cloneClass
from
'
clone-class
'
import
{
callerResolve
,
hotImport
,
}
from
'
hot-import
'
import
StateSwitch
from
'
state-switch
'
import
cloneClass
from
'
./clone-class
'
import
{
config
,
log
,
...
...
tests/puppet-web/bridge.spec.ts
已删除
100755 → 0
浏览文件 @
a9775b22
#!/usr/bin/env ts-node
/**
* Wechaty - https://github.com/chatie/wechaty
*
* @copyright 2016-2018 Huan LI <zixia@zixia.net>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
// tslint:disable:no-shadowed-variable
import
*
as
test
from
'
blue-tape
'
// import * as sinon from 'sinon'
// import { log } from '../../src/config'
// log.level('silly')
import
Profile
from
'
../../src/profile
'
import
Bridge
from
'
../../src/puppet-web/bridge
'
import
{
spy
}
from
'
sinon
'
test
(
'
retryPromise()
'
,
async
t
=>
{
const
EXPECTED_RESOLVE
=
'
Okey
'
const
EXPECTED_REJECT
=
'
NotTheTime
'
function
delayedFactory
(
timeout
)
{
const
startTime
=
Date
.
now
()
return
function
()
{
const
nowTime
=
Date
.
now
()
if
(
nowTime
-
startTime
>
timeout
)
{
return
Promise
.
resolve
(
EXPECTED_RESOLVE
)
}
return
Promise
.
reject
(
EXPECTED_REJECT
)
}
}
const
thenSpy
=
spy
()
const
retryPromise
=
require
(
'
retry-promise
'
).
default
const
delay500
=
delayedFactory
(
500
)
await
retryPromise
({
max
:
1
,
backoff
:
1
},
function
()
{
return
delay500
()
}).
catch
(
e
=>
{
thenSpy
(
e
)
})
t
.
true
(
thenSpy
.
withArgs
(
EXPECTED_REJECT
).
calledOnce
,
'
should got EXPECTED_REJECT when wait not enough
'
)
thenSpy
.
resetHistory
()
const
anotherDelay50
=
delayedFactory
(
50
)
await
retryPromise
({
max
:
6
,
backoff
:
10
},
function
()
{
return
anotherDelay50
()
})
.
then
(
r
=>
{
thenSpy
(
r
)
})
t
.
true
(
thenSpy
.
withArgs
(
EXPECTED_RESOLVE
).
calledOnce
,
'
should got EXPECTED_RESOLVE when wait enough
'
)
})
declare
const
WechatyBro
test
(
'
WechatyBro.ding()
'
,
async
t
=>
{
const
profile
=
new
Profile
(
Math
.
random
().
toString
(
36
).
substr
(
2
,
5
))
const
bridge
=
new
Bridge
({
profile
,
})
t
.
ok
(
bridge
,
'
should instanciated a bridge
'
)
try
{
await
bridge
.
init
()
t
.
pass
(
'
should init Bridge
'
)
const
retDing
=
await
bridge
.
evaluate
(()
=>
{
return
WechatyBro
.
ding
()
})
as
any
as
string
t
.
is
(
retDing
,
'
dong
'
,
'
should got dong after execute WechatyBro.ding()
'
)
const
retCode
=
await
bridge
.
proxyWechaty
(
'
loginState
'
)
t
.
is
(
typeof
retCode
,
'
boolean
'
,
'
should got a boolean after call proxyWechaty(loginState)
'
)
await
bridge
.
quit
()
t
.
pass
(
'
b.quit()
'
)
}
catch
(
err
)
{
t
.
fail
(
'
exception:
'
+
err
.
message
)
}
finally
{
profile
.
destroy
()
}
})
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录