/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.ant.bnd.npm;
import aQute.bnd.osgi.Analyzer;
import aQute.bnd.osgi.Constants;
import aQute.bnd.osgi.Jar;
import aQute.bnd.osgi.URLResource;
import aQute.lib.filter.Filter;
import com.liferay.ant.bnd.npm.NpmAnalyzerPlugin.NpmModule;
import java.net.URL;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Raymond Augé
*/
public class NpmAnalyzerPluginTest {
@Test
public void testConversion() throws Exception {
NpmAnalyzerPlugin npmAnalyzerPlugin = new NpmAnalyzerPlugin();
URL url = getResource("dependencies/package.json");
NpmModule npmModule = npmAnalyzerPlugin.getNpmModule(url.openStream());
Assert.assertNotNull(npmModule);
Assert.assertEquals("liferay", npmModule.name);
Assert.assertEquals("1.2.4", npmModule.version);
Assert.assertTrue(npmModule.dependencies.containsKey("lodash"));
Assert.assertEquals("~3.9.3", npmModule.dependencies.get("lodash"));
}
@Test
public void testParseVersionsBasic1() throws Exception {
assertVersionFilter("", "(version>=0.0.0)");
}
@Test
public void testParseVersionsBasic2() throws Exception {
assertVersionFilter("*", "(version>=0.0.0)");
}
@Test
public void testParseVersionsBasic3() throws Exception {
assertVersionFilter("v2.0.0", "(version=2.0.0)");
}
@Test
public void testParseVersionsCaret1() throws Exception {
assertVersionFilter("^1.2.3", "(&(version>=1.2.3)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsCaret2() throws Exception {
assertVersionFilter("^0.2.3", "(&(version>=0.2.3)(!(version>=0.3.0)))");
}
@Test
public void testParseVersionsCaret3() throws Exception {
assertVersionFilter("^0.0.3", "(&(version>=0.0.3)(!(version>=0.0.4)))");
}
@Test
public void testParseVersionsCaret4() throws Exception {
assertVersionFilter(
"^1.2.3-beta_2", "(&(version>=1.2.3.beta_2)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsCaret5() throws Exception {
assertVersionFilter(
"^0.0.3-beta", "(&(version>=0.0.3.beta)(!(version>=0.0.4)))");
}
@Test
public void testParseVersionsCaret6() throws Exception {
assertVersionFilter("^1.2.x", "(&(version>=1.2.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsCaret7() throws Exception {
assertVersionFilter("^0.0.x", "(&(version>=0.0.0)(!(version>=0.1.0)))");
}
@Test
public void testParseVersionsCaret8() throws Exception {
assertVersionFilter("^0.0", "(&(version>=0.0.0)(!(version>=0.1.0)))");
}
@Test
public void testParseVersionsCaret9() throws Exception {
assertVersionFilter("^1.x", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsCaret10() throws Exception {
assertVersionFilter("^0.x", "(&(version>=0.0.0)(!(version>=1.0.0)))");
}
@Test
public void testParseVersionsCaret11() throws Exception {
assertVersionFilter("^0.*", "(&(version>=0.0.0)(!(version>=1.0.0)))");
}
@Test
public void testParseVersionsCaret12() throws Exception {
assertVersionFilter("^0.0.*", "(&(version>=0.0.0)(!(version>=0.1.0)))");
}
@Test
public void testParseVersionsHyphenRange1() throws Exception {
assertVersionFilter(
"1.2.3 - 2.3.4", "(&(version>=1.2.3)(version<=2.3.4))");
}
@Test
public void testParseVersionsHyphenRange2() throws Exception {
assertVersionFilter(
"1.2 - 2.3.4", "(&(version>=1.2.0)(version<=2.3.4))");
}
@Test
public void testParseVersionsHyphenRange3() throws Exception {
assertVersionFilter(
"1.2.3 - 2.3", "(&(version>=1.2.3)(version<=2.4.0))");
}
@Test
public void testParseVersionsHyphenRange4() throws Exception {
assertVersionFilter(
"1.2.3 - 2", "(&(version>=1.2.3)(!(version>=3.0.0)))");
}
@Test
public void testParseVersionsPrefix1() throws Exception {
assertVersionFilter("<2.1.0", "(!(version>=2.1.0))");
}
@Test
public void testParseVersionsPrefix2() throws Exception {
assertVersionFilter("<=2.1.0", "(version<=2.1.0)");
}
@Test
public void testParseVersionsPrefix3() throws Exception {
assertVersionFilter(">2.1.0", "(&(version>=2.1.0)(!(version=2.1.0)))");
}
@Test
public void testParseVersionsPrefix4() throws Exception {
assertVersionFilter(">=2.1.0", "(version>=2.1.0)");
}
@Test
public void testParseVersionsRange1() throws Exception {
assertVersionFilter("1.x", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsRange2() throws Exception {
assertVersionFilter("1.2.x", "(&(version>=1.2.0)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsRange3() throws Exception {
assertVersionFilter("1.*", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsRange4() throws Exception {
assertVersionFilter("1.2.*", "(&(version>=1.2.0)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsRange5() throws Exception {
assertVersionFilter("1.x.x", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsRange6() throws Exception {
assertVersionFilter("1", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsRange7() throws Exception {
assertVersionFilter("1.2", "(&(version>=1.2.0)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsRange8() throws Exception {
assertVersionFilter(
">=1.2.7 <1.3.0", "(&(version>=1.2.7)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsRange9() throws Exception {
assertVersionFilter(
">=1.2.7 <1.3", "(&(version>=1.2.7)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsSet1() throws Exception {
assertVersionFilter(
"v2.0.0 || v3.0.0", "(|(version=2.0.0)(version=3.0.0))");
}
@Test
public void testParseVersionsSet2() throws Exception {
assertVersionFilter(
"v2.0.0 || v2.2.0 || v2.4.0",
"(|(version=2.0.0)(version=2.2.0)(version=2.4.0))");
}
@Test
public void testParseVersionsSet3() throws Exception {
assertVersionFilter(
"v2.0.0 || 1.2",
"(|(version=2.0.0)(&(version>=1.2.0)(!(version>=1.3.0))))");
}
@Test
public void testParseVersionsSet4() throws Exception {
assertVersionFilter(
"v2.0.0 || >2.1.0",
"(|(version=2.0.0)(&(version>=2.1.0)(!(version=2.1.0))))");
}
@Test
public void testParseVersionsSet5() throws Exception {
assertVersionFilter(
"v2.0.0 || ^2.2.x",
"(|(version=2.0.0)(&(version>=2.2.0)(!(version>=3.0.0))))");
}
@Test
public void testParseVersionsTilde1() throws Exception {
assertVersionFilter("~1.2.3", "(&(version>=1.2.3)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsTilde2() throws Exception {
assertVersionFilter("~1.2", "(&(version>=1.2.0)(!(version>=1.3.0)))");
}
@Test
public void testParseVersionsTilde3() throws Exception {
assertVersionFilter("~1", "(&(version>=1.0.0)(!(version>=2.0.0)))");
}
@Test
public void testParseVersionsTilde4() throws Exception {
assertVersionFilter("~0.2.3", "(&(version>=0.2.3)(!(version>=0.3.0)))");
}
@Test
public void testParseVersionsTilde5() throws Exception {
assertVersionFilter("~0.2", "(&(version>=0.2.0)(!(version>=0.3.0)))");
}
@Test
public void testParseVersionsTilde6() throws Exception {
assertVersionFilter("~0", "(&(version>=0.0.0)(!(version>=1.0.0)))");
}
@Test
public void testParseVersionsTilde7() throws Exception {
assertVersionFilter(
"~1.2.3-beta_2", "(&(version>=1.2.3.beta_2)(!(version>=1.3.0)))");
}
@Test
public void testPlugin() throws Exception {
Analyzer analyzer = new Analyzer();
Jar jar = new Jar("test");
jar.putResource(
"package.json",
new URLResource(getResource("dependencies/package.json")));
analyzer.setJar(jar);
NpmAnalyzerPlugin npmAnalyzerPlugin = new NpmAnalyzerPlugin();
npmAnalyzerPlugin.analyzeJar(analyzer);
Assert.assertEquals("1.2.4", analyzer.getBundleVersion());
Assert.assertEquals(
"/liferay-1.2.4",
analyzer.getProperty(NpmAnalyzerPlugin.WEB_CONTEXT_PATH));
String property = analyzer.getProperty(Constants.PROVIDE_CAPABILITY);
Assert.assertEquals(
"osgi.webresource;osgi.webresource=liferay;" +
"version:Version=\"1.2.4\"",
property);
property = analyzer.getProperty(Constants.REQUIRE_CAPABILITY);
Assert.assertEquals(
"osgi.webresource;filter:=\"(&(osgi.webresource=liferay)" +
"(&(version>=1.0.0)(!(version>=1.1.0))))\"",
property);
}
@Test
public void testPluginWithBadVersion() throws Exception {
Analyzer analyzer = new Analyzer();
Jar jar = new Jar("test");
jar.putResource(
"package.json",
new URLResource(
getResource("dependencies/package.bad.version.json")));
analyzer.setJar(jar);
NpmAnalyzerPlugin npmAnalyzerPlugin = new NpmAnalyzerPlugin();
npmAnalyzerPlugin.analyzeJar(analyzer);
Assert.assertEquals("0.0.0.1word-cha_rs", analyzer.getBundleVersion());
Assert.assertEquals(
"/liferay-0.0.0.1word-cha_rs",
analyzer.getProperty(NpmAnalyzerPlugin.WEB_CONTEXT_PATH));
String property = analyzer.getProperty(Constants.PROVIDE_CAPABILITY);
Assert.assertEquals(
"osgi.webresource;osgi.webresource=liferay;" +
"version:Version=\"0.0.0.1word-cha_rs\"",
property);
}
@Test(expected = IllegalArgumentException.class)
public void testPluginWithEmptyBower() throws Exception {
Analyzer analyzer = new Analyzer();
Jar jar = new Jar("test");
jar.putResource(
"package.json",
new URLResource(getResource("dependencies/package.empty.json")));
analyzer.setJar(jar);
NpmAnalyzerPlugin npmAnalyzerPlugin = new NpmAnalyzerPlugin();
npmAnalyzerPlugin.analyzeJar(analyzer);
}
protected void assertVersionFilter(
String version, String expectedFilterString)
throws Exception {
NpmAnalyzerPlugin npmAnalyzerPlugin = new NpmAnalyzerPlugin();
String filterString = npmAnalyzerPlugin.getNpmVersionFilter(version);
Assert.assertEquals(expectedFilterString, filterString);
Filter filter = new Filter(filterString);
Assert.assertNull(filter.verify());
}
protected URL getResource(String path) {
Class<?> clazz = getClass();
return clazz.getResource(path);
}
}