Skip to content

Commit

Permalink
[MJAVADOC-544] - Changed behaviour of Javadoc for temporary files enc…
Browse files Browse the repository at this point in the history
…oding (options, argfile, ...)
  • Loading branch information
michael-st committed Dec 3, 2018
1 parent 85729d5 commit 45473e3
Show file tree
Hide file tree
Showing 11 changed files with 589 additions and 3 deletions.
3 changes: 3 additions & 0 deletions pom.xml
Expand Up @@ -116,6 +116,9 @@ under the License.
<contributor>
<name>Kevin Risden</name>
</contributor>
<contributor>
<name>Michael Stumpf</name>
</contributor>
</contributors>

<dependencies>
Expand Down
Expand Up @@ -108,6 +108,7 @@
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
Expand Down Expand Up @@ -4374,9 +4375,15 @@ private void addCommandLineOptions( Commandline cmd, List<String> arguments, Fil
options.append( StringUtils.join( arguments.iterator(),
SystemUtils.LINE_SEPARATOR ) );

/* default to platform encoding */
String outputFileEncoding = null;
if ( JAVA_VERSION.isAtLeast( "9" ) )
{
outputFileEncoding = StandardCharsets.UTF_8.name();
}
try
{
FileUtils.fileWrite( optionsFile.getAbsolutePath(), null /* platform encoding */, options.toString() );
FileUtils.fileWrite( optionsFile.getAbsolutePath(), outputFileEncoding, options.toString() );
}
catch ( IOException e )
{
Expand Down Expand Up @@ -4420,9 +4427,15 @@ private void addCommandLineArgFile( Commandline cmd, File javadocOutputDirectory
cmd.createArg().setValue( "@" + FILES_FILE_NAME );
}

/* default to platform encoding */
String outputFileEncoding = null;
if ( JAVA_VERSION.isAtLeast( "9" ) )
{
outputFileEncoding = StandardCharsets.UTF_8.name();
}
try
{
FileUtils.fileWrite( argfileFile.getAbsolutePath(), null /* platform encoding */,
FileUtils.fileWrite( argfileFile.getAbsolutePath(), outputFileEncoding,
StringUtils.join( files.iterator(), SystemUtils.LINE_SEPARATOR ) );
}
catch ( IOException e )
Expand Down
117 changes: 116 additions & 1 deletion src/test/java/org/apache/maven/plugins/javadoc/JavadocReportTest.java
Expand Up @@ -26,6 +26,7 @@
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.HashMap;
Expand Down Expand Up @@ -189,10 +190,26 @@ private void createTestRepo()
*/
private static String readFile( File file )
throws IOException
{
return readFile( file, StandardCharsets.UTF_8 );
}

/**
* Convenience method that reads the contents of the specified file object into a string with a
* <code>space</code> as line separator.
*
* @see #LINE_SEPARATOR
* @param file the file to be read
* @param cs charset to use
* @return a String object that contains the contents of the file
* @throws IOException if any
*/
private static String readFile( File file, Charset cs )
throws IOException
{
StringBuilder str = new StringBuilder( (int) file.length() );

for ( String strTmp : Files.readAllLines( file.toPath(), StandardCharsets.UTF_8 ) )
for ( String strTmp : Files.readAllLines( file.toPath(), cs ) )
{
str.append( LINE_SEPARATOR);
str.append( strTmp );
Expand Down Expand Up @@ -497,6 +514,104 @@ public void testQuotedPath()
}
}

/**
* Method to test when the options file has umlauts.
*
* @throws Exception if any
*/
public void testOptionsUmlautEncoding()
throws Exception
{
File testPom = new File(unit, "optionsumlautencoding-test/optionsumlautencoding-test-plugin-config.xml" );
JavadocReport mojo = lookupMojo( testPom );
mojo.execute();

File optionsFile = new File( mojo.getOutputDirectory(), "options" );
assertTrue( optionsFile.exists() );

// check for a part of the window title
String content;
if ( JavaVersion.JAVA_VERSION.isAtLeast( "9" ) )
{
content = readFile( optionsFile, StandardCharsets.UTF_8 );
}
else
{
content = readFile( optionsFile, Charset.defaultCharset() );
}
assertTrue( content.contains( "Options Umlaut Encoding ö ä ü ß" ) );

File apidocs = new File( getBasedir(), "target/test/unit/optionsumlautencoding-test/target/site/apidocs" );

// package level generated javadoc files
assertTrue( new File( apidocs, "optionsumlautencoding/test/App.html" ).exists() );
assertTrue( new File( apidocs, "optionsumlautencoding/test/AppSample.html" ).exists() );

// project level generated javadoc files
assertTrue( new File( apidocs, "index-all.html" ).exists() );
assertTrue( new File( apidocs, "index.html" ).exists() );
assertTrue( new File( apidocs, "overview-tree.html" ).exists() );
assertTrue( new File( apidocs, "stylesheet.css" ).exists() );

if ( JavaVersion.JAVA_VERSION.isBefore( "10" ) )
{
assertTrue( new File( apidocs, "package-list" ).exists() );
}
else
{
assertTrue( new File( apidocs, "element-list" ).exists() );
}
}

/**
* Method to test when the argfile file has umlauts.
*
* @throws Exception if any
*/
public void testArgfileUmlautEncoding()
throws Exception
{
File testPom = new File( unit, "argfileumlautencoding-test/argfileumlautencoding-test-plugin-config.xml" );
JavadocReport mojo = lookupMojo( testPom );
mojo.execute();

File argfileFile = new File( mojo.getOutputDirectory(), "argfile" );
assertTrue( argfileFile.exists() );

// check for the umlaut class name
String content;
if ( JavaVersion.JAVA_VERSION.isAtLeast( "9" ) )
{
content = readFile( argfileFile, StandardCharsets.UTF_8 );
}
else
{
content = readFile( argfileFile, Charset.defaultCharset() );
}
assertTrue( content.contains( "Appäöüß" ) );

File apidocs = new File( getBasedir(), "target/test/unit/argfileumlautencoding-test/target/site/apidocs" );

// package level generated javadoc files
assertTrue( new File( apidocs, "argfileumlautencoding/test/Appäöüß.html" ).exists() );
assertTrue( new File( apidocs, "argfileumlautencoding/test/AppSample.html" ).exists() );

// project level generated javadoc files
assertTrue( new File( apidocs, "index-all.html" ).exists() );
assertTrue( new File( apidocs, "index.html" ).exists() );
assertTrue( new File( apidocs, "overview-tree.html" ).exists() );
assertTrue( new File( apidocs, "stylesheet.css" ).exists() );

if ( JavaVersion.JAVA_VERSION.isBefore( "10" ) )
{
assertTrue( new File( apidocs, "package-list" ).exists() );
}
else
{
assertTrue( new File( apidocs, "element-list" ).exists() );
}
}

/**
* @throws Exception if any
*/
Expand Down
@@ -0,0 +1,80 @@
package org.apache.maven.plugins.javadoc.stubs;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.apache.maven.model.Scm;
import org.apache.maven.model.Build;

import java.util.List;
import java.util.ArrayList;
import java.io.File;

public class ArgfileUmlautEncodingMavenProjectStub
extends MavenProjectStub
{
private Scm scm;

public ArgfileUmlautEncodingMavenProjectStub()
{
readModel( new File( getBasedir(), "argfileumlautencoding-test-plugin-config.xml" ) );

setGroupId( "org.apache.maven.plugins.maven-javadoc-plugin.unit" );
setArtifactId( "argfileumlautencoding-test" );
setVersion( "1.0-SNAPSHOT" );
setName( "Maven Javadoc Plugin Argfile Umlaut Encoding Test" );
setUrl( "http://maven.apache.org" );
setPackaging( "jar" );

Scm scm = new Scm();
scm.setConnection( "scm:svn:http://svn.apache.org/maven/sample/trunk" );
setScm( scm );

Build build = new Build();
build.setFinalName( "argfileumlautencoding-test" );
build.setDirectory( super.getBasedir() + "/target/test/unit/argfileumlautencoding-test/target" );
setBuild( build );

List<String> compileSourceRoots = new ArrayList<>();
compileSourceRoots.add( getBasedir() + "/argfileumlautencoding/test" );
setCompileSourceRoots( compileSourceRoots );
}

/** {@inheritDoc} */
@Override
public Scm getScm()
{
return scm;
}

/** {@inheritDoc} */
@Override
public void setScm( Scm scm )
{
this.scm = scm;
}

/** {@inheritDoc} */
@Override
public File getBasedir()
{
return new File( super.getBasedir() + "/src/test/resources/unit/argfileumlautencoding-test" );
}
}
@@ -0,0 +1,80 @@
package org.apache.maven.plugins.javadoc.stubs;

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

import org.apache.maven.plugin.testing.stubs.MavenProjectStub;
import org.apache.maven.model.Scm;
import org.apache.maven.model.Build;

import java.util.List;
import java.util.ArrayList;
import java.io.File;

public class OptionsUmlautEncodingMavenProjectStub
extends MavenProjectStub
{
private Scm scm;

public OptionsUmlautEncodingMavenProjectStub()
{
readModel( new File( getBasedir(), "optionsumlautencoding-test-plugin-config.xml" ) );

setGroupId( "org.apache.maven.plugins.maven-javadoc-plugin.unit" );
setArtifactId( "optionsumlautencoding-test" );
setVersion( "1.0-SNAPSHOT" );
setName( "Maven Javadoc Plugin Options Umlaut Encoding Test" );
setUrl( "http://maven.apache.org" );
setPackaging( "jar" );

Scm scm = new Scm();
scm.setConnection( "scm:svn:http://svn.apache.org/maven/sample/trunk" );
setScm( scm );

Build build = new Build();
build.setFinalName( "optionsumlautencoding-test" );
build.setDirectory( super.getBasedir() + "/target/test/unit/optionsumlautencoding-test/target" );
setBuild( build );

List<String> compileSourceRoots = new ArrayList<>();
compileSourceRoots.add( getBasedir() + "/optionsumlautencoding/test" );
setCompileSourceRoots( compileSourceRoots );
}

/** {@inheritDoc} */
@Override
public Scm getScm()
{
return scm;
}

/** {@inheritDoc} */
@Override
public void setScm( Scm scm )
{
this.scm = scm;
}

/** {@inheritDoc} */
@Override
public File getBasedir()
{
return new File( super.getBasedir() + "/src/test/resources/unit/optionsumlautencoding-test" );
}
}

0 comments on commit 45473e3

Please sign in to comment.