├── .gitignore
├── .travis.yml
├── lib
├── util.js
├── package.js
└── require.js
├── .jshintrc
├── .editorconfig
├── test
├── fixtures
│ ├── require.js
│ ├── package.json
│ ├── require.html
│ └── package.html
├── test_package_remote.js
├── test_package_local.js
├── test_require_remote.js
└── test_require_local.js
├── .jscs.json
├── README.md
├── index.js
├── package.json
└── gulpfile.js
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | temp/
3 | coverage/
4 | npm-debug.log
5 | .DS_Store
6 | .idea
7 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - '0.10'
4 | after_script:
5 | - npm run coveralls
6 |
--------------------------------------------------------------------------------
/lib/util.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var stripQuotes = function(jqElement) {
4 | return jqElement.html().replace(/"|'/g, '');
5 | };
6 |
7 | module.exports = {
8 | stripQuotes: stripQuotes
9 | };
10 |
--------------------------------------------------------------------------------
/.jshintrc:
--------------------------------------------------------------------------------
1 | {
2 | "curly": true,
3 | "eqeqeq": true,
4 | "immed": true,
5 | "latedef": true,
6 | "newcap": true,
7 | "noarg": true,
8 | "sub": true,
9 | "undef": true,
10 | "unused": true,
11 | "boss": true,
12 | "eqnull": true,
13 | "node": true,
14 | "globals": {
15 | "describe" : false,
16 | "it" : false,
17 | "before" : false,
18 | "beforeEach" : false,
19 | "after" : false,
20 | "afterEach" : false
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig helps developers define and maintain consistent
2 | # coding styles between different editors and IDEs
3 | # editorconfig.org
4 |
5 | root = true
6 |
7 |
8 | [*]
9 |
10 | # Change these settings to your own preference
11 | indent_style = space
12 | indent_size = 2
13 |
14 | # We recommend you to keep these unchanged
15 | end_of_line = lf
16 | charset = utf-8
17 | trim_trailing_whitespace = true
18 | insert_final_newline = true
19 |
20 | [*.md]
21 | trim_trailing_whitespace = false
22 |
--------------------------------------------------------------------------------
/test/fixtures/require.js:
--------------------------------------------------------------------------------
1 |
2 | require('path');
3 | require('lodash');
4 | require('unknown-package-name');
5 | require('./file.js');
6 | require('./folder/file.js');
7 | require('./file-or-folder');
8 | require('../file.js');
9 | require('../folder/file.js');
10 | require('../file-or-folder');
11 | require('../../file.js');
12 | require('../../folder/file.js');
13 | require('../../file-or-folder');
14 | require('./');
15 | require('..');
16 | require('../');
17 | require('../..');
18 | require('../../');
19 | require('.');
20 | require('...');
21 | require('/');
22 |
--------------------------------------------------------------------------------
/.jscs.json:
--------------------------------------------------------------------------------
1 | {
2 | "requireCurlyBraces": ["if", "else", "for", "while", "do", "try", "catch"],
3 | "requireSpaceAfterKeywords": ["if", "else", "for", "while", "do", "switch", "return", "try", "catch"],
4 | "disallowSpaceBeforeBinaryOperators": [",", ":"],
5 | "disallowSpaceAfterBinaryOperators": ["!"],
6 | "requireSpaceBeforeBinaryOperators": ["?", "+", "-", "/", "*", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
7 | "requireSpaceAfterBinaryOperators": ["?", "+", "/", "*", ":", "=", "==", "===", "!=", "!==", ">", ">=", "<", "<="],
8 | "disallowImplicitTypeConversion": ["string"],
9 | "disallowKeywords": ["with"],
10 | "disallowMultipleLineBreaks": true,
11 | "disallowKeywordsOnNewLine": ["else"],
12 | "disallowTrailingWhitespace": true,
13 | "requireLineFeedAtFileEnd": true,
14 | "validateJSDoc": {
15 | "checkParamNames": true,
16 | "requireParamTypes": true
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # github-linker-core
2 | [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-url]][daviddm-image] [![Coverage Status][coveralls-image]][coveralls-url]
3 |
4 | > The [GitHub-Linker](https://github.com/stefanbuck/github-linker) core
5 |
6 |
7 | ## License
8 |
9 | Copyright (c) 2014 Stefan Buck. Licensed under the MIT license.
10 |
11 |
12 |
13 | [npm-url]: https://npmjs.org/package/github-linker-core
14 | [npm-image]: https://badge.fury.io/js/github-linker-core.svg
15 | [travis-url]: https://travis-ci.org/stefanbuck/github-linker-core
16 | [travis-image]: https://travis-ci.org/stefanbuck/github-linker-core.svg?branch=master
17 | [daviddm-url]: https://david-dm.org/stefanbuck/github-linker-core.svg?theme=shields.io
18 | [daviddm-image]: https://david-dm.org/stefanbuck/github-linker-core
19 | [coveralls-url]: https://coveralls.io/r/stefanbuck/github-linker-core
20 | [coveralls-image]: https://coveralls.io/repos/stefanbuck/github-linker-core/badge.png
21 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | * github-linker-core
3 | * https://github.com/stefanbuck/github-linker
4 | *
5 | * Copyright (c) 2014 Stefan Buck
6 | * Licensed under the MIT license.
7 | */
8 |
9 | 'use strict';
10 |
11 | var _ = require('lodash');
12 | var pkg = require('./lib/package');
13 | var reqr = require('./lib/require');
14 |
15 | var getType = function(url) {
16 |
17 | var urlContains = function(indicator) {
18 | return url.indexOf(indicator) === url.length - indicator.length;
19 | };
20 | var lookup = {
21 | '/package.json': 'npm',
22 | '/bower.json': 'bower',
23 | '.js': 'js',
24 | '.coffee': 'coffee'
25 | };
26 |
27 | return _.find(lookup, function(type, urlFragment) {
28 | return urlContains(urlFragment);
29 | });
30 | };
31 |
32 | module.exports = function($, url, options, cb) {
33 |
34 | var type = getType(url);
35 | var dictionary = options.dictionary || {
36 | npm: require('./lib/dictionary/npm.js'),
37 | bower: require('./lib/dictionary/bower.js')
38 | };
39 |
40 | if (type === 'npm' || type === 'bower') {
41 | pkg($, type, dictionary, cb);
42 | } else if (type === 'js' || type === 'coffee') {
43 | reqr($, type, url, dictionary.npm, cb);
44 | }
45 | };
46 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "github-linker-core",
3 | "description": "The GitHub Linker core",
4 | "version": "0.0.1",
5 | "homepage": "https://github.com/stefanbuck/github-linker",
6 | "bugs": "https://github.com/stefanbuck/github-linker-core/issues",
7 | "license": "MIT",
8 | "main": "index.js",
9 | "author": {
10 | "name": "Stefan Buck",
11 | "email": "dev@stefanbuck.com",
12 | "url": "http://stefanbuck.com"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "https://github.com/stefanbuck/github-linker-core"
17 | },
18 | "keywords": [],
19 | "dependencies": {
20 | "debug": "1.0.4",
21 | "jquery": "^2.1.1",
22 | "lodash": "2.4.1"
23 | },
24 | "devDependencies": {
25 | "coveralls": "^2.10.0",
26 | "gulp": "^3.6.2",
27 | "gulp-bump": "^0.1.8",
28 | "gulp-istanbul": "^0.2.0",
29 | "gulp-jscs": "^0.4.2",
30 | "gulp-jshint": "^1.5.5",
31 | "gulp-load-plugins": "^0.5.1",
32 | "gulp-mocha": "^0.4.1",
33 | "gulp-plumber": "^0.6.2",
34 | "gulp-util": "2.2.16",
35 | "jshint-stylish": "^0.2.0",
36 | "should": "^3.3.1",
37 | "jsdom": "^1.0.0-pre.3"
38 | },
39 | "scripts": {
40 | "coveralls": "gulp test && cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
41 | "test": "gulp test"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/test/fixtures/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "playground-repo",
3 | "description": "My personal playground",
4 | "version": "0.0.1",
5 | "homepage": "https://github.com/stefanbuck/playground-repo",
6 | "bugs": "https://github.com/stefanbuck/playground-repo/issues",
7 | "license": "MIT",
8 | "main": "index.js",
9 | "author": {
10 | "name": "Stefan Buck",
11 | "email": "dev@stefanbuck.com",
12 | "url": "http://stefanbuck.com"
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "https://github.com/stefanbuck/playground-repo"
17 | },
18 | "keywords": [],
19 | "dependencies": {
20 | "lodash": "2.4.1",
21 | "request": "^2.40.0",
22 | "modernizr": "Modernizr/Modernizr",
23 | "backbone": "jashkenas/backbone#master",
24 | "jquery": "jquery/jquery#1.x-master",
25 | "unknown-package-name": "latest"
26 | },
27 | "devDependencies": {
28 | "chai": "^1.9.1",
29 | "gulp": "^3.6.2"
30 | },
31 | "optionalDependencies": {
32 | "should": "^3.3.1"
33 | },
34 | "peerDependencies": {
35 | "yo": ">=1.0.0"
36 | },
37 | "scripts": {
38 | "coveralls": "gulp test && cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
39 | "test": "gulp test"
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var gulp = require('gulp');
4 | var plugins = require('gulp-load-plugins')();
5 |
6 | var paths = {
7 | lint: ['./gulpfile.js', './lib/**/*.js', './index.js', '!./lib/dictionary/*.js'],
8 | watch: ['./gulpfile.js', './lib/**/*.js', './index.js', './test/**/*.js', '!test/{temp,temp/**}', '!./lib/dictionary/*.js'],
9 | tests: ['./test/**/*.js', '!test/{temp,temp/**}', '!test/fixtures/**'],
10 | source: ['./lib/**/*.js', './index.js']
11 | };
12 |
13 | gulp.task('lint', function () {
14 | return gulp.src(paths.lint)
15 | .pipe(plugins.jshint('.jshintrc'))
16 | .pipe(plugins.jscs())
17 | .pipe(plugins.jshint.reporter('jshint-stylish'));
18 | });
19 |
20 | gulp.task('istanbul', function (cb) {
21 | gulp.src(paths.source)
22 | .pipe(plugins.istanbul()) // Covering files
23 | .on('finish', function () {
24 | gulp.src(paths.tests)
25 | .pipe(plugins.plumber())
26 | .pipe(plugins.mocha())
27 | .pipe(plugins.istanbul.writeReports()) // Creating the reports after tests runned
28 | .on('finish', function() {
29 | process.chdir(__dirname);
30 | cb();
31 | });
32 | });
33 | });
34 |
35 | gulp.task('bump', ['test'], function () {
36 | var bumpType = plugins.util.env.type || 'patch'; // major.minor.patch
37 |
38 | return gulp.src(['./package.json'])
39 | .pipe(plugins.bump({ type: bumpType }))
40 | .pipe(gulp.dest('./'));
41 | });
42 |
43 | gulp.task('watch', ['test'], function () {
44 | gulp.watch(paths.watch, ['test']);
45 | });
46 |
47 | gulp.task('test', ['lint', 'istanbul']);
48 |
49 | gulp.task('release', ['bump']);
50 |
51 | gulp.task('default', ['test']);
52 |
--------------------------------------------------------------------------------
/lib/package.js:
--------------------------------------------------------------------------------
1 | /*
2 | * github-linker-core
3 | * https://github.com/stefanbuck/github-linker
4 | *
5 | * Copyright (c) 2014 Stefan Buck
6 | * Licensed under the MIT license.
7 | */
8 |
9 | 'use strict';
10 |
11 | var stripQuotes = require('./util.js').stripQuotes;
12 | var SORRY = 'Sorry, there is no link for this package available';
13 |
14 | module.exports = function($, type, dictionary, cb) {
15 |
16 | var $root, $row, $name, $version, name, version, link;
17 | var types = ['dependencies', 'devDependencies', 'peerDependencies', 'optionalDependencies'];
18 | var result = [];
19 | var registryList = dictionary[type];
20 |
21 | types.forEach(function(selector) {
22 | $root = $('.nt:contains(\'' + selector + '\')');
23 |
24 | if (!$root || $root.length === 0) {
25 | return;
26 | }
27 |
28 | $row = $root.closest('tr').next();
29 |
30 | while ($row) {
31 | $name = $row.find('.nt');
32 | $version = $row.find('.s2');
33 |
34 | if (!$name.length || !$version.length) {
35 | return;
36 | }
37 |
38 | name = stripQuotes($name);
39 | version = stripQuotes($version);
40 |
41 | link = registryList[name];
42 |
43 | if (version.split('/').length === 2) {
44 | link = 'https://github.com/' + version.replace('#', '/tree/');
45 |
46 | } else if (!link && type === 'npm' ) {
47 | link = 'https://www.npmjs.org/package/' + name;
48 | }
49 |
50 | if (link) {
51 | var $link = $('');
52 | $link.attr('href', link);
53 | $name.wrap($link);
54 |
55 | } else {
56 | $name.addClass('tooltipped tooltipped-e').attr('aria-label', SORRY);
57 | }
58 |
59 | result.push({
60 | el: $name,
61 | version: version,
62 | name: name,
63 | link: link
64 | });
65 |
66 | $row = $row.next();
67 | }
68 | });
69 |
70 | cb(null, result);
71 | };
72 |
--------------------------------------------------------------------------------
/lib/require.js:
--------------------------------------------------------------------------------
1 | /*
2 | * github-linker-core
3 | * https://github.com/stefanbuck/github-linker
4 | *
5 | * Copyright (c) 2014 Stefan Buck
6 | * Licensed under the MIT license.
7 | */
8 |
9 | 'use strict';
10 |
11 | var util = require('util');
12 | var path = require('path');
13 | var stripQuotes = require('./util.js').stripQuotes;
14 |
15 | // List of nodejs core modules (v0.11.13)
16 | // see: https://github.com/joyent/node/blob/master/lib/repl.js#L72
17 | var coreModules = ['assert', 'buffer', 'child_process', 'cluster',
18 | 'crypto', 'dgram', 'dns', 'domain', 'events', 'fs', 'http', 'https', 'net',
19 | 'os', 'path', 'punycode', 'querystring', 'readline', 'stream',
20 | 'string_decoder', 'tls', 'tty', 'url', 'util', 'vm', 'zlib', 'smalloc',
21 | 'tracing'];
22 | var GITHUBCOM = 'https://github.com';
23 | var NODEAPICOM = 'http://nodejs.org/api/%s.html';
24 |
25 | var getRequireLink = function(npmRegistry, url, requireValue) {
26 |
27 | var link = '';
28 |
29 | if (coreModules.indexOf(requireValue) !== -1 ) {
30 |
31 | link = util.format(NODEAPICOM, requireValue);
32 |
33 | } else if (npmRegistry[requireValue]) {
34 |
35 | link = npmRegistry[requireValue];
36 |
37 | } else {
38 | var basePath = url.replace(GITHUBCOM, '');
39 | var requirePath = path.resolve(path.dirname(basePath), requireValue);
40 | if (path.extname(requirePath)) {
41 | link = requirePath;
42 | } else {
43 | link = 'resolve:' + requirePath;
44 | }
45 | }
46 |
47 | return link;
48 | };
49 |
50 | module.exports = function($, type, url, dictionary, cb) {
51 |
52 | var $requires, $coffeeRequires, $item, name, link;
53 | var result = [];
54 |
55 | // Search for require dom elements
56 | $requires = $('span.nx').filter(function() {
57 | return $(this).text() === 'require';
58 | }).next().next();
59 |
60 | if (type === 'coffee') {
61 | $coffeeRequires = $('span.nx').filter(function() {
62 | return $(this).text() === 'require';
63 | }).next();
64 | $requires = $.merge($coffeeRequires, $requires);
65 | }
66 |
67 | $requires.each(function(index, item) {
68 | $item = $(item);
69 |
70 | name = stripQuotes($item);
71 | link = getRequireLink(dictionary, url, name);
72 |
73 | result.push({
74 | el: $item,
75 | name: name,
76 | link: link
77 | });
78 | });
79 | cb(null, result);
80 | };
81 |
--------------------------------------------------------------------------------
/test/test_package_remote.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var githubLinkerCore = require('../');
4 | var assert = require('should');
5 | var _ = require('lodash');
6 | var env = require('jsdom').env;
7 |
8 | describe('package.json', function() {
9 |
10 | describe('remote', function() {
11 |
12 | this.timeout(4000);
13 |
14 | var $, result;
15 | var url = 'https://github.com/stefanbuck/github-linker-core/blob/master/test/fixtures/package.json';
16 |
17 | before(function(done) {
18 | $ = result = null;
19 | var options = {
20 | dictionary: {
21 | npm: {
22 | 'lodash': 'https://github.com/lodash/lodash'
23 | }
24 | }
25 | };
26 |
27 | env(url, function(err, window) {
28 | if (err) {
29 | return done(err);
30 | }
31 | $ = require('jquery')(window);
32 | githubLinkerCore($, url, options, function(err, _result) {
33 | if (err) {
34 | throw err;
35 | }
36 | result = _result;
37 | done();
38 | });
39 | });
40 | });
41 |
42 | it('found dependencies', function() {
43 |
44 | // TODO Evaluate why this doesn't work
45 | // result.should.have.length(10);
46 |
47 | result.length.should.equal(10);
48 | });
49 |
50 | it('check order', function() {
51 | result.length.should.equal(10);
52 | var pkgNames = ['lodash', 'request', 'modernizr', 'backbone', 'jquery', 'unknown-package-name', 'chai', 'gulp', 'yo', 'should'];
53 | _.each(result, function(item, index) {
54 | item.name.should.equal( pkgNames[index] );
55 | });
56 | });
57 |
58 | it('check link replacement', function() {
59 | $('a.github-linker').length.should.equal(10);
60 | });
61 |
62 | it('link https://github.com/lodash/lodash', function() {
63 | var item = _.findWhere(result, {
64 | name: 'lodash'
65 | });
66 |
67 | (item.link === null).should.equal(false);
68 | item.link.should.equal('https://github.com/lodash/lodash');
69 | });
70 |
71 | it('link https://www.npmjs.org/package/request', function() {
72 | var item = _.findWhere(result, {
73 | name: 'request'
74 | });
75 |
76 | (item.link === null).should.equal(false);
77 | item.link.should.equal('https://www.npmjs.org/package/request');
78 | });
79 |
80 | it('link https://github.com/Modernizr/Modernizr', function() {
81 | var item = _.findWhere(result, {
82 | name: 'modernizr'
83 | });
84 |
85 | (item.link === null).should.equal(false);
86 | item.link.should.equal('https://github.com/Modernizr/Modernizr');
87 | });
88 |
89 | it('link https://github.com/jashkenas/backbone/tree/master', function() {
90 | var item = _.findWhere(result, {
91 | name: 'backbone'
92 | });
93 |
94 | (item.link === null).should.equal(false);
95 | item.link.should.equal('https://github.com/jashkenas/backbone/tree/master');
96 | });
97 |
98 | it('link https://github.com/jquery/jquery/tree/1.x-master', function() {
99 | var item = _.findWhere(result, {
100 | name: 'jquery'
101 | });
102 |
103 | (item.link === null).should.equal(false);
104 | item.link.should.equal('https://github.com/jquery/jquery/tree/1.x-master');
105 | });
106 |
107 | it('link https://www.npmjs.org/package/unknown-package-name', function() {
108 | var item = _.findWhere(result, {
109 | name: 'unknown-package-name'
110 | });
111 |
112 | (item.link === null).should.equal(false);
113 | item.link.should.equal('https://www.npmjs.org/package/unknown-package-name');
114 | });
115 | });
116 | });
117 |
--------------------------------------------------------------------------------
/test/test_package_local.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var githubLinkerCore = require('../');
4 | var fs = require('fs');
5 | var path = require('path');
6 | var assert = require('should');
7 | var _ = require('lodash');
8 | var env = require('jsdom').env;
9 |
10 | describe('package.json', function() {
11 |
12 | describe('local', function() {
13 | var $, result;
14 | var url = 'https://github.com/stefanbuck/github-linker-core/blob/master/test/fixtures/package.json';
15 | var file = path.resolve(__dirname, 'fixtures/package.html');
16 |
17 | before(function(done) {
18 | $ = result = null;
19 | var html = fs.readFileSync(file, 'utf-8');
20 | var options = {
21 | dictionary: {
22 | npm: {
23 | 'lodash': 'https://github.com/lodash/lodash'
24 | }
25 | }
26 | };
27 |
28 | env(html, function(err, window) {
29 | if (err) {
30 | return done(err);
31 | }
32 | $ = require('jquery')(window);
33 |
34 | githubLinkerCore($, url, options, function(err, _result) {
35 | if (err) {
36 | throw err;
37 | }
38 | result = _result;
39 | done();
40 | });
41 | });
42 | });
43 |
44 | it('found dependencies', function() {
45 |
46 | // TODO Evaluate why this doesn't work
47 | // result.should.have.length(10);
48 |
49 | result.length.should.equal(10);
50 | });
51 |
52 | it('check order', function() {
53 | result.length.should.equal(10);
54 | var pkgNames = ['lodash', 'request', 'modernizr', 'backbone', 'jquery', 'unknown-package-name', 'chai', 'gulp', 'yo', 'should'];
55 | _.each(result, function(item, index) {
56 | item.name.should.equal( pkgNames[index] );
57 | });
58 | });
59 |
60 | it('check link replacement', function() {
61 | $('a.github-linker').length.should.equal(10);
62 | });
63 |
64 | it('link https://github.com/lodash/lodash', function() {
65 | var item = _.findWhere(result, {
66 | name: 'lodash'
67 | });
68 |
69 | (item.link === null).should.equal(false);
70 | item.link.should.equal('https://github.com/lodash/lodash');
71 | });
72 |
73 | it('link https://www.npmjs.org/package/request', function() {
74 | var item = _.findWhere(result, {
75 | name: 'request'
76 | });
77 |
78 | (item.link === null).should.equal(false);
79 | item.link.should.equal('https://www.npmjs.org/package/request');
80 | });
81 |
82 | it('link https://github.com/Modernizr/Modernizr', function() {
83 | var item = _.findWhere(result, {
84 | name: 'modernizr'
85 | });
86 |
87 | (item.link === null).should.equal(false);
88 | item.link.should.equal('https://github.com/Modernizr/Modernizr');
89 | });
90 |
91 | it('link https://github.com/jashkenas/backbone/tree/master', function() {
92 | var item = _.findWhere(result, {
93 | name: 'backbone'
94 | });
95 |
96 | (item.link === null).should.equal(false);
97 | item.link.should.equal('https://github.com/jashkenas/backbone/tree/master');
98 | });
99 |
100 | it('link https://github.com/jquery/jquery/tree/1.x-master', function() {
101 | var item = _.findWhere(result, {
102 | name: 'jquery'
103 | });
104 |
105 | (item.link === null).should.equal(false);
106 | item.link.should.equal('https://github.com/jquery/jquery/tree/1.x-master');
107 | });
108 |
109 | it('link https://www.npmjs.org/package/unknown-package-name', function() {
110 | var item = _.findWhere(result, {
111 | name: 'unknown-package-name'
112 | });
113 |
114 | (item.link === null).should.equal(false);
115 | item.link.should.equal('https://www.npmjs.org/package/unknown-package-name');
116 | });
117 | });
118 | });
119 |
--------------------------------------------------------------------------------
/test/test_require_remote.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var githubLinkerCore = require('../');
4 | var fs = require('fs');
5 | var path = require('path');
6 | var assert = require('should');
7 | var _ = require('lodash');
8 | var env = require('jsdom').env;
9 |
10 | describe('require.js', function() {
11 |
12 | describe('local', function() {
13 | var $, result;
14 | var url = 'https://github.com/stefanbuck/github-linker-core/blob/master/test/fixtures/require.js';
15 | var file = path.resolve(__dirname, 'fixtures/require.html');
16 |
17 | before(function(done) {
18 | $ = result = null;
19 | var options = {
20 | dictionary: {
21 | npm: {
22 | 'lodash': 'https://github.com/lodash/lodash'
23 | }
24 | }
25 | };
26 |
27 | env(url, function(err, window) {
28 | if (err) {
29 | return done(err);
30 | }
31 | $ = require('jquery')(window);
32 |
33 | githubLinkerCore($, url, options, function(err, _result) {
34 | if (err) {
35 | throw err;
36 | }
37 | result = _result;
38 | done();
39 | });
40 | });
41 | });
42 |
43 | it('found dependencies', function() {
44 |
45 | // TODO Evaluate why this doesn't work
46 | // result.should.have.length(20);
47 |
48 | result.length.should.equal(20);
49 | });
50 |
51 | it('http://nodejs.org/api/path.html', function() {
52 | var item = _.findWhere(result, {
53 | name: 'path'
54 | });
55 |
56 | (item.link === null).should.equal(false);
57 | item.link.should.equal('http://nodejs.org/api/path.html');
58 | });
59 |
60 | it('https://github.com/lodash/lodash', function() {
61 | var item = _.findWhere(result, {
62 | name: 'lodash'
63 | });
64 |
65 | (item.link === null).should.equal(false);
66 | item.link.should.equal('https://github.com/lodash/lodash');
67 | });
68 |
69 | it.skip('unknown-package-name', function() {
70 | var item = _.findWhere(result, {
71 | name: 'unknown-package-name'
72 | });
73 |
74 | (item.link === null).should.equal(false);
75 | item.link.should.equal('tbd');
76 | });
77 |
78 | it('./file.js', function() {
79 | var item = _.findWhere(result, {
80 | name: './file.js'
81 | });
82 |
83 | (item.link === null).should.equal(false);
84 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/fixtures/file.js');
85 | });
86 |
87 | it('./folder/file.js', function() {
88 | var item = _.findWhere(result, {
89 | name: './folder/file.js'
90 | });
91 |
92 | (item.link === null).should.equal(false);
93 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/fixtures/folder/file.js');
94 | });
95 |
96 | it('./file-or-folder', function() {
97 | var item = _.findWhere(result, {
98 | name: './file-or-folder'
99 | });
100 |
101 | (item.link === null).should.equal(false);
102 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/fixtures/file-or-folder');
103 | });
104 |
105 | it('../file.js', function() {
106 | var item = _.findWhere(result, {
107 | name: '../file.js'
108 | });
109 |
110 | (item.link === null).should.equal(false);
111 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/file.js');
112 | });
113 |
114 | it('../folder/file.js', function() {
115 | var item = _.findWhere(result, {
116 | name: '../folder/file.js'
117 | });
118 |
119 | (item.link === null).should.equal(false);
120 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/folder/file.js');
121 | });
122 |
123 | it('../file-or-folder', function() {
124 | var item = _.findWhere(result, {
125 | name: '../file-or-folder'
126 | });
127 |
128 | (item.link === null).should.equal(false);
129 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/file-or-folder');
130 | });
131 |
132 | it('../../file.js', function() {
133 | var item = _.findWhere(result, {
134 | name: '../../file.js'
135 | });
136 |
137 | (item.link === null).should.equal(false);
138 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/file.js');
139 | });
140 |
141 | it('../../folder/file.js', function() {
142 | var item = _.findWhere(result, {
143 | name: '../../folder/file.js'
144 | });
145 |
146 | (item.link === null).should.equal(false);
147 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/folder/file.js');
148 | });
149 |
150 | it('../../file-or-folder', function() {
151 | var item = _.findWhere(result, {
152 | name: '../../file-or-folder'
153 | });
154 |
155 | (item.link === null).should.equal(false);
156 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/file-or-folder');
157 | });
158 |
159 | it('./', function() {
160 | var item = _.findWhere(result, {
161 | name: './'
162 | });
163 |
164 | (item.link === null).should.equal(false);
165 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/fixtures');
166 | });
167 |
168 | it('..', function() {
169 | var item = _.findWhere(result, {
170 | name: '..'
171 | });
172 |
173 | (item.link === null).should.equal(false);
174 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test');
175 | });
176 |
177 | it('../', function() {
178 | var item = _.findWhere(result, {
179 | name: '../'
180 | });
181 |
182 | (item.link === null).should.equal(false);
183 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test');
184 | });
185 |
186 | it('../..', function() {
187 | var item = _.findWhere(result, {
188 | name: '../..'
189 | });
190 |
191 | (item.link === null).should.equal(false);
192 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master');
193 | });
194 |
195 | it('../../', function() {
196 | var item = _.findWhere(result, {
197 | name: '../../'
198 | });
199 |
200 | (item.link === null).should.equal(false);
201 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master');
202 | });
203 |
204 | it.skip('.', function() {
205 | var item = _.findWhere(result, {
206 | name: '.'
207 | });
208 |
209 | (item.link === null).should.equal(false);
210 | item.link.should.equal('tbd');
211 | });
212 |
213 | it.skip('...', function() {
214 | var item = _.findWhere(result, {
215 | name: '...'
216 | });
217 |
218 | (item.link === null).should.equal(false);
219 | item.link.should.equal('tbd');
220 | });
221 |
222 | it.skip('/', function() {
223 | var item = _.findWhere(result, {
224 | name: '/'
225 | });
226 |
227 | (item.link === null).should.equal(false);
228 | item.link.should.equal('tbd');
229 | });
230 |
231 | });
232 | });
233 |
--------------------------------------------------------------------------------
/test/test_require_local.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | var githubLinkerCore = require('../');
4 | var fs = require('fs');
5 | var path = require('path');
6 | var assert = require('should');
7 | var _ = require('lodash');
8 | var env = require('jsdom').env;
9 |
10 | describe('require.js', function() {
11 |
12 | describe('local', function() {
13 | var $, result;
14 | var url = 'https://github.com/stefanbuck/github-linker-core/blob/master/test/fixtures/require.js';
15 | var file = path.resolve(__dirname, 'fixtures/require.html');
16 |
17 | before(function(done) {
18 | $ = result = null;
19 | var html = fs.readFileSync(file, 'utf-8');
20 | var options = {
21 | dictionary: {
22 | npm: {
23 | 'lodash': 'https://github.com/lodash/lodash'
24 | }
25 | }
26 | };
27 |
28 | env(html, function(err, window) {
29 | if (err) {
30 | return done(err);
31 | }
32 | $ = require('jquery')(window);
33 |
34 | githubLinkerCore($, url, options, function(err, _result) {
35 | if (err) {
36 | throw err;
37 | }
38 | result = _result;
39 | done();
40 | });
41 | });
42 | });
43 |
44 | it('found dependencies', function() {
45 |
46 | // TODO Evaluate why this doesn't work
47 | // result.should.have.length(20);
48 |
49 | result.length.should.equal(20);
50 | });
51 |
52 | it('http://nodejs.org/api/path.html', function() {
53 | var item = _.findWhere(result, {
54 | name: 'path'
55 | });
56 |
57 | (item.link === null).should.equal(false);
58 | item.link.should.equal('http://nodejs.org/api/path.html');
59 | });
60 |
61 | it('https://github.com/lodash/lodash', function() {
62 | var item = _.findWhere(result, {
63 | name: 'lodash'
64 | });
65 |
66 | (item.link === null).should.equal(false);
67 | item.link.should.equal('https://github.com/lodash/lodash');
68 | });
69 |
70 | it.skip('unknown-package-name', function() {
71 | var item = _.findWhere(result, {
72 | name: 'unknown-package-name'
73 | });
74 |
75 | (item.link === null).should.equal(false);
76 | item.link.should.equal('tbd');
77 | });
78 |
79 | it('./file.js', function() {
80 | var item = _.findWhere(result, {
81 | name: './file.js'
82 | });
83 |
84 | (item.link === null).should.equal(false);
85 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/fixtures/file.js');
86 | });
87 |
88 | it('./folder/file.js', function() {
89 | var item = _.findWhere(result, {
90 | name: './folder/file.js'
91 | });
92 |
93 | (item.link === null).should.equal(false);
94 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/fixtures/folder/file.js');
95 | });
96 |
97 | it('./file-or-folder', function() {
98 | var item = _.findWhere(result, {
99 | name: './file-or-folder'
100 | });
101 |
102 | (item.link === null).should.equal(false);
103 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/fixtures/file-or-folder');
104 | });
105 |
106 | it('../file.js', function() {
107 | var item = _.findWhere(result, {
108 | name: '../file.js'
109 | });
110 |
111 | (item.link === null).should.equal(false);
112 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/file.js');
113 | });
114 |
115 | it('../folder/file.js', function() {
116 | var item = _.findWhere(result, {
117 | name: '../folder/file.js'
118 | });
119 |
120 | (item.link === null).should.equal(false);
121 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/test/folder/file.js');
122 | });
123 |
124 | it('../file-or-folder', function() {
125 | var item = _.findWhere(result, {
126 | name: '../file-or-folder'
127 | });
128 |
129 | (item.link === null).should.equal(false);
130 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/file-or-folder');
131 | });
132 |
133 | it('../../file.js', function() {
134 | var item = _.findWhere(result, {
135 | name: '../../file.js'
136 | });
137 |
138 | (item.link === null).should.equal(false);
139 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/file.js');
140 | });
141 |
142 | it('../../folder/file.js', function() {
143 | var item = _.findWhere(result, {
144 | name: '../../folder/file.js'
145 | });
146 |
147 | (item.link === null).should.equal(false);
148 | item.link.should.equal('/stefanbuck/github-linker-core/blob/master/folder/file.js');
149 | });
150 |
151 | it('../../file-or-folder', function() {
152 | var item = _.findWhere(result, {
153 | name: '../../file-or-folder'
154 | });
155 |
156 | (item.link === null).should.equal(false);
157 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/file-or-folder');
158 | });
159 |
160 | it('./', function() {
161 | var item = _.findWhere(result, {
162 | name: './'
163 | });
164 |
165 | (item.link === null).should.equal(false);
166 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test/fixtures');
167 | });
168 |
169 | it('..', function() {
170 | var item = _.findWhere(result, {
171 | name: '..'
172 | });
173 |
174 | (item.link === null).should.equal(false);
175 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test');
176 | });
177 |
178 | it('../', function() {
179 | var item = _.findWhere(result, {
180 | name: '../'
181 | });
182 |
183 | (item.link === null).should.equal(false);
184 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master/test');
185 | });
186 |
187 | it('../..', function() {
188 | var item = _.findWhere(result, {
189 | name: '../..'
190 | });
191 |
192 | (item.link === null).should.equal(false);
193 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master');
194 | });
195 |
196 | it('../../', function() {
197 | var item = _.findWhere(result, {
198 | name: '../../'
199 | });
200 |
201 | (item.link === null).should.equal(false);
202 | item.link.should.equal('resolve:/stefanbuck/github-linker-core/blob/master');
203 | });
204 |
205 | it.skip('.', function() {
206 | var item = _.findWhere(result, {
207 | name: '.'
208 | });
209 |
210 | (item.link === null).should.equal(false);
211 | item.link.should.equal('tbd');
212 | });
213 |
214 | it.skip('...', function() {
215 | var item = _.findWhere(result, {
216 | name: '...'
217 | });
218 |
219 | (item.link === null).should.equal(false);
220 | item.link.should.equal('tbd');
221 | });
222 |
223 | it.skip('/', function() {
224 | var item = _.findWhere(result, {
225 | name: '/'
226 | });
227 |
228 | (item.link === null).should.equal(false);
229 | item.link.should.equal('tbd');
230 | });
231 |
232 | });
233 | });
234 |
--------------------------------------------------------------------------------
/test/fixtures/require.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |