Author: jvanzyl
Date: Wed Oct 18 14:47:40 2006
New Revision: 465382

URL: http://svn.apache.org/viewvc?view=rev&rev=465382
Log:
MNG-2617 Creating a single directory which contains all the ITs
Submitted by: Dan Fabulich

Added:
    
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
   (with props)
Modified:
    maven/components/trunk/mavenexecute.pl

Added: 
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java?view=auto&rev=465382
==============================================================================
--- 
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
 (added)
+++ 
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
 Wed Oct 18 14:47:40 2006
@@ -0,0 +1,86 @@
+/*
+ * Created on Oct 17, 2006
+ *
+ */
+package org.apache.maven.it.util;
+
+import java.io.*;
+import java.net.*;
+import java.util.*;
+import java.util.zip.*;
+
+
+/* @todo this can be replaced with plexus-archiver */
+public class ResourceExtractor {
+    
+    public static void extractResourcePath(String resourcePath, File dest) 
throws IOException {
+        extractResourcePath(ResourceExtractor.class, resourcePath, dest);
+    }
+        
+    public static void extractResourcePath(Class cl, String resourcePath, File 
dest)
+            throws IOException {
+        URL url = cl.getResource(resourcePath);
+        if (url == null) throw new IllegalArgumentException("Resource not 
found: " + resourcePath);
+        if ("jar".equalsIgnoreCase(url.getProtocol())) {
+            File jarFile = getJarFileFromUrl(url);
+            extractResourcePathFromJar(cl, jarFile, resourcePath, dest);
+        } else {
+            try {
+                File resourceFile = new File(new URI(url.toExternalForm()));
+                if (resourceFile.isDirectory()) {
+                    FileUtils.copyDirectoryStructure(resourceFile, dest);
+                } else {
+                    FileUtils.copyFile(resourceFile, dest);
+                }
+            } catch (URISyntaxException e) {
+                throw new RuntimeException("Couldn't convert URL to File:" + 
url, e);
+            }
+        }
+    }
+    
+    private static void extractResourcePathFromJar(Class cl, File jarFile, 
String resourcePath, File dest) throws IOException {
+        ZipFile z = new ZipFile(jarFile, ZipFile.OPEN_READ);
+        String zipStyleResourcePath = resourcePath.substring(1) + "/"; 
+        ZipEntry ze = z.getEntry(zipStyleResourcePath);
+        if (ze != null) {
+            // DGF If it's a directory, then we need to look at all the entries
+            for (Enumeration entries = z.entries(); 
entries.hasMoreElements();) {
+                ze = (ZipEntry) entries.nextElement();
+                if (ze.getName().startsWith(zipStyleResourcePath)) {
+                    String relativePath = 
ze.getName().substring(zipStyleResourcePath.length());
+                    File destFile = new File(dest, relativePath);
+                    if (ze.isDirectory()) {
+                        destFile.mkdirs();
+                    } else {
+                        FileOutputStream fos = new FileOutputStream(destFile);
+                        IOUtil.copy(z.getInputStream(ze), fos);
+                    }
+                }
+            }
+        } else {
+            FileOutputStream fos = new FileOutputStream(dest);
+            IOUtil.copy(cl.getResourceAsStream(resourcePath), fos);
+            
+        }
+    } 
+
+    private static File getJarFileFromUrl(URL url) {
+        if (!"jar".equalsIgnoreCase(url.getProtocol()))
+            throw new IllegalArgumentException("This is not a Jar URL:"
+                    + url.toString());
+        String resourceFilePath = url.getFile();
+        int index = resourceFilePath.indexOf("!");
+        if (index == -1) {
+            throw new RuntimeException("Bug! " + url.toExternalForm()
+                    + " does not have a '!'");
+        }
+        String jarFileURI = resourceFilePath.substring(0, index);
+        try {
+            File jarFile = new File(new URI(jarFileURI));
+            return jarFile;
+        } catch (URISyntaxException e) {
+            throw new RuntimeException("Bug! URI failed to parse: " + 
jarFileURI, e);
+        }
+
+    }
+}

Propchange: 
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/components/trunk/maven-core-it-verifier/src/main/java/org/apache/maven/it/util/ResourceExtractor.java
------------------------------------------------------------------------------
    svn:keywords = "Author Date Id Revision"

Modified: maven/components/trunk/mavenexecute.pl
URL: 
http://svn.apache.org/viewvc/maven/components/trunk/mavenexecute.pl?view=diff&rev=465382&r1=465381&r2=465382
==============================================================================
--- maven/components/trunk/mavenexecute.pl (original)
+++ maven/components/trunk/mavenexecute.pl Wed Oct 18 14:47:40 2006
@@ -1,19 +1,23 @@
 #!/usr/bin/perl
 use File::Path;
+use strict;
+
+my $dirname = "maven-core-it";
+my $newITs = "maven-core-it-new";
+my $newITsResources = "$newITs/src/test/resources";
 
-$dirname = "maven-core-it";
-$newITs = "maven-core-it-new";
 
 open( FILE, "$dirname/integration-tests-descriptions.txt" ) or die;
 undef $/;
-$readme = <FILE>; 
+my $readme = <FILE>; 
 close( FILE );
 
 $/ = "\n";
 
[EMAIL PROTECTED] = $readme =~ m/(it\d+\: .*?)(?=\nit\d+\:|$)/gsx;
-for $desc (@descriptions) {
-       ($name, $value) = ($desc =~ m/^(it\d+)\: (.*)$/s);
+my @descriptions = $readme =~ m/(it\d+\: .*?)(?=\nit\d+\:|$)/gsx;
+my %comment;
+for my $desc (@descriptions) {
+       my ($name, $value) = ($desc =~ m/^(it\d+)\: (.*)$/s);
        chomp ($value);
        $comment{$name} = $value;
 }
@@ -21,42 +25,82 @@
 rmtree($newITs);
 mkpath($newITs);
 
-open( POM, "> $newITs/pom.xml" );  
-print POM "<project>\n";
-print POM "  <modelVersion>4.0.0</modelVersion>\n";
-print POM "  <groupId>org.apache.maven.it</groupId>\n";
-print POM "  <artifactId>maven-core-its</artifactId>\n"; 
-print POM "  <version>1.0-SNAPSHOT</version>\n";
-print POM "  <packaging>pom</packaging>\n";
-print POM "  <modules>\n";
+open (POM, "> $newITs/pom.xml" );
+print POM <<END;
+
+<project>
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.maven.integrationtests</groupId>
+  <artifactId>maven-core-integrationtests</artifactId> 
+  <version>1.0-SNAPSHOT</version>
+  <name>Maven Integration Tests</name> 
+  <build>
+    <plugins>
+        <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-surefire-plugin</artifactId>
+            <configuration>
+                <includes>
+                    <include>**/IntegrationTestSuite.java</include>
+                 </includes>
+                 <forkMode>never</forkMode>
+            </configuration>
+        </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core-it-verifier</artifactId>
+      <version>2.1-SNAPSHOT</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>3.8.1</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
+END
+
+close POM;
+
+my $suiteRoot = "$newITs/src/test/java/org/apache/maven/integrationtests";
+mkpath($suiteRoot);
+mkpath($newITsResources);
+
+open( SUITE, "> $suiteRoot/IntegrationTestSuite.java" );  
+print SUITE <<END;
+package org.apache.maven.integrationtests;
+
+import junit.framework.*;
+
+public class IntegrationTestSuite extends TestCase {
+
+    public static Test suite() {
+        TestSuite suite = new TestSuite();
+END
     
 opendir(DIR, $dirname) or die "can't opendir $dirname: $!";
-while (defined($filename = readdir(DIR))) {
+while (defined(my $filename = readdir(DIR))) {
     next unless (-d "$dirname/$filename");
     next if ($filename eq ".svn");
     next unless ($filename =~ m/^it0\d+$/);
-    $filePrebuildHook = "$dirname/$filename/prebuild-hook.txt";
-    $fileCliOptions = "$dirname/$filename/cli-options.txt";
-    $fileSystemProperties = "$dirname/$filename/system.properties";
-    $fileVerifierProperties = "$dirname/$filename/verifier.properties";
-    $fileGoals = "$dirname/$filename/goals.txt";
-    $fileExpectedResults = "$dirname/$filename/expected-results.txt";
-    $failOnErrorOutput = 1;
+    my $filePrebuildHook = "$dirname/$filename/prebuild-hook.txt";
+    my $fileCliOptions = "$dirname/$filename/cli-options.txt";
+    my $fileSystemProperties = "$dirname/$filename/system.properties";
+    my $fileVerifierProperties = "$dirname/$filename/verifier.properties";
+    my $fileGoals = "$dirname/$filename/goals.txt";
+    my $fileExpectedResults = "$dirname/$filename/expected-results.txt";
+    my $failOnErrorOutput = 1;
+    
+    my $itTestCaseDirectory = $suiteRoot; 
+    my $itTestName = "Maven" . uc($filename) . "Test";
+    my $testFile = "$itTestCaseDirectory/$itTestName" . ".java";    
+    my $testProjectDirectory = "$newITsResources/$filename";
     
-    # 96 
-    # 97 will not due to bugs in maven, they work when other ITs are run but 
it's due to ordering and fluke
-    # notes: I'm not sure this is testing anything anyone would be stupid 
enough to do. Basically creating an 
-    #        incomprehensible path though projects.
-    #        - mvn clean with this project seems to require plugin resolution 
and it fails. Executing clean should not require plugins.
-    # fix: remove the plugin it requires to be built to work and use a special 
IT repo that is checked in so that it will work.
-    # we should also setup a local instance of jetty to test remote repository 
workings
-    #
-    # - setup file based repo
-    # - run all tests with file-base repos
-    # - fire up jetty
-    # - run all tests with an http-based repo
-    # 
-    # We need to isolate 
+    # 96, 97 will not due to bugs in maven, they work when other ITs are run 
but it's due to ordering and fluke
     # 43 will not run because it can't find the maven-help-plugin
     # 90 will not run because it relies of an environment variable which I 
think is wrong 
     # 91 POM interpolation test failure
@@ -74,30 +118,25 @@
          $filename eq "it0106" || 
          $filename eq "it0107" ) 
     {
-       print POM "    <!-- <module>$filename</module> -->\n";
+        print SUITE "       // suite.addTestSuite($itTestName.class);\n";
     }
     else
     {
-       print POM "    <module>$filename</module>\n";
+        print SUITE "       suite.addTestSuite($itTestName.class);\n";
     }          
     
     if (!exists($comment{$filename})) {
        die "no comment: $filename\n";
     }
     
-    $itBaseDirectory = "$newITs/$filename";
-    $itPOM = "$itBaseDirectory/pom.xml";
-    $itTestCaseDirectory = 
"$itBaseDirectory/src/test/java/org/apache/maven/it"; 
-    $itTestName = "Maven" . uc($filename) . "Test";
-    $testFile = "$itTestCaseDirectory/$itTestName" . ".java";    
-    $testProjectDirectory = "$itBaseDirectory/src/test-project";
+    
     
     mkpath($itTestCaseDirectory);
     # DGF can't believe perl doesn't have a baked in recursive copy!
     if ("MSWin32" eq $^O) {
-        $winSrc = "$dirname/$filename";
+        my $winSrc = "$dirname/$filename";
         $winSrc =~ s!/!\\!g;
-        $winDest = $testProjectDirectory;
+        my $winDest = $testProjectDirectory;
         $winDest =~ s!/!\\!g;
         mkpath($testProjectDirectory);
         system( "xcopy /e $winSrc $winDest" );
@@ -112,50 +151,35 @@
        unlink("$testProjectDirectory/prebuild-hook.txt");
        unlink("$testProjectDirectory/log.txt");
 
-       open( P, "> $itPOM" ) or die;   
-       print P "<project>\n";
-       print P "  <modelVersion>4.0.0</modelVersion>\n";
-       print P "  <groupId>org.apache.maven.it</groupId>\n";
-       print P "  <artifactId>maven-core-it-$filename</artifactId>\n"; 
-       print P "  <version>1.0-SNAPSHOT</version>\n";
-       print P "  <name>Maven Integration Tests :: $filename</name>\n"; 
-       print P "  <description>![CDATA[\n\n";
-       print P "    $comment{$filename}\n\n";
-       print P "  ]]</description>\n"; 
+       open( T, "> $testFile") or die;
+    print $filename . "\n";    
+    print T <<END;
+package org.apache.maven.integrationtests;
+import java.io.*;
+import java.util.*;
 
-$build = <<EOF;        
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-core-it-verifier</artifactId>
-      <version>2.1-SNAPSHOT</version>
-    </dependency>
-  </dependencies>
-EOF
+import junit.framework.*;
+
+import org.apache.maven.it.*;
+import org.apache.maven.it.util.*;
+
+public class $itTestName extends TestCase /*extends 
AbstractMavenIntegrationTest*/ {    
+
+/** $comment{$filename} */
+public void test$filename() throws Exception {
+String basedir = System.getProperty("maven.test.tmpdir", 
System.getProperty("java.io.tmpdir"));
+File testDir = new File(basedir, getName());
+FileUtils.deleteDirectory(testDir);
+System.out.println("Extracting $filename to " + testDir.getAbsolutePath());
+ResourceExtractor.extractResourcePath(getClass(), "/$filename", testDir);
+Verifier verifier = new Verifier(testDir.getAbsolutePath());
+END
 
-       print P "$build";
-       print P "</project>\n";
-       close P;
-    
-    open( T, "> $testFile") or die;
-    print $filename . "\n";    
-    print T "package org.apache.maven.it;\n\n";
-    print T "import java.io.*;\n";
-    print T "import java.util.*;\n";
-    print T "import junit.framework.*;\n\n";
-    print T "import org.apache.maven.it.util.*;\n";
-    print T "public class $itTestName extends TestCase /*extends 
AbstractMavenIntegrationTest*/ {\n";    
-    print T "/** $comment{$filename} */\n";
-    print T "public void test$filename() throws Exception {\n";
-    print T "String basedir = System.getProperty(\"basedir\");\n";
-    print T "File testDir = new File(basedir, \"src\/test-project\");\n";
-    print T "Verifier verifier = new Verifier(testDir.getAbsolutePath());\n";
-    
     if (-e "$filePrebuildHook") {
        open (FILE, "$filePrebuildHook");
-           while ($line = <FILE>) {
+           while (my $line = <FILE>) {
                if ($line =~ /^(rm|rmdir) (.*)/) {
-                       ($cmd, $path) = ($1, $2);
+                       my ($cmd, $path) = ($1, $2);
                        
                        if ($cmd eq "rm") {
                                if ($path =~ 
m/^\$\{artifact:([^:]*?):([^:]*?):([^:]*?):([^:]*?)\}$/) {
@@ -178,7 +202,7 @@
     
     if (-e "$fileCliOptions") {
        open(FILE, $fileCliOptions);
-       $cliOptions = <FILE>;
+       my $cliOptions = <FILE>;
        chomp ($cliOptions);
        $cliOptions =~ s/"/\\"/g;
        print T "List cliOptions = new ArrayList();\n";
@@ -189,9 +213,9 @@
     if (-e "$fileSystemProperties") {
        open(FILE, $fileSystemProperties);
        print T  "Properties systemProperties = new Properties();\n";
-       while ($line = <FILE>) {
+       while (my $line = <FILE>) {
                next if ($line =~ m/^\s*\#/);
-               ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
+               my ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
                print T  "systemProperties.put(\"$name\", \"$value\");\n";
        }
        print T  "verifier.setSystemProperties(systemProperties);\n";
@@ -200,9 +224,9 @@
     if (-e "$fileVerifierProperties") {
        open(FILE, $fileVerifierProperties);
        print T  "Properties verifierProperties = new Properties();\n";
-       while ($line = <FILE>) {
+       while (my $line = <FILE>) {
                next if ($line =~ m/^\s*\#/);
-               ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
+               my ($name, $value) = ($line =~ m/^([^=]*)=(.*)/);
                if ($name eq "failOnErrorOutput" and $value eq "false") {
                        $failOnErrorOutput = 0;
                }
@@ -214,8 +238,8 @@
     
     open (FILE, $fileGoals) or die "Couldn't open $fileGoals: $!\n";
     
-    @goals = ();
-    while ($line = <FILE>) {
+    my @goals = ();
+    while (my $line = <FILE>) {
        next if ($line =~ m/^\s*$/);
        chomp ($line);
        push (@goals, $line);
@@ -224,7 +248,7 @@
        print T  "verifier.executeGoal(\"$goals[0]\");\n";
     } else {
            print T  "List goals = Arrays.asList(new String[] {";
-           for ($i = 0; $i < @goals; $i++) {
+           for (my $i = 0; $i < @goals; $i++) {
                print T  "\"$goals[$i]\"";
                print T  ", " if ($i != scalar(@goals) -1);
                }
@@ -238,7 +262,7 @@
        
                open (FILE, $fileExpectedResults) or die "Couldn't open 
$fileExpectedResults: $!\n";
                
-               while ($line = <FILE>) {
+               while (my $line = <FILE>) {
                chomp ($line);
                #print T  ("OLDLINE: $line\n");
                if ($line =~ /^\#(.*)/) {
@@ -263,13 +287,18 @@
        } else {
                print T  "// don't verify error free log\n";
        }
+       print T "verifier.resetStreams();\n";
+       print T "System.out.println(\"PASS\");\n";
        print T  "}}\n\n";
        
 }
 
-print POM "  </modules>\n";
-print POM "</project>";
-        
-print T  $postamble;        
+# DGF end of the suite
+print SUITE <<END;
+        return suite;
+    }
+}
+END
+
         
 closedir(DIR);


Reply via email to