Skip to content
This repository has been archived by the owner on Dec 27, 2023. It is now read-only.

Reproducible metadata #7

Merged
merged 1 commit into from Oct 29, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -28,6 +28,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;

Expand Down Expand Up @@ -101,6 +102,15 @@ public void generateDescriptor( MetadataGenerationRequest request )
}
}

// Sort the descriptors by key to make the output reproducible
Collections.sort( descriptors, new Comparator<ComponentDescriptor>()
{
public int compare( ComponentDescriptor d1, ComponentDescriptor d2 )
{
return d1.getHumanReadableKey().compareTo( d2.getHumanReadableKey() );
}
});

List<File> componentDescriptors = new ArrayList<File>();

//
Expand Down
Expand Up @@ -16,7 +16,9 @@

package org.codehaus.plexus.metadata;

import java.io.File;
import java.io.StringWriter;
import java.util.Collections;
import java.util.List;

import org.codehaus.plexus.PlexusTestCase;
Expand All @@ -26,6 +28,12 @@
import org.codehaus.plexus.component.repository.ComponentDescriptor;
import org.codehaus.plexus.component.repository.io.PlexusTools;
import org.codehaus.plexus.configuration.PlexusConfiguration;
import org.codehaus.plexus.metadata.merge.ComponentsXmlMerger;
import org.codehaus.plexus.metadata.merge.Merger;
import org.codehaus.plexus.metadata.merge.PlexusXmlMerger;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;

/**
* Test for the {@link DefaultComponentDescriptorWriter} class.
Expand Down Expand Up @@ -96,4 +104,41 @@ public void testBasic() throws Exception {
// TODO: Verify requirements and configuration too... but I'm too lazy for that right now
//
}

public void testComponentsOrder() throws Exception {
MetadataGenerator generator = (MetadataGenerator) lookup(MetadataGenerator.class);
assertNotNull(generator);

MetadataGenerationRequest request = new MetadataGenerationRequest();
request.sourceDirectories = Collections.singletonList("src/main/java");
request.classesDirectory = new File("target/classes");
request.outputFile = new File("target/test-classes/components-sorted.xml");
request.sourceEncoding = "UTF-8";
request.useContextClassLoader = true;

generator.generateDescriptor(request);

assertTrue("Descriptor not generated", request.outputFile.exists());

Document doc = new SAXBuilder().build(request.outputFile);

// check if the components are sorted by role+impl
List<Element> components = doc.getRootElement().getChild("components").getChildren();
assertEquals("Number of components", 5, components.size());

assertEquals("Component 1 role", ComponentDescriptorExtractor.class.getName(), components.get(0).getChild("role").getText());
assertEquals("Component 1 impl", ClassComponentDescriptorExtractor.class.getName(), components.get(0).getChild("implementation").getText());

assertEquals("Component 2 role", ComponentDescriptorExtractor.class.getName(), components.get(1).getChild("role").getText());
assertEquals("Component 2 impl", SourceComponentDescriptorExtractor.class.getName(), components.get(1).getChild("implementation").getText());

assertEquals("Component 3 role", MetadataGenerator.class.getName(), components.get(2).getChild("role").getText());
assertEquals("Component 3 impl", DefaultMetadataGenerator.class.getName(), components.get(2).getChild("implementation").getText());

assertEquals("Component 4 role", Merger.class.getName(), components.get(3).getChild("role").getText());
assertEquals("Component 4 impl", ComponentsXmlMerger.class.getName(), components.get(3).getChild("implementation").getText());

assertEquals("Component 5 role", Merger.class.getName(), components.get(4).getChild("role").getText());
assertEquals("Component 5 impl", PlexusXmlMerger.class.getName(), components.get(4).getChild("implementation").getText());
}
}