166 lines
7.2 KiB
TypeScript
166 lines
7.2 KiB
TypeScript
import { expect } from 'chai';
|
|
import { parseDependencyJson, MavenDependencyGraph } from './depgraph';
|
|
import * as path from 'path';
|
|
import {describe, it, beforeAll} from 'vitest';
|
|
|
|
describe('depgraph', () => {
|
|
|
|
it('should load a dependency JSON file', () => {
|
|
const depGraph = parseDependencyJson(getTestDataFile('maven-plugin'));
|
|
|
|
expect(depGraph.artifacts).to.have.length(96);
|
|
expect(depGraph.dependencies).to.have.length(95);
|
|
|
|
const artifact = depGraph.artifacts[0];
|
|
expect(artifact.groupId).to.equal('org.apache.maven.plugins');
|
|
expect(artifact.artifactId).to.equal('maven-dependency-plugin');
|
|
expect(artifact.version).to.equal('4.0.0-SNAPSHOT');
|
|
expect(artifact.id).to.equal('org.apache.maven.plugins:maven-dependency-plugin:maven-plugin');
|
|
|
|
const dependency = depGraph.dependencies[0];
|
|
expect(dependency.resolution).to.equal('INCLUDED');
|
|
expect(dependency.from).to.equal('org.apache.maven.plugins:maven-dependency-plugin:maven-plugin');
|
|
expect(dependency.to).to.equal('org.apache.maven:maven-artifact:jar');
|
|
});
|
|
|
|
describe('parseDependencies', () => {
|
|
|
|
describe('maven-plugin', () => {
|
|
|
|
let depGraph;
|
|
|
|
beforeAll(() => {
|
|
depGraph = parseDependencyJson(getTestDataFile('maven-plugin'));
|
|
});
|
|
|
|
it('should parse out the top level dependencies', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
const topLevelDependencies = mavenDependencies.getDirectDependencies();
|
|
|
|
expect(mavenDependencies.getPackageCount()).to.equal(96);
|
|
|
|
const names = topLevelDependencies.map(pkg => pkg.packageID());
|
|
expect(names).to.have.members([
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.reporting/[email protected]?type=jar",
|
|
"pkg:maven/commons-io/[email protected]?type=jar",
|
|
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
|
|
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
|
|
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.shared/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.commons/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.commons/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.plugin-tools/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.aether/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.wagon/[email protected]?type=jar",
|
|
"pkg:maven/junit/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.plugin-testing/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven.plugin-testing/[email protected]?type=jar",
|
|
"pkg:maven/org.mockito/[email protected]?type=jar",
|
|
"pkg:maven/org.codehaus.plexus/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.maven/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/org.slf4j/[email protected]?type=jar",
|
|
"pkg:maven/commons-beanutils/[email protected]?type=jar"
|
|
]);
|
|
});
|
|
|
|
it('should provide a manifest', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
const manifest = mavenDependencies.createManifest();
|
|
|
|
expect(manifest.name).to.equal('maven-dependency-plugin');
|
|
expect(manifest.countDependencies()).to.equal(95);
|
|
});
|
|
});
|
|
|
|
|
|
describe('bookstore-v3', () => {
|
|
|
|
let depGraph;
|
|
|
|
beforeAll(() => {
|
|
depGraph = parseDependencyJson(getTestDataFile('bookstore-v3'));
|
|
});
|
|
|
|
it('should parse out the top level dependencies', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
const topLevelDependencies = mavenDependencies.getDirectDependencies();
|
|
|
|
expect(mavenDependencies.getPackageCount()).to.equal(21);
|
|
|
|
const names = topLevelDependencies.map(pkg => pkg.packageID());
|
|
expect(names).to.have.members([
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/org.thymeleaf/[email protected]?type=jar",
|
|
"pkg:maven/org.json/json@20210307?type=jar",
|
|
"pkg:maven/org.xerial/[email protected]?type=jar",
|
|
"pkg:maven/org.apache.logging.log4j/[email protected]?type=jar",
|
|
"pkg:maven/junit/[email protected]?type=jar"
|
|
]);
|
|
});
|
|
});
|
|
|
|
describe('cycle-tree', () => {
|
|
let depGraph;
|
|
beforeAll(() => {
|
|
depGraph = parseDependencyJson(getTestDataFile("cycle-tree"));
|
|
});
|
|
|
|
it('should parse out the top level dependencies', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
expect(mavenDependencies.getPackageCount()).to.equal(3);
|
|
});
|
|
|
|
it('should be able to generate a manifest despite having a cycle', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
const manifest = mavenDependencies.createManifest();
|
|
|
|
expect(manifest.name).to.equal('hadoop-main');
|
|
expect(manifest.countDependencies()).to.equal(2);
|
|
})
|
|
});
|
|
|
|
describe('bs-parent-dep-tree', () => {
|
|
|
|
let depGraph;
|
|
|
|
beforeAll(() => {
|
|
depGraph = parseDependencyJson(getTestDataFile('bs-parent-dep-tree'));
|
|
});
|
|
|
|
it('should parse out the top level dependencies', () => {
|
|
const mavenDependencies = new MavenDependencyGraph(depGraph);
|
|
const topLevelDependencies = mavenDependencies.getDirectDependencies();
|
|
|
|
expect(mavenDependencies.getPackageCount()).to.equal(19);
|
|
|
|
const topLevelNames = topLevelDependencies.map(pkg => pkg.packageID());
|
|
expect(topLevelNames).to.have.members([
|
|
"pkg:maven/org.eclipse.jetty/[email protected]?type=jar",
|
|
"pkg:maven/com.github.octodemo/[email protected]?type=jar",
|
|
"pkg:maven/junit/[email protected]?type=jar"
|
|
]);
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
function getTestDataFile(name: string) {
|
|
return path.join(__dirname, '..', 'test-data', 'dependency-trees', `${name}.json`);
|
|
} |