Skip to content

Commit

Permalink
Merge pull request #8 from xudafeng/unittest
Browse files Browse the repository at this point in the history
Unittest
  • Loading branch information
xudafeng committed Oct 29, 2016
2 parents a7743fd + 0578e6f commit 0656603
Show file tree
Hide file tree
Showing 8 changed files with 253 additions and 217 deletions.
6 changes: 4 additions & 2 deletions .travis.yml
@@ -1,6 +1,8 @@
language: node_js
sudo: false
node_js:
- "4.1.2"
- "4"
- "5"
- "6"
sudo: false
script: make travis
after_script: "npm install coveralls@2 && cat ./coverage/lcov.info | coveralls"
18 changes: 11 additions & 7 deletions Makefile
Expand Up @@ -4,20 +4,24 @@ npm_bin= $$(npm bin)
all: test
install:
@npm install
server:
npm i startserver --save-dev
${npm_bin}/startserver -s -p 8080 &
pre-test: server
sleep 5
test:
@node --harmony \
@node \
${npm_bin}/istanbul cover ${npm_bin}/_mocha \
-- \
--timeout 10000 \
--require co-mocha
travis: install
@NODE_ENV=test $(BIN) $(FLAGS) \
./node_modules/.bin/istanbul cover \
./node_modules/.bin/_mocha \
travis: install pre-test
@node \
${npm_bin}/istanbul cover ${npm_bin}/_mocha \
--report lcovonly \
-- -u exports \
$(REQUIRED) \
$(TESTS) \
--timeout 10000 \
--require co-mocha \
--bail
jshint:
@${npm_bin}/jshint .
Expand Down
93 changes: 39 additions & 54 deletions README.md
Expand Up @@ -17,57 +17,34 @@
[download-image]: https://img.shields.io/npm/dm/detect-port.svg?style=flat-square
[download-url]: https://npmjs.org/package/detect-port

> port detector
> JavaScript Implementation of Port Detector
## Installment

```shell
$ npm i detect-port -g
```

## Quick Start

```shell
# detect port 80
$ detect -p 80

# or like this
$ detect --port 80

# will get result below
$ port: 80 was occupied, try port: 1024

# with verbose
$ detect --port 80 --verbose

# more help?
$ detect -h
```

## Use As Module
## Usage

```shell
$ npm i detect-port --save
```

```javascript
var detect = require('detect-port');
const detect = require('detect-port');

/**
* normal usage
* callback usage
*/

detect(port, function(error, _port) {
detect(port, (err, _port) => {
if (err) {
console.log(err);
}

if (port === _port) {
console.log('port: %d was not occupied', port);
console.log(`port: ${port} was not occupied`);
} else {
console.log('port: %d was occupied, try port: %d', port, _port);
console.log(`port: ${port} was occupied, try port: ${_port}`);
}
});

/**
* use in co v3
* for a yield syntax instead of callback function implement
*/

Expand All @@ -77,46 +54,54 @@ co(function *() {
var _port = yield detect(port);

if (port === _port) {
console.log('port: %d was not occupied', port);
console.log(`port: ${port} was not occupied`);
} else {
console.log('port: %d was occupied, try port: %d', port, _port);
console.log(`port: ${port} was occupied, try port: ${_port}`);
}
})();

/**
* use as a promise
*/

var promisePort = detect(port);

promisePort.then(function(_port) {
if (port === _port) {
console.log('port: %d was not occupied', port);
} else {
console.log('port: %d was occupied, try port: %d', port, _port);
}
});
detect(port)
.then(_port => {
if (port === _port) {
console.log(`port: ${port} was not occupied`);
} else {
console.log(`port: ${port} was occupied, try port: ${_port}`);
}
})
.catch(err => {
console.log(err);
});

```

## Clone and Run test
## Cli Tool

```shell
$ npm i detect-port -g
```

# clone from git
$ git clone git://github.com/xudafeng/detect-port.git
### Quick Start

$ cd detect-port
```shell
# get an available port randomly
$ detect

# install dependencies
$ make install
# detect pointed port
$ detect 80

# test and coverage
$ make test
# more help
$ detect --help
```

## Authors

- [xudafeng](//github.com/xudafeng)
- [zenzhu](//github.com/zenzhu)

## License

[MIT](LICENSE)

Copyright (c) 2015 xdf
112 changes: 38 additions & 74 deletions bin/detect-port
Expand Up @@ -14,87 +14,51 @@

'use strict';

var fs = require('fs');
var path = require('path');
var program = require('commander');
var pkg = require('../package');
const pkg = require('../package');

var options = {
port: 8080,
verbose: false
};
const args = process.argv.slice(2);
const arg_0 = args[0];

program
.usage('[options] [arguments]')
.option('-v, --versions', 'show version and exit')
.option('-p, --port <d>', 'set port for detect (default: 8080)')
.option('--verbose', 'show more debugging information')
.helpInformation = function() {
return [
'',
' \u001b[37m' + pkg.description + '\u001b[0m',
'',
' Usage:',
' ' + this._name + ' or detect-port ' + this.usage(),
'',
' Options:',
'' + this.optionHelp().replace(/^/gm, ' '),
'',
' Further help:',
'',
' \u001b[4m' + pkg.homepage + '\u001b[0m',
'',
''
].join('\n');
};

program.parse(process.argv);

if (program.versions) {
console.log('%s version: %s', pkg.name, pkg.version);
if (!!~['-v', '--version'].indexOf(arg_0)) {
console.log(pkg.version);
process.exit(0);
}

var camelcase = function(str) {
return str.split('-').reduce(function(str, word){
return str + word[0].toUpperCase() + word.slice(1);
});
};

var getConfig = function(program) {
var cfg = {};
const port = parseInt(arg_0, 10);

program.options.forEach(function(item) {
var key = camelcase(item.name());
const main = require('..');

if(key in program) {
if (!arg_0) {
const random = Math.floor(9000 + Math.random() * (65535 - 9000));

if (typeof program[key] !== 'function') {
cfg[key] = program[key];
}
main(random, (err, port) => {
if (err) {
console.log(`get available port failed with ${err}`);
}
console.log(`get available port ${port} randomly`);
});
return cfg;
};

var merge = function(r, s) {
for (var i in s) {
r[i] = s[i];
}
};

merge(options, getConfig(program));

global.__detect = global.__detect || {};
global.__detect.options = options;

var detect = require('../lib');
var port = options.port;

detect(port, function(error, _port) {
if (port === _port) {
console.log('port: %d was not occupied', port);
} else {
console.log('port: %d was occupied, try port: %d', port, _port);
}
});
} else if (isNaN(port)) {
console.log();
console.log(` \u001b[37m${pkg.description}\u001b[0m`);
console.log();
console.log(' Usage:');
console.log();
console.log(` ${pkg.name} [port]`);
console.log();
console.log(' Options:');
console.log();
console.log(' -v, --version show version and exit');
console.log(' -h, --help output usage information');
console.log();
console.log(' Further help:');
console.log();
console.log(` ${pkg.homepage}`);
console.log();
} else {
main(port, (err, port) => {
if (err) {
console.log(`get available port failed with ${err}`);
}
console.log(`get available port ${port}`);
});
}

0 comments on commit 0656603

Please sign in to comment.