🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

sojs-test

Package Overview
Dependencies
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

sojs-test - npm Package Compare versions

Comparing version
0.0.5
to
0.0.6
+1
-1
package.json
{
"name": "sojs-test",
"version": "0.0.5",
"version": "0.0.6",
"description": " Sojs test framework",

@@ -5,0 +5,0 @@ "homepage": "http://www.develop.cc",

@@ -1,49 +0,2 @@

# oojs service framework
# Sojs test framework
===================================
node��˷���ͨ�ÿ��. ʹ�����Ӷ����ģ��ʵ�ָ߲����ĺ�˷���.
��ܳ�����Э���, �����ڲ��޸��κ�ҵ���߼�����������, ֧�ָ����Э��.
Ŀǰ�汾ʵ����Baidu-RpcЭ��: ���� NsHead+Protobuf ��socketͨѶ
---
#��װ
1.��װnodejs, ����:
```
https://nodejs.org/
```
2.����Ŀ��Ŀ¼��,ִ��:
```
npm install
```
����������类ǽ�����, �����Ժ�����.
#����
* ��������
����Ŀ��Ŀ¼��, ����:
```
node src/Demo/Protocol/Rpc/Master
```
* ���е�Ԫ����
����Ŀ��Ŀ¼��, ����:
```
node tool/test
```
* ���д��븲���ʲ���
����Ŀ��Ŀ¼��, ����:
```
node tool/coverage
```
������Ϻ�, �������ļ���:
```
test/coverage
```
�������˵�Ԫ���ԵĽ��

@@ -5,5 +5,5 @@ require('sojs');

name: 'sojs-test-module',
'$sojs-utility-url-module': function () {
'$sojs-test-module': function () {
sojs.setPath({'sojs.test': __dirname});
}
});

@@ -5,3 +5,2 @@ /**

*/
sojs.define({

@@ -11,3 +10,4 @@ name: 'benchmark',

deps: {
fileClass: 'sojs.test.file'
fileClass: 'sojs.test.file',
benchmarkClass: require('benchmark')
},

@@ -14,0 +14,0 @@

@@ -5,3 +5,2 @@ /**

*/
sojs.define({

@@ -18,4 +17,4 @@ name: 'coverage',

// 启动单测, 测试单测的代码覆盖率, 结果放到 test/coverage 目录下
cli.runToCompletion(['cover', 'tool/test.js', '--dir=test/coverage']);
cli.runToCompletion(['cover', 'tool/unit.js', '--dir=test/coverage']);
}
});

@@ -5,3 +5,2 @@ /**

*/
sojs.define({

@@ -8,0 +7,0 @@ name: 'unit',

/**
* milestone1-no-extension:
* node-url.parse(url, true, false) x 116,351 ops/sec ±4.90% (84 runs sampled)
* oojs-utility-url.parse(url, true, false) x 572,041 ops/sec ±4.08% (89 runs sampled)
*
* milestone2-with-extension:
* node-url.parse(url, true, false) x 117,038 ops/sec ±4.05% (81 runs sampled)
* oojs-utility-url.parse(url, true, false) x 507,578 ops/sec ±2.84% (88 runs sampled)
*
*/
require('node-oojs');
var Benchmark = require('benchmark');
var suite = new Benchmark.Suite();
var nodeUrlClass = require('url');
var urlClass = oojs.using('oojs.utility.url');
var urlParse = require('url-parse');
var testUrl = 'http://www.aaa.com:8080/b/c/d.html?e=1&f=2#ggg';
/**
// add tests
suite.add('1', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('2', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('3', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('4', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('5', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).on('cycle', function (event) {
console.log(String(event.target));
}).run({
'async': true,
'initCount': 2
});
*/
// add tests
suite.add('node-url.parse(url, true, false)', {
fn: function () {
var result = nodeUrlClass.parse(testUrl);
}
}).add('oojs-utility-url-1', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('oojs-utility-url-2', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('oojs-utility-url-3', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('oojs-utility-url-4', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('oojs-utility-url-5', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('oojs-utility-url-6', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).on('cycle', function (event) {
console.log(String(event.target));
}).run({
'async': true,
'initCount': 2
});
/**
suite.add('node-url.parse(url, true, false)', {
fn: function () {
var result = nodeUrlClass.parse(testUrl);
}
}).add('oojs-utility-url.parse(url, true, false)', {
fn: function () {
var result = urlClass.parse(testUrl);
}
}).add('url-parse', {
fn: function () {
var result = urlParse(testUrl, true);
}
}).on('cycle', function (event) {
console.log(String(event.target));
}).run({
'async': true,
'initCount': 2
});
*/
{"D:\\code\\other\\oojs-utility-url\\tool\\test.js":{"path":"D:\\code\\other\\oojs-utility-url\\tool\\test.js","s":{"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":2,"9":1,"10":1,"11":1,"12":0},"b":{},"f":{"1":1,"2":2,"3":1,"4":1,"5":0},"fnMap":{"1":{"name":"(anonymous_1)","line":20,"loc":{"start":{"line":20,"column":11},"end":{"line":20,"column":23}}},"2":{"name":"(anonymous_2)","line":26,"loc":{"start":{"line":26,"column":20},"end":{"line":26,"column":36}}},"3":{"name":"(anonymous_3)","line":28,"loc":{"start":{"line":28,"column":23},"end":{"line":28,"column":39}}},"4":{"name":"(anonymous_4)","line":33,"loc":{"start":{"line":33,"column":18},"end":{"line":33,"column":38}}},"5":{"name":"(anonymous_5)","line":34,"loc":{"start":{"line":34,"column":31},"end":{"line":34,"column":43}}}},"statementMap":{"1":{"start":{"line":7,"column":0},"end":{"line":7,"column":21}},"2":{"start":{"line":8,"column":0},"end":{"line":8,"column":29}},"3":{"start":{"line":9,"column":0},"end":{"line":9,"column":28}},"4":{"start":{"line":11,"column":0},"end":{"line":39,"column":3}},"5":{"start":{"line":21,"column":8},"end":{"line":21,"column":37}},"6":{"start":{"line":22,"column":8},"end":{"line":22,"column":32}},"7":{"start":{"line":25,"column":8},"end":{"line":30,"column":15}},"8":{"start":{"line":27,"column":16},"end":{"line":27,"column":54}},"9":{"start":{"line":29,"column":16},"end":{"line":29,"column":36}},"10":{"start":{"line":33,"column":8},"end":{"line":37,"column":11}},"11":{"start":{"line":34,"column":12},"end":{"line":36,"column":15}},"12":{"start":{"line":35,"column":16},"end":{"line":35,"column":39}}},"branchMap":{}},"D:\\code\\other\\oojs-utility-url\\src\\oojs\\utility\\url.js":{"path":"D:\\code\\other\\oojs-utility-url\\src\\oojs\\utility\\url.js","s":{"1":1,"2":40,"3":40,"4":40,"5":40,"6":40,"7":40,"8":0,"9":40,"10":0,"11":40,"12":40,"13":36,"14":180,"15":36,"16":36,"17":36,"18":40,"19":39,"20":39,"21":385,"22":385,"23":27,"24":27,"25":358,"26":7,"27":351,"28":78,"29":39,"30":39,"31":39,"32":0,"33":39,"34":40,"35":12,"36":32,"37":32,"38":4,"39":12,"40":7,"41":12,"42":40,"43":7,"44":33,"45":30,"46":40,"47":40,"48":35,"49":35,"50":124,"51":124,"52":9,"53":124,"54":5,"55":10,"56":30,"57":67,"58":57,"59":67,"60":67,"61":124,"62":30,"63":40,"64":40,"65":25,"66":53,"67":53,"68":1,"69":1,"70":52,"71":8,"72":25,"73":11,"74":25,"75":40,"76":40,"77":29,"78":29,"79":29,"80":88,"81":88,"82":9,"83":88,"84":22,"85":22,"86":66,"87":22,"88":22,"89":22,"90":0,"91":0,"92":0,"93":22,"94":22,"95":22,"96":22,"97":13,"98":40,"99":40,"100":35,"101":10,"102":40},"b":{"1":[40,33],"2":[36,4],"3":[36,144],"4":[39,1],"5":[27,358],"6":[7,351],"7":[78,273],"8":[39,0],"9":[12,28],"10":[4,28],"11":[7,5],"12":[7,33],"13":[30,3],"14":[35,5],"15":[9,115],"16":[5,10,30,67],"17":[57,10],"18":[30,94],"19":[25,15],"20":[1,52],"21":[8,44],"22":[11,14],"23":[29,11],"24":[9,79],"25":[22,66],"26":[22,44],"27":[66,53],"28":[22,0],"29":[0,22],"30":[0,0],"31":[13,9],"32":[35,5],"33":[10,25]},"f":{"1":40},"fnMap":{"1":{"name":"(anonymous_1)","line":45,"loc":{"start":{"line":45,"column":11},"end":{"line":45,"column":40}}}},"statementMap":{"1":{"start":{"line":8,"column":0},"end":{"line":233,"column":3}},"2":{"start":{"line":46,"column":8},"end":{"line":46,"column":42}},"3":{"start":{"line":47,"column":8},"end":{"line":47,"column":22}},"4":{"start":{"line":48,"column":8},"end":{"line":48,"column":33}},"5":{"start":{"line":49,"column":8},"end":{"line":49,"column":15}},"6":{"start":{"line":50,"column":8},"end":{"line":50,"column":35}},"7":{"start":{"line":53,"column":8},"end":{"line":53,"column":62}},"8":{"start":{"line":53,"column":54},"end":{"line":53,"column":62}},"9":{"start":{"line":54,"column":8},"end":{"line":54,"column":58}},"10":{"start":{"line":54,"column":52},"end":{"line":54,"column":58}},"11":{"start":{"line":55,"column":8},"end":{"line":55,"column":32}},"12":{"start":{"line":70,"column":8},"end":{"line":78,"column":9}},"13":{"start":{"line":71,"column":12},"end":{"line":77,"column":13}},"14":{"start":{"line":72,"column":16},"end":{"line":76,"column":17}},"15":{"start":{"line":73,"column":20},"end":{"line":73,"column":58}},"16":{"start":{"line":74,"column":20},"end":{"line":74,"column":34}},"17":{"start":{"line":75,"column":20},"end":{"line":75,"column":26}},"18":{"start":{"line":81,"column":8},"end":{"line":107,"column":9}},"19":{"start":{"line":82,"column":12},"end":{"line":82,"column":32}},"20":{"start":{"line":83,"column":12},"end":{"line":96,"column":13}},"21":{"start":{"line":84,"column":16},"end":{"line":84,"column":39}},"22":{"start":{"line":86,"column":16},"end":{"line":95,"column":17}},"23":{"start":{"line":87,"column":20},"end":{"line":87,"column":45}},"24":{"start":{"line":88,"column":20},"end":{"line":88,"column":26}},"25":{"start":{"line":90,"column":21},"end":{"line":95,"column":17}},"26":{"start":{"line":91,"column":20},"end":{"line":91,"column":26}},"27":{"start":{"line":93,"column":21},"end":{"line":95,"column":17}},"28":{"start":{"line":94,"column":20},"end":{"line":94,"column":39}},"29":{"start":{"line":97,"column":12},"end":{"line":97,"column":46}},"30":{"start":{"line":99,"column":12},"end":{"line":104,"column":13}},"31":{"start":{"line":100,"column":16},"end":{"line":100,"column":84}},"32":{"start":{"line":103,"column":16},"end":{"line":103,"column":44}},"33":{"start":{"line":106,"column":12},"end":{"line":106,"column":26}},"34":{"start":{"line":110,"column":8},"end":{"line":121,"column":9}},"35":{"start":{"line":111,"column":12},"end":{"line":116,"column":13}},"36":{"start":{"line":112,"column":16},"end":{"line":112,"column":39}},"37":{"start":{"line":113,"column":16},"end":{"line":115,"column":17}},"38":{"start":{"line":114,"column":20},"end":{"line":114,"column":26}},"39":{"start":{"line":117,"column":12},"end":{"line":119,"column":13}},"40":{"start":{"line":118,"column":16},"end":{"line":118,"column":50}},"41":{"start":{"line":120,"column":12},"end":{"line":120,"column":26}},"42":{"start":{"line":123,"column":8},"end":{"line":129,"column":9}},"43":{"start":{"line":124,"column":12},"end":{"line":124,"column":52}},"44":{"start":{"line":126,"column":13},"end":{"line":129,"column":9}},"45":{"start":{"line":128,"column":12},"end":{"line":128,"column":74}},"46":{"start":{"line":132,"column":8},"end":{"line":132,"column":27}},"47":{"start":{"line":133,"column":8},"end":{"line":159,"column":9}},"48":{"start":{"line":134,"column":12},"end":{"line":134,"column":34}},"49":{"start":{"line":135,"column":12},"end":{"line":158,"column":13}},"50":{"start":{"line":136,"column":16},"end":{"line":136,"column":39}},"51":{"start":{"line":137,"column":16},"end":{"line":139,"column":17}},"52":{"start":{"line":138,"column":20},"end":{"line":138,"column":30}},"53":{"start":{"line":140,"column":16},"end":{"line":153,"column":17}},"54":{"start":{"line":142,"column":24},"end":{"line":142,"column":50}},"55":{"start":{"line":144,"column":24},"end":{"line":144,"column":54}},"56":{"start":{"line":146,"column":24},"end":{"line":146,"column":41}},"57":{"start":{"line":148,"column":24},"end":{"line":150,"column":25}},"58":{"start":{"line":149,"column":28},"end":{"line":149,"column":64}},"59":{"start":{"line":151,"column":24},"end":{"line":151,"column":38}},"60":{"start":{"line":152,"column":24},"end":{"line":152,"column":30}},"61":{"start":{"line":155,"column":16},"end":{"line":157,"column":17}},"62":{"start":{"line":156,"column":20},"end":{"line":156,"column":26}},"63":{"start":{"line":160,"column":8},"end":{"line":160,"column":32}},"64":{"start":{"line":163,"column":8},"end":{"line":178,"column":9}},"65":{"start":{"line":164,"column":12},"end":{"line":173,"column":13}},"66":{"start":{"line":165,"column":16},"end":{"line":165,"column":39}},"67":{"start":{"line":166,"column":16},"end":{"line":172,"column":17}},"68":{"start":{"line":167,"column":20},"end":{"line":167,"column":46}},"69":{"start":{"line":168,"column":20},"end":{"line":168,"column":26}},"70":{"start":{"line":170,"column":21},"end":{"line":172,"column":17}},"71":{"start":{"line":171,"column":20},"end":{"line":171,"column":26}},"72":{"start":{"line":174,"column":12},"end":{"line":176,"column":13}},"73":{"start":{"line":175,"column":16},"end":{"line":175,"column":55}},"74":{"start":{"line":177,"column":12},"end":{"line":177,"column":26}},"75":{"start":{"line":181,"column":8},"end":{"line":181,"column":23}},"76":{"start":{"line":182,"column":8},"end":{"line":220,"column":9}},"77":{"start":{"line":183,"column":12},"end":{"line":183,"column":31}},"78":{"start":{"line":184,"column":12},"end":{"line":184,"column":27}},"79":{"start":{"line":185,"column":12},"end":{"line":219,"column":13}},"80":{"start":{"line":186,"column":16},"end":{"line":186,"column":39}},"81":{"start":{"line":187,"column":16},"end":{"line":189,"column":17}},"82":{"start":{"line":188,"column":20},"end":{"line":188,"column":30}},"83":{"start":{"line":191,"column":16},"end":{"line":218,"column":17}},"84":{"start":{"line":192,"column":20},"end":{"line":192,"column":52}},"85":{"start":{"line":193,"column":20},"end":{"line":193,"column":34}},"86":{"start":{"line":195,"column":21},"end":{"line":218,"column":17}},"87":{"start":{"line":196,"column":20},"end":{"line":213,"column":21}},"88":{"start":{"line":197,"column":24},"end":{"line":197,"column":57}},"89":{"start":{"line":198,"column":24},"end":{"line":211,"column":25}},"90":{"start":{"line":199,"column":28},"end":{"line":206,"column":29}},"91":{"start":{"line":201,"column":32},"end":{"line":201,"column":66}},"92":{"start":{"line":205,"column":32},"end":{"line":205,"column":82}},"93":{"start":{"line":210,"column":28},"end":{"line":210,"column":58}},"94":{"start":{"line":212,"column":24},"end":{"line":212,"column":41}},"95":{"start":{"line":214,"column":20},"end":{"line":214,"column":34}},"96":{"start":{"line":215,"column":20},"end":{"line":217,"column":21}},"97":{"start":{"line":216,"column":24},"end":{"line":216,"column":30}},"98":{"start":{"line":221,"column":8},"end":{"line":221,"column":29}},"99":{"start":{"line":224,"column":8},"end":{"line":228,"column":9}},"100":{"start":{"line":225,"column":12},"end":{"line":227,"column":13}},"101":{"start":{"line":226,"column":16},"end":{"line":226,"column":60}},"102":{"start":{"line":230,"column":8},"end":{"line":230,"column":22}}},"branchMap":{"1":{"line":46,"type":"binary-expr","locations":[{"start":{"line":46,"column":23},"end":{"line":46,"column":35}},{"start":{"line":46,"column":39},"end":{"line":46,"column":41}}]},"2":{"line":70,"type":"if","locations":[{"start":{"line":70,"column":8},"end":{"line":70,"column":8}},{"start":{"line":70,"column":8},"end":{"line":70,"column":8}}]},"3":{"line":72,"type":"if","locations":[{"start":{"line":72,"column":16},"end":{"line":72,"column":16}},{"start":{"line":72,"column":16},"end":{"line":72,"column":16}}]},"4":{"line":81,"type":"if","locations":[{"start":{"line":81,"column":8},"end":{"line":81,"column":8}},{"start":{"line":81,"column":8},"end":{"line":81,"column":8}}]},"5":{"line":86,"type":"if","locations":[{"start":{"line":86,"column":16},"end":{"line":86,"column":16}},{"start":{"line":86,"column":16},"end":{"line":86,"column":16}}]},"6":{"line":90,"type":"if","locations":[{"start":{"line":90,"column":21},"end":{"line":90,"column":21}},{"start":{"line":90,"column":21},"end":{"line":90,"column":21}}]},"7":{"line":93,"type":"if","locations":[{"start":{"line":93,"column":21},"end":{"line":93,"column":21}},{"start":{"line":93,"column":21},"end":{"line":93,"column":21}}]},"8":{"line":99,"type":"if","locations":[{"start":{"line":99,"column":12},"end":{"line":99,"column":12}},{"start":{"line":99,"column":12},"end":{"line":99,"column":12}}]},"9":{"line":110,"type":"if","locations":[{"start":{"line":110,"column":8},"end":{"line":110,"column":8}},{"start":{"line":110,"column":8},"end":{"line":110,"column":8}}]},"10":{"line":113,"type":"if","locations":[{"start":{"line":113,"column":16},"end":{"line":113,"column":16}},{"start":{"line":113,"column":16},"end":{"line":113,"column":16}}]},"11":{"line":117,"type":"if","locations":[{"start":{"line":117,"column":12},"end":{"line":117,"column":12}},{"start":{"line":117,"column":12},"end":{"line":117,"column":12}}]},"12":{"line":123,"type":"if","locations":[{"start":{"line":123,"column":8},"end":{"line":123,"column":8}},{"start":{"line":123,"column":8},"end":{"line":123,"column":8}}]},"13":{"line":126,"type":"if","locations":[{"start":{"line":126,"column":13},"end":{"line":126,"column":13}},{"start":{"line":126,"column":13},"end":{"line":126,"column":13}}]},"14":{"line":133,"type":"if","locations":[{"start":{"line":133,"column":8},"end":{"line":133,"column":8}},{"start":{"line":133,"column":8},"end":{"line":133,"column":8}}]},"15":{"line":137,"type":"if","locations":[{"start":{"line":137,"column":16},"end":{"line":137,"column":16}},{"start":{"line":137,"column":16},"end":{"line":137,"column":16}}]},"16":{"line":140,"type":"switch","locations":[{"start":{"line":141,"column":20},"end":{"line":142,"column":50}},{"start":{"line":143,"column":20},"end":{"line":144,"column":54}},{"start":{"line":145,"column":20},"end":{"line":146,"column":41}},{"start":{"line":147,"column":20},"end":{"line":152,"column":30}}]},"17":{"line":148,"type":"if","locations":[{"start":{"line":148,"column":24},"end":{"line":148,"column":24}},{"start":{"line":148,"column":24},"end":{"line":148,"column":24}}]},"18":{"line":155,"type":"if","locations":[{"start":{"line":155,"column":16},"end":{"line":155,"column":16}},{"start":{"line":155,"column":16},"end":{"line":155,"column":16}}]},"19":{"line":163,"type":"if","locations":[{"start":{"line":163,"column":8},"end":{"line":163,"column":8}},{"start":{"line":163,"column":8},"end":{"line":163,"column":8}}]},"20":{"line":166,"type":"if","locations":[{"start":{"line":166,"column":16},"end":{"line":166,"column":16}},{"start":{"line":166,"column":16},"end":{"line":166,"column":16}}]},"21":{"line":170,"type":"if","locations":[{"start":{"line":170,"column":21},"end":{"line":170,"column":21}},{"start":{"line":170,"column":21},"end":{"line":170,"column":21}}]},"22":{"line":174,"type":"if","locations":[{"start":{"line":174,"column":12},"end":{"line":174,"column":12}},{"start":{"line":174,"column":12},"end":{"line":174,"column":12}}]},"23":{"line":182,"type":"if","locations":[{"start":{"line":182,"column":8},"end":{"line":182,"column":8}},{"start":{"line":182,"column":8},"end":{"line":182,"column":8}}]},"24":{"line":187,"type":"if","locations":[{"start":{"line":187,"column":16},"end":{"line":187,"column":16}},{"start":{"line":187,"column":16},"end":{"line":187,"column":16}}]},"25":{"line":191,"type":"if","locations":[{"start":{"line":191,"column":16},"end":{"line":191,"column":16}},{"start":{"line":191,"column":16},"end":{"line":191,"column":16}}]},"26":{"line":195,"type":"if","locations":[{"start":{"line":195,"column":21},"end":{"line":195,"column":21}},{"start":{"line":195,"column":21},"end":{"line":195,"column":21}}]},"27":{"line":195,"type":"binary-expr","locations":[{"start":{"line":195,"column":25},"end":{"line":195,"column":36}},{"start":{"line":195,"column":40},"end":{"line":195,"column":51}}]},"28":{"line":196,"type":"if","locations":[{"start":{"line":196,"column":20},"end":{"line":196,"column":20}},{"start":{"line":196,"column":20},"end":{"line":196,"column":20}}]},"29":{"line":198,"type":"if","locations":[{"start":{"line":198,"column":24},"end":{"line":198,"column":24}},{"start":{"line":198,"column":24},"end":{"line":198,"column":24}}]},"30":{"line":199,"type":"if","locations":[{"start":{"line":199,"column":28},"end":{"line":199,"column":28}},{"start":{"line":199,"column":28},"end":{"line":199,"column":28}}]},"31":{"line":215,"type":"if","locations":[{"start":{"line":215,"column":20},"end":{"line":215,"column":20}},{"start":{"line":215,"column":20},"end":{"line":215,"column":20}}]},"32":{"line":224,"type":"if","locations":[{"start":{"line":224,"column":8},"end":{"line":224,"column":8}},{"start":{"line":224,"column":8},"end":{"line":224,"column":8}}]},"33":{"line":225,"type":"if","locations":[{"start":{"line":225,"column":12},"end":{"line":225,"column":12}},{"start":{"line":225,"column":12},"end":{"line":225,"column":12}}]}}}}
body, html {
margin:0; padding: 0;
}
body {
font-family: Helvetica Neue, Helvetica,Arial;
font-size: 10pt;
}
div.header, div.footer {
background: #eee;
padding: 1em;
}
div.header {
z-index: 100;
position: fixed;
top: 0;
border-bottom: 1px solid #666;
width: 100%;
}
div.footer {
border-top: 1px solid #666;
}
div.body {
margin-top: 10em;
}
div.meta {
font-size: 90%;
text-align: center;
}
h1, h2, h3 {
font-weight: normal;
}
h1 {
font-size: 12pt;
}
h2 {
font-size: 10pt;
}
pre {
font-family: Consolas, Menlo, Monaco, monospace;
margin: 0;
padding: 0;
line-height: 1.3;
font-size: 14px;
-moz-tab-size: 2;
-o-tab-size: 2;
tab-size: 2;
}
div.path { font-size: 110%; }
div.path a:link, div.path a:visited { color: #000; }
table.coverage { border-collapse: collapse; margin:0; padding: 0 }
table.coverage td {
margin: 0;
padding: 0;
color: #111;
vertical-align: top;
}
table.coverage td.line-count {
width: 50px;
text-align: right;
padding-right: 5px;
}
table.coverage td.line-coverage {
color: #777 !important;
text-align: right;
border-left: 1px solid #666;
border-right: 1px solid #666;
}
table.coverage td.text {
}
table.coverage td span.cline-any {
display: inline-block;
padding: 0 5px;
width: 40px;
}
table.coverage td span.cline-neutral {
background: #eee;
}
table.coverage td span.cline-yes {
background: #b5d592;
color: #999;
}
table.coverage td span.cline-no {
background: #fc8c84;
}
.cstat-yes { color: #111; }
.cstat-no { background: #fc8c84; color: #111; }
.fstat-no { background: #ffc520; color: #111 !important; }
.cbranch-no { background: yellow !important; color: #111; }
.cstat-skip { background: #ddd; color: #111; }
.fstat-skip { background: #ddd; color: #111 !important; }
.cbranch-skip { background: #ddd !important; color: #111; }
.missing-if-branch {
display: inline-block;
margin-right: 10px;
position: relative;
padding: 0 4px;
background: black;
color: yellow;
}
.skip-if-branch {
display: none;
margin-right: 10px;
position: relative;
padding: 0 4px;
background: #ccc;
color: white;
}
.missing-if-branch .typ, .skip-if-branch .typ {
color: inherit !important;
}
.entity, .metric { font-weight: bold; }
.metric { display: inline-block; border: 1px solid #333; padding: 0.3em; background: white; }
.metric small { font-size: 80%; font-weight: normal; color: #666; }
div.coverage-summary table { border-collapse: collapse; margin: 3em; font-size: 110%; }
div.coverage-summary td, div.coverage-summary table th { margin: 0; padding: 0.25em 1em; border-top: 1px solid #666; border-bottom: 1px solid #666; }
div.coverage-summary th { text-align: left; border: 1px solid #666; background: #eee; font-weight: normal; }
div.coverage-summary th.file { border-right: none !important; }
div.coverage-summary th.pic { border-left: none !important; text-align: right; }
div.coverage-summary th.pct { border-right: none !important; }
div.coverage-summary th.abs { border-left: none !important; text-align: right; }
div.coverage-summary td.pct { text-align: right; border-left: 1px solid #666; }
div.coverage-summary td.abs { text-align: right; font-size: 90%; color: #444; border-right: 1px solid #666; }
div.coverage-summary td.file { border-left: 1px solid #666; white-space: nowrap; }
div.coverage-summary td.pic { min-width: 120px !important; }
div.coverage-summary a:link { text-decoration: none; color: #000; }
div.coverage-summary a:visited { text-decoration: none; color: #777; }
div.coverage-summary a:hover { text-decoration: underline; }
div.coverage-summary tfoot td { border-top: 1px solid #666; }
div.coverage-summary .sorter {
height: 10px;
width: 7px;
display: inline-block;
margin-left: 0.5em;
background: url(sort-arrow-sprite.png) no-repeat scroll 0 0 transparent;
}
div.coverage-summary .sorted .sorter {
background-position: 0 -20px;
}
div.coverage-summary .sorted-desc .sorter {
background-position: 0 -10px;
}
.high { background: #b5d592 !important; }
.medium { background: #ffe87c !important; }
.low { background: #fc8c84 !important; }
span.cover-fill, span.cover-empty {
display:inline-block;
border:1px solid #444;
background: white;
height: 12px;
}
span.cover-fill {
background: #ccc;
border-right: 1px solid #444;
}
span.cover-empty {
background: white;
border-left: none;
}
span.cover-full {
border-right: none !important;
}
pre.prettyprint {
border: none !important;
padding: 0 !important;
margin: 0 !important;
}
.com { color: #999 !important; }
.ignore-none { color: #999; font-weight: normal; }
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for All files</title>
<meta charset="utf-8">
<link rel="stylesheet" href="prettify.css">
<link rel="stylesheet" href="base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">All files</span></h1>
<h2>
Statements: <span class="metric">93.86% <small>(107 / 114)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">92.65% <small>(63 / 68)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">83.33% <small>(5 / 6)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">95.54% <small>(107 / 112)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"></div>
</div>
<div class="body">
<div class="coverage-summary">
<table>
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="src/oojs/utility/"><a href="src/oojs/utility/index.html">src/oojs/utility/</a></td>
<td data-value="94.12" class="pic high"><span class="cover-fill" style="width: 94px;"></span><span class="cover-empty" style="width:6px;"></span></td>
<td data-value="94.12" class="pct high">94.12%</td>
<td data-value="102" class="abs high">(96&nbsp;/&nbsp;102)</td>
<td data-value="92.65" class="pct high">92.65%</td>
<td data-value="68" class="abs high">(63&nbsp;/&nbsp;68)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
<td data-value="96" class="pct high">96%</td>
<td data-value="100" class="abs high">(96&nbsp;/&nbsp;100)</td>
</tr>
<tr>
<td class="file high" data-value="tool/"><a href="tool/index.html">tool/</a></td>
<td data-value="91.67" class="pic high"><span class="cover-fill" style="width: 91px;"></span><span class="cover-empty" style="width:9px;"></span></td>
<td data-value="91.67" class="pct high">91.67%</td>
<td data-value="12" class="abs high">(11&nbsp;/&nbsp;12)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="80" class="pct high">80%</td>
<td data-value="5" class="abs high">(4&nbsp;/&nbsp;5)</td>
<td data-value="91.67" class="pct high">91.67%</td>
<td data-value="12" class="abs high">(11&nbsp;/&nbsp;12)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Apr 07 2016 19:03:33 GMT+0800 (中国标准时间)</div>
</div>
<script src="prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="sorter.js"></script>
</body>
</html>
.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
window.PR_SHOULD_USE_CONTINUATION=true;(function(){var h=["break,continue,do,else,for,if,return,while"];var u=[h,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var p=[u,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var l=[p,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var x=[p,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var R=[x,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"];var r="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes";var w=[p,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var s="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var I=[h,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var f=[h,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var H=[h,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var A=[l,R,w,s+I,f,H];var e=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/;var C="str";var z="kwd";var j="com";var O="typ";var G="lit";var L="pun";var F="pln";var m="tag";var E="dec";var J="src";var P="atn";var n="atv";var N="nocode";var M="(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function k(Z){var ad=0;var S=false;var ac=false;for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.ignoreCase){ac=true}else{if(/[a-z]/i.test(ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,""))){S=true;ac=false;break}}}var Y={b:8,t:9,n:10,v:11,f:12,r:13};function ab(ah){var ag=ah.charCodeAt(0);if(ag!==92){return ag}var af=ah.charAt(1);ag=Y[af];if(ag){return ag}else{if("0"<=af&&af<="7"){return parseInt(ah.substring(1),8)}else{if(af==="u"||af==="x"){return parseInt(ah.substring(2),16)}else{return ah.charCodeAt(1)}}}}function T(af){if(af<32){return(af<16?"\\x0":"\\x")+af.toString(16)}var ag=String.fromCharCode(af);if(ag==="\\"||ag==="-"||ag==="["||ag==="]"){ag="\\"+ag}return ag}function X(am){var aq=am.substring(1,am.length-1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));var ak=[];var af=[];var ao=aq[0]==="^";for(var ar=ao?1:0,aj=aq.length;ar<aj;++ar){var ah=aq[ar];if(/\\[bdsw]/i.test(ah)){ak.push(ah)}else{var ag=ab(ah);var al;if(ar+2<aj&&"-"===aq[ar+1]){al=ab(aq[ar+2]);ar+=2}else{al=ag}af.push([ag,al]);if(!(al<65||ag>122)){if(!(al<65||ag>90)){af.push([Math.max(65,ag)|32,Math.min(al,90)|32])}if(!(al<97||ag>122)){af.push([Math.max(97,ag)&~32,Math.min(al,122)&~32])}}}}af.sort(function(av,au){return(av[0]-au[0])||(au[1]-av[1])});var ai=[];var ap=[NaN,NaN];for(var ar=0;ar<af.length;++ar){var at=af[ar];if(at[0]<=ap[1]+1){ap[1]=Math.max(ap[1],at[1])}else{ai.push(ap=at)}}var an=["["];if(ao){an.push("^")}an.push.apply(an,ak);for(var ar=0;ar<ai.length;++ar){var at=ai[ar];an.push(T(at[0]));if(at[1]>at[0]){if(at[1]+1>at[0]){an.push("-")}an.push(T(at[1]))}}an.push("]");return an.join("")}function W(al){var aj=al.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var ah=aj.length;var an=[];for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){an[af]=-1}}}}for(var ak=1;ak<an.length;++ak){if(-1===an[ak]){an[ak]=++ad}}for(var ak=0,am=0;ak<ah;++ak){var ag=aj[ak];if(ag==="("){++am;if(an[am]===undefined){aj[ak]="(?:"}}else{if("\\"===ag.charAt(0)){var af=+ag.substring(1);if(af&&af<=am){aj[ak]="\\"+an[am]}}}}for(var ak=0,am=0;ak<ah;++ak){if("^"===aj[ak]&&"^"!==aj[ak+1]){aj[ak]=""}}if(al.ignoreCase&&S){for(var ak=0;ak<ah;++ak){var ag=aj[ak];var ai=ag.charAt(0);if(ag.length>=2&&ai==="["){aj[ak]=X(ag)}else{if(ai!=="\\"){aj[ak]=ag.replace(/[a-zA-Z]/g,function(ao){var ap=ao.charCodeAt(0);return"["+String.fromCharCode(ap&~32,ap|32)+"]"})}}}}return aj.join("")}var aa=[];for(var V=0,U=Z.length;V<U;++V){var ae=Z[V];if(ae.global||ae.multiline){throw new Error(""+ae)}aa.push("(?:"+W(ae)+")")}return new RegExp(aa.join("|"),ac?"gi":"g")}function a(V){var U=/(?:^|\s)nocode(?:\s|$)/;var X=[];var T=0;var Z=[];var W=0;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=document.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Y=S&&"pre"===S.substring(0,3);function aa(ab){switch(ab.nodeType){case 1:if(U.test(ab.className)){return}for(var ae=ab.firstChild;ae;ae=ae.nextSibling){aa(ae)}var ad=ab.nodeName;if("BR"===ad||"LI"===ad){X[W]="\n";Z[W<<1]=T++;Z[(W++<<1)|1]=ab}break;case 3:case 4:var ac=ab.nodeValue;if(ac.length){if(!Y){ac=ac.replace(/[ \t\r\n]+/g," ")}else{ac=ac.replace(/\r\n?/g,"\n")}X[W]=ac;Z[W<<1]=T;T+=ac.length;Z[(W++<<1)|1]=ab}break}}aa(V);return{sourceCode:X.join("").replace(/\n$/,""),spans:Z}}function B(S,U,W,T){if(!U){return}var V={sourceCode:U,basePos:S};W(V);T.push.apply(T,V.decorations)}var v=/\S/;function o(S){var V=undefined;for(var U=S.firstChild;U;U=U.nextSibling){var T=U.nodeType;V=(T===1)?(V?S:U):(T===3)?(v.test(U.nodeValue)?S:V):V}return V===S?undefined:V}function g(U,T){var S={};var V;(function(){var ad=U.concat(T);var ah=[];var ag={};for(var ab=0,Z=ad.length;ab<Z;++ab){var Y=ad[ab];var ac=Y[3];if(ac){for(var ae=ac.length;--ae>=0;){S[ac.charAt(ae)]=Y}}var af=Y[1];var aa=""+af;if(!ag.hasOwnProperty(aa)){ah.push(af);ag[aa]=null}}ah.push(/[\0-\uffff]/);V=k(ah)})();var X=T.length;var W=function(ah){var Z=ah.sourceCode,Y=ah.basePos;var ad=[Y,F];var af=0;var an=Z.match(V)||[];var aj={};for(var ae=0,aq=an.length;ae<aq;++ae){var ag=an[ae];var ap=aj[ag];var ai=void 0;var am;if(typeof ap==="string"){am=false}else{var aa=S[ag.charAt(0)];if(aa){ai=ag.match(aa[1]);ap=aa[0]}else{for(var ao=0;ao<X;++ao){aa=T[ao];ai=ag.match(aa[1]);if(ai){ap=aa[0];break}}if(!ai){ap=F}}am=ap.length>=5&&"lang-"===ap.substring(0,5);if(am&&!(ai&&typeof ai[1]==="string")){am=false;ap=J}if(!am){aj[ag]=ap}}var ab=af;af+=ag.length;if(!am){ad.push(Y+ab,ap)}else{var al=ai[1];var ak=ag.indexOf(al);var ac=ak+al.length;if(ai[2]){ac=ag.length-ai[2].length;ak=ac-al.length}var ar=ap.substring(5);B(Y+ab,ag.substring(0,ak),W,ad);B(Y+ab+ak,al,q(ar,al),ad);B(Y+ab+ac,ag.substring(ac),W,ad)}}ah.decorations=ad};return W}function i(T){var W=[],S=[];if(T.tripleQuotedStrings){W.push([C,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(T.multiLineStrings){W.push([C,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{W.push([C,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(T.verbatimStrings){S.push([C,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var Y=T.hashComments;if(Y){if(T.cStyleComments){if(Y>1){W.push([j,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{W.push([j,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}S.push([C,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,null])}else{W.push([j,/^#[^\r\n]*/,null,"#"])}}if(T.cStyleComments){S.push([j,/^\/\/[^\r\n]*/,null]);S.push([j,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(T.regexLiterals){var X=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");S.push(["lang-regex",new RegExp("^"+M+"("+X+")")])}var V=T.types;if(V){S.push([O,V])}var U=(""+T.keywords).replace(/^ | $/g,"");if(U.length){S.push([z,new RegExp("^(?:"+U.replace(/[\s,]+/g,"|")+")\\b"),null])}W.push([F,/^\s+/,null," \r\n\t\xA0"]);S.push([G,/^@[a-z_$][a-z_$@0-9]*/i,null],[O,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[F,/^[a-z_$][a-z_$@0-9]*/i,null],[G,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[F,/^\\[\s\S]?/,null],[L,/^.[^\s\w\.$@\'\"\`\/\#\\]*/,null]);return g(W,S)}var K=i({keywords:A,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function Q(V,ag){var U=/(?:^|\s)nocode(?:\s|$)/;var ab=/\r\n?|\n/;var ac=V.ownerDocument;var S;if(V.currentStyle){S=V.currentStyle.whiteSpace}else{if(window.getComputedStyle){S=ac.defaultView.getComputedStyle(V,null).getPropertyValue("white-space")}}var Z=S&&"pre"===S.substring(0,3);var af=ac.createElement("LI");while(V.firstChild){af.appendChild(V.firstChild)}var W=[af];function ae(al){switch(al.nodeType){case 1:if(U.test(al.className)){break}if("BR"===al.nodeName){ad(al);if(al.parentNode){al.parentNode.removeChild(al)}}else{for(var an=al.firstChild;an;an=an.nextSibling){ae(an)}}break;case 3:case 4:if(Z){var am=al.nodeValue;var aj=am.match(ab);if(aj){var ai=am.substring(0,aj.index);al.nodeValue=ai;var ah=am.substring(aj.index+aj[0].length);if(ah){var ak=al.parentNode;ak.insertBefore(ac.createTextNode(ah),al.nextSibling)}ad(al);if(!ai){al.parentNode.removeChild(al)}}}break}}function ad(ak){while(!ak.nextSibling){ak=ak.parentNode;if(!ak){return}}function ai(al,ar){var aq=ar?al.cloneNode(false):al;var ao=al.parentNode;if(ao){var ap=ai(ao,1);var an=al.nextSibling;ap.appendChild(aq);for(var am=an;am;am=an){an=am.nextSibling;ap.appendChild(am)}}return aq}var ah=ai(ak.nextSibling,0);for(var aj;(aj=ah.parentNode)&&aj.nodeType===1;){ah=aj}W.push(ah)}for(var Y=0;Y<W.length;++Y){ae(W[Y])}if(ag===(ag|0)){W[0].setAttribute("value",ag)}var aa=ac.createElement("OL");aa.className="linenums";var X=Math.max(0,((ag-1))|0)||0;for(var Y=0,T=W.length;Y<T;++Y){af=W[Y];af.className="L"+((Y+X)%10);if(!af.firstChild){af.appendChild(ac.createTextNode("\xA0"))}aa.appendChild(af)}V.appendChild(aa)}function D(ac){var aj=/\bMSIE\b/.test(navigator.userAgent);var am=/\n/g;var al=ac.sourceCode;var an=al.length;var V=0;var aa=ac.spans;var T=aa.length;var ah=0;var X=ac.decorations;var Y=X.length;var Z=0;X[Y]=an;var ar,aq;for(aq=ar=0;aq<Y;){if(X[aq]!==X[aq+2]){X[ar++]=X[aq++];X[ar++]=X[aq++]}else{aq+=2}}Y=ar;for(aq=ar=0;aq<Y;){var at=X[aq];var ab=X[aq+1];var W=aq+2;while(W+2<=Y&&X[W+1]===ab){W+=2}X[ar++]=at;X[ar++]=ab;aq=W}Y=X.length=ar;var ae=null;while(ah<T){var af=aa[ah];var S=aa[ah+2]||an;var ag=X[Z];var ap=X[Z+2]||an;var W=Math.min(S,ap);var ak=aa[ah+1];var U;if(ak.nodeType!==1&&(U=al.substring(V,W))){if(aj){U=U.replace(am,"\r")}ak.nodeValue=U;var ai=ak.ownerDocument;var ao=ai.createElement("SPAN");ao.className=X[Z+1];var ad=ak.parentNode;ad.replaceChild(ao,ak);ao.appendChild(ak);if(V<S){aa[ah+1]=ak=ai.createTextNode(al.substring(W,S));ad.insertBefore(ak,ao.nextSibling)}}V=W;if(V>=S){ah+=2}if(V>=ap){Z+=2}}}var t={};function c(U,V){for(var S=V.length;--S>=0;){var T=V[S];if(!t.hasOwnProperty(T)){t[T]=U}else{if(window.console){console.warn("cannot override language handler %s",T)}}}}function q(T,S){if(!(T&&t.hasOwnProperty(T))){T=/^\s*</.test(S)?"default-markup":"default-code"}return t[T]}c(K,["default-code"]);c(g([],[[F,/^[^<?]+/],[E,/^<!\w[^>]*(?:>|$)/],[j,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[L,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]);c(g([[F,/^[\s]+/,null," \t\r\n"],[n,/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[[m,/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],[P,/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[L,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);c(g([],[[n,/^[\s\S]+/]]),["uq.val"]);c(i({keywords:l,hashComments:true,cStyleComments:true,types:e}),["c","cc","cpp","cxx","cyc","m"]);c(i({keywords:"null,true,false"}),["json"]);c(i({keywords:R,hashComments:true,cStyleComments:true,verbatimStrings:true,types:e}),["cs"]);c(i({keywords:x,cStyleComments:true}),["java"]);c(i({keywords:H,hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);c(i({keywords:I,hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);c(i({keywords:s,hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);c(i({keywords:f,hashComments:true,multiLineStrings:true,regexLiterals:true}),["rb"]);c(i({keywords:w,cStyleComments:true,regexLiterals:true}),["js"]);c(i({keywords:r,hashComments:3,cStyleComments:true,multilineStrings:true,tripleQuotedStrings:true,regexLiterals:true}),["coffee"]);c(g([],[[C,/^[\s\S]+/]]),["regex"]);function d(V){var U=V.langExtension;try{var S=a(V.sourceNode);var T=S.sourceCode;V.sourceCode=T;V.spans=S.spans;V.basePos=0;q(U,T)(V);D(V)}catch(W){if("console" in window){console.log(W&&W.stack?W.stack:W)}}}function y(W,V,U){var S=document.createElement("PRE");S.innerHTML=W;if(U){Q(S,U)}var T={langExtension:V,numberLines:U,sourceNode:S};d(T);return S.innerHTML}function b(ad){function Y(af){return document.getElementsByTagName(af)}var ac=[Y("pre"),Y("code"),Y("xmp")];var T=[];for(var aa=0;aa<ac.length;++aa){for(var Z=0,V=ac[aa].length;Z<V;++Z){T.push(ac[aa][Z])}}ac=null;var W=Date;if(!W.now){W={now:function(){return +(new Date)}}}var X=0;var S;var ab=/\blang(?:uage)?-([\w.]+)(?!\S)/;var ae=/\bprettyprint\b/;function U(){var ag=(window.PR_SHOULD_USE_CONTINUATION?W.now()+250:Infinity);for(;X<T.length&&W.now()<ag;X++){var aj=T[X];var ai=aj.className;if(ai.indexOf("prettyprint")>=0){var ah=ai.match(ab);var am;if(!ah&&(am=o(aj))&&"CODE"===am.tagName){ah=am.className.match(ab)}if(ah){ah=ah[1]}var al=false;for(var ak=aj.parentNode;ak;ak=ak.parentNode){if((ak.tagName==="pre"||ak.tagName==="code"||ak.tagName==="xmp")&&ak.className&&ak.className.indexOf("prettyprint")>=0){al=true;break}}if(!al){var af=aj.className.match(/\blinenums\b(?::(\d+))?/);af=af?af[1]&&af[1].length?+af[1]:true:false;if(af){Q(aj,af)}S={langExtension:ah,sourceNode:aj,numberLines:af};d(S)}}}if(X<T.length){setTimeout(U,250)}else{if(ad){ad()}}}U()}window.prettyPrintOne=y;window.prettyPrint=b;window.PR={createSimpleLexer:g,registerLangHandler:c,sourceDecorator:i,PR_ATTRIB_NAME:P,PR_ATTRIB_VALUE:n,PR_COMMENT:j,PR_DECLARATION:E,PR_KEYWORD:z,PR_LITERAL:G,PR_NOCODE:N,PR_PLAIN:F,PR_PUNCTUATION:L,PR_SOURCE:J,PR_STRING:C,PR_TAG:m,PR_TYPE:O}})();PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_DECLARATION,/^<!\w[^>]*(?:>|$)/],[PR.PR_COMMENT,/^<\!--[\s\S]*?(?:-\->|$)/],[PR.PR_PUNCTUATION,/^(?:<[%?]|[%?]>)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-handlebars",/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i],[PR.PR_DECLARATION,/^{{[#^>/]?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{&?\s*[\w.][^}]*}}/],[PR.PR_DECLARATION,/^{{{>?\s*[\w.][^}]*}}}/],[PR.PR_COMMENT,/^{{![^}]*}}/]]),["handlebars","hbs"]);PR.registerLangHandler(PR.createSimpleLexer([[PR.PR_PLAIN,/^[ \t\r\n\f]+/,null," \t\r\n\f"]],[[PR.PR_STRING,/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,null],[PR.PR_STRING,/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,null],["lang-css-str",/^url\(([^\)\"\']*)\)/i],[PR.PR_KEYWORD,/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i],[PR.PR_COMMENT,/^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],[PR.PR_COMMENT,/^(?:<!--|-->)/],[PR.PR_LITERAL,/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],[PR.PR_LITERAL,/^#(?:[0-9a-f]{3}){1,2}/i],[PR.PR_PLAIN,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i],[PR.PR_PUNCTUATION,/^[^\s\w\'\"]+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_KEYWORD,/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[[PR.PR_STRING,/^[^\)\"\']+/]]),["css-str"]);

Sorry, the diff of this file is not supported yet

var addSorting = (function () {
"use strict";
var cols,
currentSort = {
index: 0,
desc: false
};
// returns the summary table element
function getTable() { return document.querySelector('.coverage-summary table'); }
// returns the thead element of the summary table
function getTableHeader() { return getTable().querySelector('thead tr'); }
// returns the tbody element of the summary table
function getTableBody() { return getTable().querySelector('tbody'); }
// returns the th element for nth column
function getNthColumn(n) { return getTableHeader().querySelectorAll('th')[n]; }
// loads all columns
function loadColumns() {
var colNodes = getTableHeader().querySelectorAll('th'),
colNode,
cols = [],
col,
i;
for (i = 0; i < colNodes.length; i += 1) {
colNode = colNodes[i];
col = {
key: colNode.getAttribute('data-col'),
sortable: !colNode.getAttribute('data-nosort'),
type: colNode.getAttribute('data-type') || 'string'
};
cols.push(col);
if (col.sortable) {
col.defaultDescSort = col.type === 'number';
colNode.innerHTML = colNode.innerHTML + '<span class="sorter"></span>';
}
}
return cols;
}
// attaches a data attribute to every tr element with an object
// of data values keyed by column name
function loadRowData(tableRow) {
var tableCols = tableRow.querySelectorAll('td'),
colNode,
col,
data = {},
i,
val;
for (i = 0; i < tableCols.length; i += 1) {
colNode = tableCols[i];
col = cols[i];
val = colNode.getAttribute('data-value');
if (col.type === 'number') {
val = Number(val);
}
data[col.key] = val;
}
return data;
}
// loads all row data
function loadData() {
var rows = getTableBody().querySelectorAll('tr'),
i;
for (i = 0; i < rows.length; i += 1) {
rows[i].data = loadRowData(rows[i]);
}
}
// sorts the table using the data for the ith column
function sortByIndex(index, desc) {
var key = cols[index].key,
sorter = function (a, b) {
a = a.data[key];
b = b.data[key];
return a < b ? -1 : a > b ? 1 : 0;
},
finalSorter = sorter,
tableBody = document.querySelector('.coverage-summary tbody'),
rowNodes = tableBody.querySelectorAll('tr'),
rows = [],
i;
if (desc) {
finalSorter = function (a, b) {
return -1 * sorter(a, b);
};
}
for (i = 0; i < rowNodes.length; i += 1) {
rows.push(rowNodes[i]);
tableBody.removeChild(rowNodes[i]);
}
rows.sort(finalSorter);
for (i = 0; i < rows.length; i += 1) {
tableBody.appendChild(rows[i]);
}
}
// removes sort indicators for current column being sorted
function removeSortIndicators() {
var col = getNthColumn(currentSort.index),
cls = col.className;
cls = cls.replace(/ sorted$/, '').replace(/ sorted-desc$/, '');
col.className = cls;
}
// adds sort indicators for current column being sorted
function addSortIndicators() {
getNthColumn(currentSort.index).className += currentSort.desc ? ' sorted-desc' : ' sorted';
}
// adds event listeners for all sorter widgets
function enableUI() {
var i,
el,
ithSorter = function ithSorter(i) {
var col = cols[i];
return function () {
var desc = col.defaultDescSort;
if (currentSort.index === i) {
desc = !currentSort.desc;
}
sortByIndex(i, desc);
removeSortIndicators();
currentSort.index = i;
currentSort.desc = desc;
addSortIndicators();
};
};
for (i =0 ; i < cols.length; i += 1) {
if (cols[i].sortable) {
el = getNthColumn(i).querySelector('.sorter');
if (el.addEventListener) {
el.addEventListener('click', ithSorter(i));
} else {
el.attachEvent('onclick', ithSorter(i));
}
}
}
}
// adds sorting functionality to the UI
return function () {
if (!getTable()) {
return;
}
cols = loadColumns();
loadData(cols);
addSortIndicators();
enableUI();
};
})();
window.addEventListener('load', addSorting);
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\ClientInfo.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\ClientInfo.js</span></h1>
<h2>
Statements: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; ClientInfo.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file 客户端模型
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'ClientInfo',
namespace: 'Demo.Common.Model',
protoType: 'ClientInfo',
property: {
clientAccount: {
type: 'string'
},
clientPassword: {
type: 'string'
},
clientRequestId: {
type: 'string'
},
userAgent: {
type: 'string'
}
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\Converter.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\Converter.js</span></h1>
<h2>
Statements: <span class="metric">82.61% <small>(19 / 23)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">72.73% <small>(8 / 11)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(2 / 2)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">82.61% <small>(19 / 23)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; Converter.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3</span>
<span class="cline-any cline-yes">3</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">4</span>
<span class="cline-any cline-yes">4</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">31</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file 模型转换工具类.
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'Converter',
namespace: 'Demo.Common.Model',
deps: {
proto: 'Demo.Common.Model.Proto'
},
&nbsp;
/**
* 记录javascript原始数据类型, 以下类型直接赋值不会进行类型转换.
*/
nativeType: {
'string': true,
'number': true,
'object': true,
'function': true
},
&nbsp;
/**
* 根据meta和数据buffer, 获取pb对象
*
* @param {Object} model 模型类
* @param {string} buffer 带转换的字节数组
* @return {Object} proto对象模型
*/
byteToProto: function (model, buffer) {
// 获取pb类
var protoType = this.proto.getClass(model.protoType);
return protoType.decode(buffer);
},
&nbsp;
/**
* 将一个obj, 根据meta信息, 转换成pb对象
*
* @param {Object} model 模型类
* @param {Object} obj 带转换的数据对象
* @return {Object} proto对象模型
*/
objToProto: function (model, obj) {
// 已经是pb类型的对象
<span class="missing-if-branch" title="if path not taken" >I</span>if (obj.isProto) {
<span class="cstat-no" title="statement not covered" > return obj;</span>
}
&nbsp;
var result;
<span class="missing-if-branch" title="if path not taken" >I</span>if (obj instanceof Array) {
// 处理数组
<span class="cstat-no" title="statement not covered" > result = [];</span>
<span class="cstat-no" title="statement not covered" > for (var i = 0, count = obj.length; i &lt; count; i++) {</span>
<span class="cstat-no" title="statement not covered" > result.push(this.objToProto(model, obj[i]));</span>
}
}
else {
// 处理单个obj对象
var ProtoType = this.proto.getClass(model.protoType);
result = new ProtoType();
var modelProperty = model.property;
for (var key in modelProperty) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (key &amp;&amp; modelProperty.hasOwnProperty(key) &amp;&amp; typeof obj[key] !== 'undefined') {
var currentProperty = modelProperty[key];
var currentType = currentProperty.type;
if (!this.nativeType[currentType]) {
var tempModel = oojs.using(currentType);
result[key] = this.objToProto(tempModel, obj[key]);
}
else {
result[key] = obj[key];
}
}
&nbsp;
}
}
&nbsp;
result.isProto = true;
return result;
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header medium">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\</span></h1>
<h2>
Statements: <span class="metric">79.79% <small>(75 / 94)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">67.74% <small>(21 / 31)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(8 / 8)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">79.79% <small>(75 / 94)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; src/Demo/Common/Model/</div>
</div>
<div class="body">
<div class="coverage-summary">
<table>
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="ClientInfo.js"><a href="ClientInfo.js.html">ClientInfo.js</a></td>
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
</tr>
<tr>
<td class="file high" data-value="Converter.js"><a href="Converter.js.html">Converter.js</a></td>
<td data-value="82.61" class="pic high"><span class="cover-fill" style="width: 82px;"></span><span class="cover-empty" style="width:18px;"></span></td>
<td data-value="82.61" class="pct high">82.61%</td>
<td data-value="23" class="abs high">(19&nbsp;/&nbsp;23)</td>
<td data-value="72.73" class="pct medium">72.73%</td>
<td data-value="11" class="abs medium">(8&nbsp;/&nbsp;11)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">(2&nbsp;/&nbsp;2)</td>
<td data-value="82.61" class="pct high">82.61%</td>
<td data-value="23" class="abs high">(19&nbsp;/&nbsp;23)</td>
</tr>
<tr>
<td class="file medium" data-value="NsHead.js"><a href="NsHead.js.html">NsHead.js</a></td>
<td data-value="74.58" class="pic medium"><span class="cover-fill" style="width: 74px;"></span><span class="cover-empty" style="width:26px;"></span></td>
<td data-value="74.58" class="pct medium">74.58%</td>
<td data-value="59" class="abs medium">(44&nbsp;/&nbsp;59)</td>
<td data-value="61.11" class="pct medium">61.11%</td>
<td data-value="18" class="abs medium">(11&nbsp;/&nbsp;18)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="3" class="abs high">(3&nbsp;/&nbsp;3)</td>
<td data-value="74.58" class="pct medium">74.58%</td>
<td data-value="59" class="abs medium">(44&nbsp;/&nbsp;59)</td>
</tr>
<tr>
<td class="file high" data-value="Proto.js"><a href="Proto.js.html">Proto.js</a></td>
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs high">(9&nbsp;/&nbsp;9)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="2" class="abs high">(2&nbsp;/&nbsp;2)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="3" class="abs high">(3&nbsp;/&nbsp;3)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="9" class="abs high">(9&nbsp;/&nbsp;9)</td>
</tr>
<tr>
<td class="file high" data-value="TemplateRequestInfo.js"><a href="TemplateRequestInfo.js.html">TemplateRequestInfo.js</a></td>
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
</tr>
<tr>
<td class="file high" data-value="TemplateResponseInfo.js"><a href="TemplateResponseInfo.js.html">TemplateResponseInfo.js</a></td>
<td data-value="100" class="pic high"><span class="cover-fill cover-full" style="width: 100px;"></span><span class="cover-empty" style="width:0px;"></span></td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\NsHead.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header medium">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\NsHead.js</span></h1>
<h2>
Statements: <span class="metric">74.58% <small>(44 / 59)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">61.11% <small>(11 / 18)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(3 / 3)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">74.58% <small>(44 / 59)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; NsHead.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file NsHead模型工具类.
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'NsHead',
namespace: 'Demo.Common.Model',
serviceEnum: {
templateService: 0,
templateBrowserService: 1
},
&nbsp;
/**
* 从buffer中读取nsHead
*
* @param {Buffer} buffer buffer对象
* @return {Object} nsHead对象
*/
readNsHead: function (buffer) {
var result = {};
result.id = buffer.readUInt16LE(0);
result.flags = buffer.readUInt16LE(2, 3);
result.logId = buffer.readUInt32LE(4, 7);
result.traceId = buffer.readDoubleLE(8, 15);
result.parentSpanId = buffer.readUInt32LE(16, 19);
result.spanId = buffer.readUInt32LE(20, 23);
result.magicNumber = buffer.readUInt32LE(24, 27);
result.methodId = buffer.readUInt32LE(28, 31);
result.bodyLength = buffer.readUInt32LE(32, 35);
result.snappy = result.flags &amp; 1;
return result;
},
&nbsp;
/**
* 创建nsHead对象
*
* @param {Object} option 用于设置nsHead对象的各种参数
* @param {number} option.methodId 服务id
* @param {boolean} option.snappy 是否启用snappy压缩
* @param {number} option.bodyLength 数据包body部分的长度
* @return {Buffer} nsHead的Buffer对象
*/
writeNsHead: function (option) {
var result = new Buffer(36);
var methodId = parseInt(typeof option.methodId !== 'undefined' ? option.methodId : <span class="branch-1 cbranch-no" title="branch not covered" >0,</span> 10);
var flags = option.snappy ? <span class="branch-0 cbranch-no" title="branch not covered" >0x01 </span>: 0x00;
result.writeUInt16LE(0x00, 0); // id
result.writeUInt16LE(flags, 2); // flags
result.writeUInt32LE(0, 4); // log id
result.writeDoubleLE(0, 8); // trace id
result.writeUInt32LE(0, 16); // parent span id
result.writeUInt32LE(0, 20); // span id
result.writeUInt32LE(0xfb709394, 24); // magic number
result.writeUInt32LE(methodId, 28); // method id
result.writeUInt32LE(option.bodyLength, 32); // body length
return result;
},
&nbsp;
/**
* 长连接中nsHead多包的处理
*
* @param {Object} option 参数mapping对象
* @param {Object} option.data 网络包buffer对象
* @param {Object} option.socket 当前的socket对象
* @param {Object} option.processFunction 处理一次请求包的处理函数
*/
processPackage: function (option) {
var data = option.data;
var socket = option.socket;
var processFunction = option.processFunction;
&nbsp;
var dataBuffer;
<span class="missing-if-branch" title="if path not taken" >I</span>if (socket.preBuffer) {
<span class="cstat-no" title="statement not covered" > dataBuffer = Buffer.concat([</span>
socket.preBuffer,
data
]);
<span class="cstat-no" title="statement not covered" > socket.preBuffer = null;</span>
}
else {
dataBuffer = data;
}
&nbsp;
// 处理nsHead
var nsHead;
var nsHeadBuffer;
<span class="missing-if-branch" title="else path not taken" >E</span>if (dataBuffer.length &amp;&amp; dataBuffer.length &gt;= 36) {
nsHeadBuffer = dataBuffer.slice(0, 36);
nsHead = this.readNsHead(nsHeadBuffer);
}
else {
<span class="cstat-no" title="statement not covered" > socket.preBuffer = dataBuffer;</span>
<span class="cstat-no" title="statement not covered" > dataBuffer = null;</span>
<span class="cstat-no" title="statement not covered" > nsHeadBuffer = null;</span>
<span class="cstat-no" title="statement not covered" > return;</span>
}
&nbsp;
// 处理pb部分
var pbData = dataBuffer.slice(36);
var multiData = false;
<span class="missing-if-branch" title="else path not taken" >E</span>if (nsHead.magicNumber === 4218459028 &amp;&amp; pbData.length &gt;= nsHead.bodyLength) {
// 一次onData发送了多个业务包
<span class="missing-if-branch" title="if path not taken" >I</span>if (pbData.length &gt; nsHead.bodyLength) {
<span class="cstat-no" title="statement not covered" > multiData = true;</span>
}
}
else {
<span class="cstat-no" title="statement not covered" > socket.preBuffer = dataBuffer;</span>
<span class="cstat-no" title="statement not covered" > dataBuffer = null;</span>
<span class="cstat-no" title="statement not covered" > nsHeadBuffer = null;</span>
<span class="cstat-no" title="statement not covered" > pbData = null;</span>
<span class="cstat-no" title="statement not covered" > nsHead = null;</span>
<span class="cstat-no" title="statement not covered" > return;</span>
}
&nbsp;
var msgData = pbData.slice(0, nsHead.bodyLength);
processFunction({
nsHead: nsHead,
bodyBuffer: msgData,
socket: socket
});
&nbsp;
<span class="missing-if-branch" title="if path not taken" >I</span>if (multiData) {
<span class="cstat-no" title="statement not covered" > var leftData = pbData.slice(nsHead.bodyLength);</span>
<span class="cstat-no" title="statement not covered" > this.processPackage({</span>
data: leftData,
socket: socket,
processFunction: processFunction
});
}
&nbsp;
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\Proto.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\Proto.js</span></h1>
<h2>
Statements: <span class="metric">100% <small>(9 / 9)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(2 / 2)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(3 / 3)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">100% <small>(9 / 9)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; Proto.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">3</span>
<span class="cline-any cline-yes">3</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">13</span>
<span class="cline-any cline-yes">13</span>
<span class="cline-any cline-yes">2</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">13</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file proto转换工具类.
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'Proto',
namespace: 'Demo.Common.Model',
deps: {
protobufjs: require('protobufjs'),
path: require('path')
},
cache: {},
&nbsp;
/**
* 静态构造函数
*/
$Proto: function () {
this.protoFilePath = this.path.resolve(oojs.getPath()) + '/Demo/Protocol/Rpc/interface.proto';
this.builder = this.protobufjs.loadProtoFile(this.protoFilePath);
},
&nbsp;
/**
* 编译proto对象
*
* @param {string} type proto类名
* @return {Object} proto对象
*/
build: function (type) {
this.cache[type] = this.builder.build(type);
return this.cache[type];
},
&nbsp;
/**
* 获取proto对象
*
* @param {string} type proto类名
* @return {Object} proto对象
*/
getClass: function (type) {
var result = this.cache[type];
if (!result) {
result = this.build(type);
}
&nbsp;
return result;
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\TemplateRequestInfo.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\TemplateRequestInfo.js</span></h1>
<h2>
Statements: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; TemplateRequestInfo.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file 模版渲染接口请求对象模型
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'TemplateRequestInfo',
namespace: 'Demo.Common.Model',
protoType: 'TemplateRequestInfo',
property: {
client: {
type: 'Demo.Common.Model.ClientInfo'
},
templateId: {
type: 'number'
},
ads: {
type: 'string'
},
width: {
type: 'number'
},
height: {
type: 'number'
}
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Common\Model\TemplateResponseInfo.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Common\Model\TemplateResponseInfo.js</span></h1>
<h2>
Statements: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Common/Model/</a> &#187; TemplateResponseInfo.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file 模版渲染接口相应对象模型
* @author zhangziqiu@baidu.com
*/
/* global oojs */
&nbsp;
oojs.define({
name: 'TemplateResponseInfo',
namespace: 'Demo.Common.Model',
protoType: 'TemplateResponseInfo',
property: {
client: {
type: 'Demo.Common.Model.ClientInfo'
},
status: {
type: 'number'
},
error: {
type: 'string'
},
result: {
type: 'string'
}
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Protocol\Rpc\Client.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Protocol\Rpc\Client.js</span></h1>
<h2>
Statements: <span class="metric">97.73% <small>(43 / 44)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">66.67% <small>(4 / 6)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(14 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">97.73% <small>(43 / 44)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; <a href="index.html">src/Demo/Protocol/Rpc/</a> &#187; Client.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">6</span>
<span class="cline-any cline-yes">6</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file RPC客户端工具类
* @author zhangziqiu@baidu.com
*/
&nbsp;
/* global oojs */
oojs.define({
name: 'Client',
namespace: 'Demo.Protocol.Rpc',
deps: {
nsHead: 'Demo.Common.Model.NsHead',
proto: 'Demo.Common.Model.Proto',
converter: 'Demo.Common.Model.Converter',
net: require('net')
},
&nbsp;
config: {
// 请求的服务接口
methodId: 0,
// 是否启用snappy压缩
snappy: false,
// 服务器地址
serverAddress: '127.0.0.1',
// 服务器端口
serverPort: 8124,
// 请求对象模型
requestModel: 'Demo.Common.Model.TemplateRequestInfo',
// 返回对象模型
responseModel: 'Demo.Common.Model.TemplateResponseInfo',
// 是否缓存requestInfo, 每次发送请求都对requestInfo序列化十分消耗客户端性能.
// 开启后, 会缓存第一次调用write函数时传递的requestInfo, 后续再传递的requestInfo将失效.
isCacheRequestInfo: false
},
&nbsp;
/**
* 动态构造函数
*
* @param {Object} config 配置文件,参见Client.config属性
* @constructor
*/
Client: function (config) {
// 设置配置文件
this.config = this.merge(config, this.config);
this.config.requestModel = oojs.using(this.config.requestModel);
this.config.responseModel = oojs.using(this.config.responseModel);
// 创建promise,初始状态为fullfilled
this.promise = oojs.promise.resolve(config);
},
&nbsp;
/**
* 将源对象的属性合并到目标对象,同名属性使用源对象的值.
*
* @param {Object} source 源对象
* @param {Object} to 目标对象
* @return {Object} 合并后的对象引用
*/
merge: function (source, to) {
for (var key in source) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (source.hasOwnProperty(key) &amp;&amp; typeof source[key] !== 'undefined') {
to[key] = source[key];
}
&nbsp;
}
return to;
},
&nbsp;
/**
* 创建连接
*
* @return {Object} 当前对象的this指针
*/
connect: function () {
this.promise = this.promise.then(function (config) {
var socketPromise = oojs.create(oojs.promise);
this.socket = new this.net.Socket();
this.socket.connect(config.serverPort, config.serverAddress, function () {
socketPromise._resolve();
});
return socketPromise;
}.proxy(this));
return this;
},
&nbsp;
/**
* 发送请求
*
* @param {Object} requestInfo 请求对象
* @return {Object} 返回当前对象的this指针
*/
write: function (requestInfo) {
// 写入请求数据
this.promise = this.promise.then(function () {
// 返回socketPromise
var socketPromise = oojs.create(oojs.promise);
// 首先设置回调函数
this.socket.on('data', function (data) {
this.nsHead.processPackage({
data: data,
socket: this.socket,
processFunction: function (data) {
socketPromise._resolve(data);
}
});
}.proxy(this));
// 写入数据
var totalBuffer;
var messageBuffer = this.converter.objToProto(this.config.requestModel, requestInfo).toBuffer();
var nsHead = this.nsHead.writeNsHead({
methodId: this.config.methodId,
snappy: this.config.snappy,
bodyLength: messageBuffer.length
});
totalBuffer = Buffer.concat([
nsHead,
messageBuffer
]);
this.socket.write(totalBuffer);
return socketPromise;
}.proxy(this));
&nbsp;
// 处理返回的数据包
this.promise = this.promise.then(function (data) {
var nsHead = data.nsHead;
var bodyBuffer = data.bodyBuffer;
<span class="missing-if-branch" title="if path not taken" >I</span>if (nsHead.snappy) {
<span class="cstat-no" title="statement not covered" > bodyBuffer = this.snappy.uncompress(bodyBuffer);</span>
}
&nbsp;
var responseInfo = this.converter.byteToProto(this.config.responseModel, bodyBuffer);
return responseInfo;
}.proxy(this));
&nbsp;
return this;
},
&nbsp;
/**
* 收到数据后的处理
*
* @param {Function} onFullFill 成功时的回调函数
* @param {Function} onRejected 失败时的回调函数
* @return {Object} 返回当前对象的this指针
*/
then: function (onFullFill, onRejected) {
this.promise = this.promise.then(onFullFill, onRejected);
return this;
},
&nbsp;
/**
* 关闭连接
*
* @return {Object} 返回当前对象的this指针
*/
close: function () {
this.promise = this.promise.then(function () {
this.socket.destroy();
this.socket = null;
return true;
}.proxy(this));
return this;
},
&nbsp;
/**
* 异常处理
*
* @param {Function} func 异常处理函数
* @return {Object} 返回当前对象的this指针
*/
error: function (func) {
this.promise = this.promise.catch(func);
return this;
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\Demo\Protocol\Rpc\</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../../prettify.css">
<link rel="stylesheet" href="../../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\Demo\Protocol\Rpc\</span></h1>
<h2>
Statements: <span class="metric">97.73% <small>(43 / 44)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">66.67% <small>(4 / 6)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(14 / 14)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">97.73% <small>(43 / 44)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../../index.html">All files</a> &#187; src/Demo/Protocol/Rpc/</div>
</div>
<div class="body">
<div class="coverage-summary">
<table>
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="Client.js"><a href="Client.js.html">Client.js</a></td>
<td data-value="97.73" class="pic high"><span class="cover-fill" style="width: 97px;"></span><span class="cover-empty" style="width:3px;"></span></td>
<td data-value="97.73" class="pct high">97.73%</td>
<td data-value="44" class="abs high">(43&nbsp;/&nbsp;44)</td>
<td data-value="66.67" class="pct medium">66.67%</td>
<td data-value="6" class="abs medium">(4&nbsp;/&nbsp;6)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="14" class="abs high">(14&nbsp;/&nbsp;14)</td>
<td data-value="97.73" class="pct high">97.73%</td>
<td data-value="44" class="abs high">(43&nbsp;/&nbsp;44)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Tue Oct 27 2015 13:10:40 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\oojs\utility\</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../prettify.css">
<link rel="stylesheet" href="../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\oojs\utility\</span></h1>
<h2>
Statements: <span class="metric">94.12% <small>(96 / 102)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">92.65% <small>(63 / 68)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">96% <small>(96 / 100)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../index.html">All files</a> &#187; src/oojs/utility/</div>
</div>
<div class="body">
<div class="coverage-summary">
<table>
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="url.js"><a href="url.js.html">url.js</a></td>
<td data-value="94.12" class="pic high"><span class="cover-fill" style="width: 94px;"></span><span class="cover-empty" style="width:6px;"></span></td>
<td data-value="94.12" class="pct high">94.12%</td>
<td data-value="102" class="abs high">(96&nbsp;/&nbsp;102)</td>
<td data-value="92.65" class="pct high">92.65%</td>
<td data-value="68" class="abs high">(63&nbsp;/&nbsp;68)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="1" class="abs high">(1&nbsp;/&nbsp;1)</td>
<td data-value="96" class="pct high">96%</td>
<td data-value="100" class="abs high">(96&nbsp;/&nbsp;100)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Apr 07 2016 19:03:33 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for src\oojs\utility\url.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../../../prettify.css">
<link rel="stylesheet" href="../../../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../../../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">src\oojs\utility\url.js</span></h1>
<h2>
Statements: <span class="metric">94.12% <small>(96 / 102)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">92.65% <small>(63 / 68)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">100% <small>(1 / 1)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">96% <small>(96 / 100)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../../../index.html">All files</a> &#187; <a href="index.html">src/oojs/utility/</a> &#187; url.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">36</span>
<span class="cline-any cline-yes">180</span>
<span class="cline-any cline-yes">36</span>
<span class="cline-any cline-yes">36</span>
<span class="cline-any cline-yes">36</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-yes">385</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">385</span>
<span class="cline-any cline-yes">27</span>
<span class="cline-any cline-yes">27</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">358</span>
<span class="cline-any cline-yes">7</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">351</span>
<span class="cline-any cline-yes">78</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">39</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">12</span>
<span class="cline-any cline-yes">32</span>
<span class="cline-any cline-yes">32</span>
<span class="cline-any cline-yes">4</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">12</span>
<span class="cline-any cline-yes">7</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">12</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">7</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">33</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">30</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">124</span>
<span class="cline-any cline-yes">124</span>
<span class="cline-any cline-yes">9</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">124</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">5</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">10</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">30</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">67</span>
<span class="cline-any cline-yes">57</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">67</span>
<span class="cline-any cline-yes">67</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">124</span>
<span class="cline-any cline-yes">30</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">25</span>
<span class="cline-any cline-yes">53</span>
<span class="cline-any cline-yes">53</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">52</span>
<span class="cline-any cline-yes">8</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">25</span>
<span class="cline-any cline-yes">11</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">25</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">29</span>
<span class="cline-any cline-yes">29</span>
<span class="cline-any cline-yes">29</span>
<span class="cline-any cline-yes">88</span>
<span class="cline-any cline-yes">88</span>
<span class="cline-any cline-yes">9</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">88</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">66</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-yes">22</span>
<span class="cline-any cline-yes">13</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-yes">35</span>
<span class="cline-any cline-yes">10</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">40</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/***
* the fastest url parser in the world.
* don't support ".com.cn" and so on.
*
* @author zero &lt;zero@develop.cc&gt;
*/
&nbsp;
oojs.define({
name: 'url',
namespace: 'oojs.utility',
&nbsp;
/**
* 默认端口号
*/
defaultPort: {
http: 80,
https: 443,
ftp: 21,
tftp: 69,
ssh: 22,
smtp: 25
},
&nbsp;
/**
* 解析url, 返回urlObj.
* @param url {string} 待解析的url字符串
* @param {Object} ignoreOption 配置忽略扫描的部分.比如明确知道url上不包括端口,则可以忽略端口部分以便加快性能.
* @param {boolean} ignoreOption.protocol 忽略protocol部分
* @param {boolean} ignoreOption.host 忽略host部分
* @param {boolean} ignoreOption.port 忽略port部分
* @param {boolean} ignoreOption.path 忽略path部分
* @param {boolean} ignoreOption.extension 忽略extension部分
* @param {boolean} ignoreOption.query 忽略query部分
* @param {boolean} ignoreOption.anchor 忽略anchor部分
* @return {Object} urlObj 解析后的url对象
* @return {string} urlObj.origin 原始url, 比如: http://www.a.com:8080/b/c/d.html?e=1&amp;f=2#ggg
* @return {string} urlObj.protocol 协议, 比如: http
* @return {string} urlObj.host 域名, 比如: www.a.com
* @return {string} urlObj.port 端口号, 比如: 8080
* @return {Array} urlObj.path 路径数组, 比如: [ 'b', 'c', 'd.html' ]
* @return {string} urlObj.extension 扩展名, 比如: html
* @return {Object} urlObj.query 包含了所有url参数的map对象, 比如: { e: '1', f: '2' }
* @return {string} urlObj.anchor 锚点, 比如: ggg
*/
parse: function (url, ignoreOption) {
ignoreOption = ignoreOption || {};
var start = 0;
var end = url.length - 1;
var ch;
var result = {origin: url};
&nbsp;
// Trim leading and trailing ws
while (url.charCodeAt(start) &lt;= 0x20 /*' '*/) <span class="cstat-no" title="statement not covered" >start++;</span>
while (url.charCodeAt(end) &lt;= 0x20 /*' '*/) <span class="cstat-no" title="statement not covered" >end--;</span>
var endLength = end + 1;
&nbsp;
/*
ASCII:
0x20: (space)
0x23: '#'
0x26: '&amp;'
0x2E: '.'
0x2F: '/'
0x3A: ':'
0x3D: '='
0x3F: '?'
0x5E: '^'
*/
// process protocol
if (!ignoreOption.protocol) {
for (var i = start; i &lt;= end; ++i) {
if (url.charCodeAt(i) === 0x3A) {
result.protocol = url.slice(start, i);
start = i + 3;
break;
}
}
}
&nbsp;
// process host
if (!ignoreOption.host) {
var pointArray = [];
for (var i = start; i &lt;= end; ++i) {
ch = url.charCodeAt(i);
&nbsp;
if (ch === 0x2F) {
ignoreOption.port = true;
break;
}
else if (ch === 0x3A) {
break;
}
else if (ch === 0x2E) {
pointArray.push(i);
}
}
result.host = url.slice(start, i);
// get domain from host
<span class="missing-if-branch" title="else path not taken" >E</span>if (pointArray.length &gt; 1) {
result.domain = url.slice(pointArray[pointArray.length - 2] + 1, i);
}
else {
<span class="cstat-no" title="statement not covered" > result.domain = result.host;</span>
}
&nbsp;
start = i + 1;
}
&nbsp;
// process port
if (!ignoreOption.port) {
for (var i = start; i &lt;= end; ++i) {
ch = url.charCodeAt(i);
if (ch === 0x2F) {
break;
}
}
if (i &gt; start) {
result.port = url.slice(start, i);
}
start = i + 1;
}
// convert to int
if (result.port) {
result.port = parseInt(result.port, 10);
}
else if (result.protocol) {
// set default port
result.port = this.defaultPort[result.protocol.toLowerCase()];
}
&nbsp;
// process path
var pathArray = [];
if (!ignoreOption.path) {
var pathBreak = false;
for (var i = start; i &lt;= endLength; ++i) {
ch = url.charCodeAt(i);
if (i === endLength) {
ch = 0x2E;
}
switch (ch) {
case 0x23:
ignoreOption.query = true;
case 0x3F:
ignoreOption.extension = true;
case 0x2E:
pathBreak = true;
case 0x2F:
if (i &gt; start) {
pathArray.push(url.slice(start, i));
}
start = i + 1;
break;
}
&nbsp;
if (pathBreak) {
break;
}
}
}
result.path = pathArray;
&nbsp;
// process extension
if (!ignoreOption.extension) {
for (var i = start; i &lt;= end; ++i) {
ch = url.charCodeAt(i);
if (ch === 0x23) {
ignoreOption.query = true;
break;
}
else if (ch === 0x3F) {
break;
}
}
if (i &gt; start) {
result.extension = url.slice(start, i);
}
start = i + 1;
}
&nbsp;
// process query
var query = {};
if (!ignoreOption.query) {
var queryName = '';
var queryValue;
for (var i = start; i &lt;= endLength; ++i) {
ch = url.charCodeAt(i);
if (i === endLength) {
ch = 0x23;
}
&nbsp;
if (ch === 0x3D) {
queryName = url.slice(start, i);
start = i + 1;
}
else if (ch === 0x23 || ch === 0x26) {
<span class="missing-if-branch" title="else path not taken" >E</span>if (queryName) {
queryValue = url.slice(start, i);
<span class="missing-if-branch" title="if path not taken" >I</span>if (query[queryName]) {
<span class="cstat-no" title="statement not covered" > if (query[queryName].length) {</span>
// query[queryName] 已经是一个数组了
<span class="cstat-no" title="statement not covered" > query[queryName].push(queryValue);</span>
}
else {
// 将 query[queryName] 转化为数组
<span class="cstat-no" title="statement not covered" > query[queryName] = [query[queryName], queryValue];</span>
}
&nbsp;
}
else {
query[queryName] = queryValue;
}
queryName = null;
}
start = i + 1;
if (ch === 0x23) {
break;
}
}
}
}
result.query = query;
&nbsp;
// process anchor
if (!ignoreOption.anchor) {
if (endLength &gt; start) {
result.anchor = url.slice(start, endLength);
}
}
&nbsp;
return result;
}
&nbsp;
});</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Apr 07 2016 19:03:33 GMT+0800 (中国标准时间)</div>
</div>
<script src="../../../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../../../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for tool\</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../prettify.css">
<link rel="stylesheet" href="../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">tool\</span></h1>
<h2>
Statements: <span class="metric">91.67% <small>(11 / 12)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">80% <small>(4 / 5)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">91.67% <small>(11 / 12)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../index.html">All files</a> &#187; tool/</div>
</div>
<div class="body">
<div class="coverage-summary">
<table>
<thead>
<tr>
<th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
<th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
<th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
<th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
<th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
<th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
<th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
<th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
<td class="file high" data-value="test.js"><a href="test.js.html">test.js</a></td>
<td data-value="91.67" class="pic high"><span class="cover-fill" style="width: 91px;"></span><span class="cover-empty" style="width:9px;"></span></td>
<td data-value="91.67" class="pct high">91.67%</td>
<td data-value="12" class="abs high">(11&nbsp;/&nbsp;12)</td>
<td data-value="100" class="pct high">100%</td>
<td data-value="0" class="abs high">(0&nbsp;/&nbsp;0)</td>
<td data-value="80" class="pct high">80%</td>
<td data-value="5" class="abs high">(4&nbsp;/&nbsp;5)</td>
<td data-value="91.67" class="pct high">91.67%</td>
<td data-value="12" class="abs high">(11&nbsp;/&nbsp;12)</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Apr 07 2016 19:03:33 GMT+0800 (中国标准时间)</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../sorter.js"></script>
</body>
</html>
<!doctype html>
<html lang="en">
<head>
<title>Code coverage report for tool\test.js</title>
<meta charset="utf-8">
<link rel="stylesheet" href="../prettify.css">
<link rel="stylesheet" href="../base.css">
<style type='text/css'>
div.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class="header high">
<h1>Code coverage report for <span class="entity">tool\test.js</span></h1>
<h2>
Statements: <span class="metric">91.67% <small>(11 / 12)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Branches: <span class="metric">100% <small>(0 / 0)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Functions: <span class="metric">80% <small>(4 / 5)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Lines: <span class="metric">91.67% <small>(11 / 12)</small></span> &nbsp;&nbsp;&nbsp;&nbsp;
Ignored: <span class="metric"><span class="ignore-none">none</span></span> &nbsp;&nbsp;&nbsp;&nbsp;
</h2>
<div class="path"><a href="../index.html">All files</a> &#187; <a href="index.html">tool/</a> &#187; test.js</div>
</div>
<div class="body">
<pre><table class="coverage">
<tr><td class="line-count">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40</td><td class="line-coverage"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">2</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-yes">1</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">/**
* @file 启动单元测试的工具类
* @author zero(zero@develop.cc)
*/
/* global oojs */
&nbsp;
require('node-oojs');
require('node-oojs-utility');
require('../src/module.js');
&nbsp;
oojs.define({
name: 'test',
deps: {
fs: 'oojs.utility.fileSync'
},
&nbsp;
/**
* 静态构造函数
*/
$test: function () {
var Mocha = require('mocha');
var mocha = new Mocha();
&nbsp;
// 只处理test/unit文件夹下, 以'.unit.js'结尾的文件
this.fs.getFileListSync('test/unit')
.filter(function (file) {
return file.substr(-8) === '.unit.js';
}).forEach(function (file) {
mocha.addFile(file);
});
&nbsp;
// 启动mocha测试
mocha.run(function (failures) {
process.on('exit', <span class="fstat-no" title="function not covered" >function () {</span>
<span class="cstat-no" title="statement not covered" > process.exit(failures);</span>
});
});
}
});
&nbsp;</pre></td></tr>
</table></pre>
</div>
<div class="footer">
<div class="meta">Generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Thu Apr 07 2016 19:03:33 GMT+0800 (中国标准时间)</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../sorter.js"></script>
</body>
</html>

Sorry, the diff of this file is not supported yet

/**
* @file 单元测试类
* @author zero(zero@develop.cc)
*/
var assert = require('assert');
var urlClass = oojs.using('oojs.utility.url');
describe('===== oojs.utility.url =====', function () {
it('protocolTestCase', function () {
var protocolTestCase = [{
origin: 'http://www.a.com',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {}
}, {
origin: 'file:///D:/code/other/adm/adm/adm.html?id=abc&w=200&h=150',
protocol: 'file',
host: '',
domain: '',
extension: 'html',
path: [ 'D:', 'code', 'other', 'adm', 'adm', 'adm' ],
query: { id: 'abc', w: '200', h: '150' }
}];
for (var i = 0, count = protocolTestCase.length; i < count; i++) {
var expect = protocolTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('hostTestCase', function () {
var hostTestCase = [{
origin: 'http://www.a.com',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {}
}, {
origin: 'http://www.a.com:8888',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: [],
query: {}
}, {
origin: 'http://www.a.com/',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {}
}, {
origin: 'http://www.a.com/b/c',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
query: {}
}, {
origin: 'http://www.a.com/#bbb',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {},
anchor: 'bbb'
}, {
origin: 'http://www.a.com/?b=1&c=2',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {b: '1', c: '2'}
}];
for (var i = 0, count = hostTestCase.length; i < count; i++) {
var expect = hostTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('portTestCase', function () {
var portTestCase = [{
origin: 'http://www.a.com',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: [],
query: {}
}, {
origin: 'http://www.a.com:8888',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: [],
query: {}
}, {
origin: 'http://www.a.com:8888/',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: [],
query: {}
}, {
origin: 'http://www.a.com:8888/b/c',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: ['b', 'c'],
query: {}
}, {
origin: 'http://www.a.com:8888/?b=1',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: [],
query: {b: '1'}
}, {
origin: 'http://www.a.com:8888/#bbb',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 8888,
path: [],
query: {},
anchor: 'bbb'
}];
for (var i = 0, count = portTestCase.length; i < count; i++) {
var expect = portTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('pathTestCase', function () {
var pathTestCase = [{
origin: 'http://www.a.com/b',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b'],
query: {}
}, {
origin: 'http://www.a.com/b/',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b'],
query: {}
}, {
origin: 'http://www.a.com/b/c',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
query: {}
}, {
origin: 'http://www.a.com/b/c/',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
query: {}
}, {
origin: 'http://www.a.com/b/c.html',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
extension: 'html',
query: {}
}, {
origin: 'http://www.a.com/b/?c=1&d=2',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b'],
query: {c: '1', d: '2'}
}, {
origin: 'http://www.a.com/b/c?d=1&e=2',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
query: {d: '1', e: '2'}
}, {
origin: 'http://www.a.com/b/c#ddd',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c'],
query: {},
anchor: 'ddd'
}, {
origin: 'http://www.a.com/b#ccc',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b'],
query: {},
anchor: 'ccc'
}];
for (var i = 0, count = pathTestCase.length; i < count; i++) {
var expect = pathTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('extensionTestCase', function () {
var extensionTestCase = [{
origin: 'http://www.a.com/b/c/d',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {}
}, {
origin: 'http://www.a.com/b/c/d?e=1',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1'}
}, {
origin: 'http://www.a.com/b/c/d#eee',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {},
anchor: 'eee'
}, {
origin: 'http://www.a.com/b/c/d.html',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {},
extension: 'html'
}, {
origin: 'http://www.a.com/b/c/d.html?e=1',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1'},
extension: 'html'
}, {
origin: 'http://www.a.com/b/c/d.html#eee',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {},
extension: 'html',
anchor: 'eee'
}];
for (var i = 0, count = extensionTestCase.length; i < count; i++) {
var expect = extensionTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('queryTestCase', function () {
var queryTestCase = [{
origin: 'http://www.a.com/b/c/d.html?e=1',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1'},
extension: 'html'
}, {
origin: 'http://www.a.com/b/c/d.html?e=1&f=2',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html'
}, {
origin: 'http://www.a.com/b/c/d.html?e=1&f=2#ggg',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html',
anchor: 'ggg'
}];
for (var i = 0, count = queryTestCase.length; i < count; i++) {
var expect = queryTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('anchorTestCase', function () {
var anchorTestCase = [{
origin: 'http://www.a.com/b/c/d.html?e=1&f=2',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html'
}, {
origin: 'http://www.a.com/b/c/d.html?e=1&f=2#ggg',
protocol: 'http',
host: 'www.a.com',
domain: 'a.com',
port: 80,
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html',
anchor: 'ggg'
}];
for (var i = 0, count = anchorTestCase.length; i < count; i++) {
var expect = anchorTestCase[i];
var actual = urlClass.parse(expect.origin);
assert.deepEqual(actual, expect);
}
});
it('protocol + host + port', function () {
var testCase = [{
origin: 'http://www.a.com/b/c/d.html?e=1&f=2#ggg',
protocol: 'http',
host: 'www.a.com',
port: 80,
domain: 'a.com',
path: [],
query: {}
}, {
origin: 'http://www.a.com',
protocol: 'http',
host: 'www.a.com',
port: 80,
domain: 'a.com',
path: [],
query: {}
}, {
origin: 'http://www.a.com/',
protocol: 'http',
host: 'www.a.com',
port: 80,
domain: 'a.com',
path: [],
query: {}
}];
for (var i = 0, count = testCase.length; i < count; i++) {
var expect = testCase[i];
var actual = urlClass.parse(expect.origin, {path: true, query: true, extension: true, anchor: true});
assert.deepEqual(actual, expect);
}
});
it('host + port', function () {
var testCase = [{
origin: 'www.a.com',
host: 'www.a.com',
domain: 'a.com',
path: [],
query: {}
}, {
origin: 'www.a.com:8080',
host: 'www.a.com',
domain: 'a.com',
port: 8080,
path: [],
query: {}
}];
for (var i = 0, count = testCase.length; i < count; i++) {
var expect = testCase[i];
var actual = urlClass.parse(expect.origin, {
protocol: true,
path: true,
query: true,
extension: true,
anchor: true
});
assert.deepEqual(actual, expect);
}
});
it('host + port + path + extension + query + anchor', function () {
var testCase = [{
origin: 'www.a.com/b/c/d.html?e=1&f=2#ggg',
host: 'www.a.com',
domain: 'a.com',
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html',
anchor: 'ggg'
}];
for (var i = 0, count = testCase.length; i < count; i++) {
var expect = testCase[i];
var actual = urlClass.parse(expect.origin, {protocol: true});
assert.deepEqual(actual, expect);
}
});
it('path + extension + query + anchor', function () {
var testCase = [{
origin: '/b/c/d.html?e=1&f=2#ggg',
path: ['b', 'c', 'd'],
query: {e: '1', f: '2'},
extension: 'html',
anchor: 'ggg'
}];
for (var i = 0, count = testCase.length; i < count; i++) {
var expect = testCase[i];
var actual = urlClass.parse(expect.origin, {protocol: true, host: true, port: true});
assert.deepEqual(actual, expect);
}
});
});
/**
* @file 单元测试类
* @author zero(zero@develop.cc)
*/
var assert = require('assert');
require('node-oojs');
var testCase = [{
origin: 'http://www.aaa.com',
protocol: 'http',
host: 'www.aaa.com',
anchor: undefined,
path: undefined,
query: undefined
},{
}];
describe('===== oojs.utility.url =====', function () {
it('.parse(url, , true, false):aaa', function () {
var urlClass = oojs.using('oojs.utility.url');
var testUrl = 'http://www.a.com.cn:8080/b/c/d.html?e=1&f=2#ggg';
var actual = urlClass.parse(testUrl);
console.log(actual);
});
/*
it('.parse(url, , true, false)', function () {
var urlClass = oojs.using('oojs.utility.url');
var testUrl = 'http://www.aaa.com:8080/b/c/d.html?e=1&f=2#ggg';
var actual = urlClass.parse(testUrl, true, false);
var expected = {
origin: 'http://www.aaa.com:8080/b/c/d.html?e=1&f=2#ggg',
protocol: 'http',
host: 'www.aaa.com',
port: '8080',
anchor: 'ggg',
path: [ 'b', 'c', 'd.html' ],
query: { e: '1', f: '2' }
};
console.log(actual);
assert.equal(actual.origin, expected.origin);
assert.equal(actual.protocol, expected.protocol);
assert.equal(actual.host, expected.host);
assert.equal(actual.port, expected.port);
assert.equal(actual.anchor, expected.anchor);
assert.equal(actual.path.length, expected.path.length);
assert.equal(actual.query.length, expected.query.length);
var nodeUrlClass = require('url');
//console.log(nodeUrlClass.parse(testUrl));
});
it('.parse(url, , true, false)', function () {
var urlClass = oojs.using('oojs.utility.url');
var testUrl = 'http://www.aaa.com:8080/b/c/d?e=1&f=2#ggg';
var actual = urlClass.parse(testUrl, true, false);
console.log(actual);
});
*/
});
/**
* @file 启动性能测试工具类
* @author zhangziqiu<zhangziqiu@qq.com>
*/
require('node-oojs');
require('node-oojs-utility');
require('../src/module.js');
oojs.define({
name: 'benchmark',
deps: {
fs: 'oojs.utility.fileSync'
},
/**
* 静态构造函数
*/
$benchmark: function () {
// 只处理test/benchmark文件夹下, 以'.benchmark.js'结尾的文件
this.fs.getFileListSync('test/benchmark')
.filter(function (file) {
return file.substr(-13) === '.benchmark.js';
}).forEach(function (file) {
require(file);
});
}
});
/**
* @file 启动代码覆盖率检查工具类
* @author zero(zero@develop.cc)
*/
require('node-oojs');
require('node-oojs-utility');
require('../src/module.js');
oojs.define({
name: 'coverage',
deps: {
fs: 'oojs.utility.fileSync'
},
/**
* 静态构造函数
*/
$coverage: function () {
// 直接从项目文件夹获取
var cli = require('../node_modules/istanbul/lib/cli.js');
// 启动单测, 测试单测的代码覆盖率, 结果放到 test/coverage 目录下
cli.runToCompletion(['cover', 'tool/test.js', '--dir=test/coverage']);
}
});
/**
* @file 启动单元测试的工具类
* @author zero(zero@develop.cc)
*/
/* global oojs */
require('node-oojs');
require('node-oojs-utility');
require('../src/module.js');
oojs.define({
name: 'test',
deps: {
fs: 'oojs.utility.fileSync'
},
/**
* 静态构造函数
*/
$test: function () {
var Mocha = require('mocha');
var mocha = new Mocha();
// 只处理test/unit文件夹下, 以'.unit.js'结尾的文件
this.fs.getFileListSync('test/unit')
.filter(function (file) {
return file.substr(-8) === '.unit.js';
}).forEach(function (file) {
mocha.addFile(file);
});
// 启动mocha测试
mocha.run(function (failures) {
process.on('exit', function () {
process.exit(failures);
});
});
}
});