Blob Blame History Raw
var test = require('tape');
var parse = require('spdx-expression-parse');
var correct = require('./');

function valid(string) {
  try {
    parse(string);
    return true;
  } catch (e) {
    return false;
  }
}

var examples = {
  ' Apache License V2': 'Apache-2.0',
  ' BSD-3-Clause': 'BSD-3-Clause',
  ' GPL-3.0+': 'GPL-3.0',
  '"BD-2-Clause"': 'BSD-2-Clause',
  '"BSD-2-Clause"': 'BSD-2-Clause',
  '"MIT"': 'MIT',
  '(LGPL)': 'LGPL-3.0',
  '2 clause BSD': 'BSD-2-Clause',
  '2-clause-BSD': 'BSD-2-Clause',
  '3-Clause BSD': 'BSD-3-Clause',
  '3-Clause-BSD': 'BSD-3-Clause',
  '3-clause BSD': 'BSD-3-Clause',
  'AGPL 3': 'AGPL-3.0',
  'AGPL 3.0':'AGPL-3.0',
  'AGPL v3': 'AGPL-3.0',
  'AGPL': 'AGPL-3.0',
  'AGPL, Copyright 2014 uh-sem-blee, Co.': 'AGPL-3.0',
  'AGPL-3': 'AGPL-3.0',
  'AGPL3': 'AGPL-3.0',
  'AGPLV3': 'AGPL-3.0',
  'AGPLv3': 'AGPL-3.0',
  'AGPLv3+': 'AGPL-3.0',
  'AOL/MIT': 'MIT',
  'APACHE 2': 'Apache-2.0',
  'APACHE 2.0': 'Apache-2.0',
  'APACHE V2.0': 'Apache-2.0',
  'APACHE': 'Apache-2.0',
  'APACHE-2': 'Apache-2.0',
  'APACHE-2.0': 'Apache-2.0',
  'APACHE-V2': 'Apache-2.0',
  'APACHE2': 'Apache-2.0',
  'APACHE2.0': 'Apache-2.0',
  'APACHE20': 'Apache-2.0',
  'APACHE2_0': 'Apache-2.0',
  'APGLv3': 'AGPL-3.0',
  'APL 2.0': 'Apache-2.0',
  'APL': 'Apache-2.0',
  'APL2': 'Apache-2.0',
  'APLv2': 'Apache-2.0',
  'Affero GPL or Commercial': 'AGPL-3.0',
  'Affero GPL v3': 'AGPL-3.0',
  'Affero GPL3': 'AGPL-3.0',
  'Affero General Public License v3': 'AGPL-3.0',
  'Affero-GPL': 'AGPL-3.0',
  'Apache ': 'Apache-2.0',
  'Apache 2 License': 'Apache-2.0',
  'Apache 2': 'Apache-2.0',
  'Apache 2.0 License': 'Apache-2.0',
  'Apache 2.0 http://www.apache.org/licenses/': 'Apache-2.0',
  'Apache 2.0': 'Apache-2.0',
  'Apache Licence 2.0': 'Apache-2.0',
  'Apache Licence v2': 'Apache-2.0',
  'Apache License 2': 'Apache-2.0',
  'Apache License 2.': 'Apache-2.0',
  'Apache License 2.0': 'Apache-2.0',
  'Apache License V2': 'Apache-2.0',
  'Apache License V2.0': 'Apache-2.0',
  'Apache License Version 2.0': 'Apache-2.0',
  'Apache License Version 2.0,': 'Apache-2.0',
  'Apache License v2': 'Apache-2.0',
  'Apache License v2.0': 'Apache-2.0',
  'Apache License version 2.0': 'Apache-2.0',
  'Apache License': 'Apache-2.0',
  'Apache License, 2.0': 'Apache-2.0',
  'Apache License, Version 2.0': 'Apache-2.0',
  'Apache License, Version 2.0, http://www.apache.org/licenses/LICENSE-2.0': 'Apache-2.0',
  'Apache License, v2.0': 'Apache-2.0',
  'Apache License, version 2': 'Apache-2.0',
  'Apache Public License v2': 'Apache-2.0',
  'Apache Public License, Version 2': 'Apache-2.0',
  'Apache Software License 2.0': 'Apache-2.0',
  'Apache Software License Version 2': 'Apache-2.0',
  'Apache V2': 'Apache-2.0',
  'Apache V2.0': 'Apache-2.0',
  'Apache Version 2': 'Apache-2.0',
  'Apache Version 2.0': 'Apache-2.0',
  'Apache lisence V2': 'Apache-2.0',
  'Apache lisense 2.0': 'Apache-2.0',
  'Apache v. 2': 'Apache-2.0',
  'Apache v2 License': 'Apache-2.0',
  'Apache v2': 'Apache-2.0',
  'Apache v2.0': 'Apache-2.0',
  'Apache version 2': 'Apache-2.0',
  'Apache version 2.0': 'Apache-2.0',
  'Apache': 'Apache-2.0',
  'Apache, Version 2.0': 'Apache-2.0',
  'Apache, v2.0': 'Apache-2.0',
  'Apache-2': 'Apache-2.0',
  'Apache-2.0': 'Apache-2.0',
  'Apache-License-2.0': 'Apache-2.0',
  'Apache-V2': 'Apache-2.0',
  'Apache-v2': 'Apache-2.0',
  'Apache-v2.0': 'Apache-2.0',
  'Apache2': 'Apache-2.0',
  'Apache2.0': 'Apache-2.0',
  'Apache20': 'Apache-2.0',
  'ApacheV2': 'Apache-2.0',
  'Apache_2_0': 'Apache-2.0',
  'Apachev2': 'Apache-2.0',
  'Artistic 2.0': 'Artistic-2.0',
  'Artistic License 2.0': 'Artistic-2.0',
  'Artistic License': 'Artistic-2.0',
  'Artistic': 'Artistic-2.0',
  'Attribution-NonCommercial': 'CC-BY-NC-4.0',
  'BEER': 'Beerware',
  'BEERWARE': 'Beerware',
  'BOOST': 'BSL-1.0',
  'BS3 3-Clause': 'BSD-3-Clause',
  'BSD 2-Clause license': 'BSD-2-Clause',
  'BSD 2-Clause': 'BSD-2-Clause',
  'BSD 2-clause': 'BSD-2-Clause',
  'BSD 3 Clause': 'BSD-3-Clause',
  'BSD 3': 'BSD-3-Clause',
  'BSD 3-Clause': 'BSD-3-Clause',
  'BSD 3-clause': 'BSD-3-Clause',
  'BSD clause 3': 'BSD-3-Clause',
  'BSD': 'BSD-2-Clause',
  'BSD-2 Clause': 'BSD-2-Clause',
  'BSD-2-Clauseno': 'BSD-2-Clause',
  'BSD-2-clause': 'BSD-2-Clause',
  'BSD-3 Clause': 'BSD-3-Clause',
  'BSD-3': 'BSD-3-Clause',
  'BSD-3-Claude': 'BSD-3-Clause',
  'BSD2-License': 'BSD-2-Clause',
  'BSD3': 'BSD-3-Clause',
  'BSD3-Clause': 'BSD-3-Clause',
  'Beer-Ware': 'Beerware',
  'BeerWare': 'Beerware',
  'Beerware': 'Beerware',
  'Boost': 'BSL-1.0',
  'CC BY 3.0': 'CC-BY-3.0',
  'CC BY 4.0': 'CC-BY-4.0',
  'CC-BY 3.0': 'CC-BY-3.0',
  'CC-BY 4.0 International': 'CC-BY-4.0',
  'Cc-by-3.0': 'CC-BY-3.0',
  'DWTFYW License': 'WTFPL',
  'DWTFYW': 'WTFPL',
  'DWTFYWPL': 'WTFPL',
  'Do what the fuck you want to public license': 'WTFPL',
  'Eclipse Public License (EPL)': 'EPL-1.0',
  'Eclipse Public License + Eclipse Distribution License': 'EPL-1.0',
  'Eclipse Public License 1.0': 'EPL-1.0',
  'Eclipse Public License': 'EPL-1.0',
  'Eclipse Public License, Eclipse Distribution License': 'EPL-1.0',
  'Eclipse': 'EPL-1.0',
  'GLP': 'GPL-3.0',
  'GLPv3': 'GPL-3.0',
  'GNU Affero GPL 3.0': 'AGPL-3.0',
  'GNU Affero GPLv3': 'AGPL-3.0',
  'GNU GENERAL PUBLIC LICENSE Version 2': 'GPL-2.0',
  'GNU GENERAL PUBLIC LICENSE': 'GPL-3.0',
  'GNU GLP v3.0': 'GPL-3.0',
  'GNU GPL 3': 'GPL-3.0',
  'GNU GPL 3.0': 'GPL-3.0',
  'GNU GPL V2': 'GPL-2.0',
  'GNU GPL V3.0': 'GPL-3.0',
  'GNU GPL v2': 'GPL-2.0',
  'GNU GPL v2.0': 'GPL-2.0',
  'GNU GPL v3': 'GPL-3.0',
  'GNU GPL v3.0': 'GPL-3.0',
  'GNU GPL ver 3': 'GPL-3.0',
  'GNU GPL': 'GPL-3.0',
  'GNU GPLv2': 'GPL-2.0',
  'GNU GPLv3': 'GPL-3.0',
  'GNU GPLv3+': 'GPL-3.0',
  'GNU General Public License v2.0': 'GPL-2.0',
  'GNU General Public License v3': 'GPL-3.0',
  'GNU General Public License': 'GPL-3.0',
  'GNU General Public License, version 2': 'GPL-2.0',
  'GNU General Public': 'GPL-3.0',
  'GNU LESSER GENERAL PUBLIC LICENSE': 'GPL-3.0',
  'GNU LGPL v3.0': 'GPL-3.0',
  'GNU License v3': 'GPL-3.0',
  'GNU V3': 'GPL-3.0',
  'GNU v2': 'GPL-2.0',
  'GNU': 'GPL-3.0',
  'GNU-GPL': 'GPL-3.0',
  'GNU/GPL': 'GPL-3.0',
  'GNU/GPLv2': 'GPL-2.0',
  'GPL 2': 'GPL-2.0',
  'GPL 2.0': 'GPL-2.0',
  'GPL 3': 'GPL-3.0',
  'GPL 3.0': 'GPL-3.0',
  'GPL V2': 'GPL-2.0',
  'GPL V3': 'GPL-3.0',
  'GPL V3.0': 'GPL-3.0',
  'GPL Version 3': 'GPL-3.0',
  'GPL v.2': 'GPL-2.0',
  'GPL v2': 'GPL-2.0',
  'GPL v3': 'GPL-3.0',
  'GPL v3+': 'GPL-3.0',
  'GPL v3.0': 'GPL-3.0',
  'GPL': 'GPL-3.0',
  'GPL-2': 'GPL-2.0',
  'GPL-2.0-': 'GPL-2.0',
  'GPL-3': 'GPL-3.0',
  'GPL-V3': 'GPL-3.0',
  'GPL2': 'GPL-2.0',
  'GPL2+': 'GPL-2.0',
  'GPL3': 'GPL-3.0',
  'GPL3.0': 'GPL-3.0',
  'GPL3.0+': 'GPL-3.0',
  'GPLV2': 'GPL-2.0',
  'GPLV3': 'GPL-3.0',
  'GPLv2': 'GPL-2.0',
  'GPLv2+': 'GPL-2.0',
  'GPLv3': 'GPL-3.0',
  'GPLv3+': 'GPL-3.0',
  'GPLv3.0': 'GPL-3.0',
  'GUN': 'GPL-3.0',
  'Gnu public license v2.0': 'GPL-2.0',
  'Gpl v3': 'GPL-3.0',
  'Gpl': 'GPL-3.0',
  'Gpl-2.0': 'GPL-2.0',
  'Gpl-3.0': 'GPL-3.0',
  'Gpl2': 'GPL-2.0',
  'Http://opensource.org/licenses/MIT': 'MIT',
  'Http://unlicense.org': 'Unlicense',
  'Http://wtfpl.org/': 'WTFPL',
  'Http://www.apache.org/licenses/LICENSE-2.0': 'Apache-2.0',
  'Http://www.mozilla.org/MPL/2.0/': 'MPL-2.0',
  'Http://www.opensource.org/licenses/MIT': 'MIT',
  'ISD': 'ISC',
  'IST': 'ISC',
  'Isc': 'ISC',
  'LGLP3': 'LGPL-3.0',
  'LGPL 2.1': 'LGPL-2.1',
  'LGPL 3': 'LGPL-3.0',
  'LGPL 3.0': 'LGPL-3.0',
  'LGPL Version 3.0': 'LGPL-3.0',
  'LGPL v2': 'LGPL-2.0',
  'LGPL v3': 'LGPL-3.0',
  'LGPL': 'LGPL-3.0',
  'LGPL-2': 'LGPL-2.0',
  'LGPL-3': 'LGPL-3.0',
  'LGPL.v3': 'LGPL-3.0',
  'LGPL2': 'LGPL-2.0',
  'LGPL2.1': 'LGPL-2.1',
  'LGPL3': 'LGPL-3.0',
  'LGPL3+': 'LGPL-3.0',
  'LGPL3.0': 'LGPL-3.0',
  'LGPL:': 'LGPL-3.0',
  'LGPLv2.1': 'LGPL-2.1',
  'LGPLv3': 'LGPL-3.0',
  'LGPLv3+': 'LGPL-3.0',
  'LICENSE-MIT': 'MIT',
  'Licenses/GPL-3.0': 'GPL-3.0',
  'M.I.T': 'MIT',
  'M.I.T.': 'MIT',
  'MIT ': 'MIT',
  'MIT (http://mootools.net/license.txt)': 'MIT',
  'MIT (https://github.com/AlekseyLeshko/say-me/blob/master/LICENSE)': 'MIT',
  'MIT (https://github.com/AlekseyLeshko/testimonial.js/blob/master/LICENSE)': 'MIT',
  'MIT (https://github.com/brentertz/scapegoat/blob/master/LICENSE-MIT)': 'MIT',
  'MIT / http://rem.mit-license.org': 'MIT',
  'MIT / http://www.highcharts.com/license/': 'MIT',
  'MIT 1.0': 'MIT',
  'MIT <http://bankfacil.mit-license.org>': 'MIT',
  'MIT <http://opensource.org/licenses/MIT>': 'MIT',
  'MIT <http://www.opensource.org/licenses/mit-license.php>': 'MIT',
  'MIT @chetandhembre': 'MIT',
  'MIT Copyright (c) 2015 Austin Eldridge': 'MIT',
  'MIT LICENSE': 'MIT',
  'MIT Licence': 'MIT',
  'MIT License (MIT)': 'MIT',
  'MIT License (http://opensource.org/licenses/MIT)': 'MIT',
  'MIT License - http://opensource.org/licenses/MIT': 'MIT',
  'MIT License': 'MIT',
  'MIT License, http://www.opensource.org/licenses/MIT': 'MIT',
  'MIT License, see LICENSE.md for details': 'MIT',
  'MIT License. Copyright First Rally. All rights reserved.': 'MIT',
  'MIT License.': 'MIT',
  'MIT Licensed. http://www.opensource.org/licenses/mit-license.php': 'MIT',
  'MIT Lisence': 'MIT',
  'MIT licence': 'MIT',
  'MIT license (MIT)': 'MIT',
  'MIT license': 'MIT',
  'MIT, Copyright (c) 2013 Michael Schoonmaker': 'MIT',
  'MIT, http://opensource.org/licenses/MIT': 'MIT',
  'MIT-LICENSE': 'MIT',
  'MIT-License': 'MIT',
  'MIT-Style': 'MIT',
  'MIT-like': 'MIT',
  'MIT/X': 'MIT',
  'MIT/X11': 'MIT',
  'MIT2': 'MIT',
  'MITISC': 'MIT',
  'MIT]': 'MIT',
  'MIT_License': 'MIT',
  'MITt': 'MIT',
  'MPL 2': 'MPL-2.0',
  'MPL 2.0':'MPL-2.0',
  'MPL V2': 'MPL-2.0',
  'MPL v2': 'MPL-2.0',
  'MPL v2.0': 'MPL-2.0',
  'MPL': 'MPL-2.0',
  'MPL-2': 'MPL-2.0',
  'MPL/2.0': 'MPL-2.0',
  'MPL2': 'MPL-2.0',
  'MPL2.0': 'MPL-2.0',
  'MPLV2': 'MPL-2.0',
  'MPLv2': 'MPL-2.0',
  'MPLv2.0': 'MPL-2.0',
  'MTI': 'MIT',
  'MiT': 'MIT',
  'Mit': 'MIT',
  'Mozilla Public License 1.1': 'MPL-1.1',
  'Mozilla Public License 2.0': 'MPL-2.0',
  'Mozilla Public License version 2': 'MPL-2.0',
  'Mozilla Public License': 'MPL-2.0',
  'Mozilla Public License, v. 2.0': 'MPL-2.0',
  'Mozilla Public License, version 2.0': 'MPL-2.0',
  'Public Domain (UNLISCENSE)': 'Unlicense',
  'Public Domain (Unlicense)': 'Unlicense',
  'Public Domain <Unlicense>': 'Unlicense',
  'Public domain(unlicense)': 'Unlicense',
  'Public-domain (Unlicense)': 'Unlicense',
  'Standard 3-clause BSD': 'BSD-3-Clause',
  'The Unlicense': 'Unlicense',
  'UNLICENSE': 'Unlicense',
  'UNLICENSED': 'Unlicense',
  'UNLICNSE': 'Unlicense',
  'Unlicence': 'Unlicense',
  'Unlicense (http://unlicense.org/)': 'Unlicense',
  'Unlicense (see http://unlicense.org/)': 'Unlicense',
  'Unlicense': 'Unlicense',
  'Unlicensed': 'Unlicense',
  'WTF': 'WTFPL',
  'WTFGPL': 'WTFPL',
  'WTFPL 2': 'WTFPL',
  'WTFPL <http://www.wtfpl.net/>': 'WTFPL',
  'WTFPLv2': 'WTFPL',
  'WTHPL v1.0.0': 'WTFPL',
  'Wtfpl (wtfpl.net)': 'WTFPL',
  'Wtfpl': 'WTFPL',
  'ZLIB': 'Zlib',
  'Zlib': 'Zlib',
  'Zlib/libpng': 'Zlib',
  'mit':'MIT',
  '© 2014 WTFPL – Do What the Fuck You Want to Public License.': 'WTFPL'
};

test('examples', function(test) {
  Object.keys(examples)
    .forEach(function(input) {
      var corrected = examples[input];
      test.test(input, function(test) {
        test.equal(
          correct(input),
          corrected,
          'corrects "' + input + '" to "' + corrected + '"'
        );
        if (corrected !== null) {
          test.ok(
            valid(corrected),
            '"' + corrected + '" is a valid SPDX identifier'
          );
        }
        test.end();
      });
    });
  test.end();
});