Author: ceki Date: Fri Oct 3 17:44:19 2008 New Revision: 1174 Added: slf4j/trunk/integration/ (props changed) slf4j/trunk/integration/build.xml slf4j/trunk/integration/lib/ slf4j/trunk/integration/lib/junit-3.8.1.jar (contents, props changed) slf4j/trunk/integration/lib/slf4j-simple-1.5.0.jar (contents, props changed) slf4j/trunk/integration/lib/slf4j-simple-1.5.4-SNAPSHOT.jar (contents, props changed) slf4j/trunk/integration/pom.xml slf4j/trunk/integration/src/ slf4j/trunk/integration/src/main/ slf4j/trunk/integration/src/main/java/ slf4j/trunk/integration/src/test/ slf4j/trunk/integration/src/test/java/ slf4j/trunk/integration/src/test/java/org/ slf4j/trunk/integration/src/test/java/org/slf4j/ slf4j/trunk/integration/src/test/java/org/slf4j/VersionTest.java Modified: slf4j/trunk/pom.xml slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java slf4j/trunk/slf4j-api/src/main/java/org/slf4j/impl/StaticLoggerBinder.java slf4j/trunk/slf4j-site/src/site/pages/codes.html
Log: - testing VERSION checks - added a new module called "integration" for testing interactions between various SLF4J versions. This module uses Ant and relies on Ant's flexibility in providing different classpaths to various tasks (this is much harder to do with Maven). The Ant build file is still invoked by Maven. Thus, integration tests are run at build time. Added: slf4j/trunk/integration/build.xml ============================================================================== --- (empty file) +++ slf4j/trunk/integration/build.xml Fri Oct 3 17:44:19 2008 @@ -0,0 +1,44 @@ +<project name="integration" default="testAll" basedir="."> + + <echo message="compile classpath: ${compile_classpath}" /> + <echo message="runtime classpath: ${runtime_classpath}" /> + <echo message="test classpath: ${test_classpath}" /> + <echo message="plugin classpath: ${plugin_classpath}" /> + + <path id="path150"> + <pathelement location="xtarget/classes/" /> + <pathelement location="target/test-classes/" /> + <pathelement location="../slf4j-api/target/slf4j-api-${currentVersion}.jar" /> + <pathelement location="./lib/slf4j-simple-1.5.0.jar" /> + </path > + + + <!-- this is really very ugly, but it's the only way to circumvent + http://jira.codehaus.org/browse/MANTRUN-95 + --> + <taskdef name="junit" classpath="${plugin_classpath};${compile_classpath}" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask" /> + + + <target name="testAll"> + <echo>Running unit tests via Ant</echo> + <echo>basedir=${basedir}</echo> + <echo>user.home=${user.home}</echo> + <mkdir dir="target/unit-reports" /> + + <junit printsummary="yes" fork="no" haltonfailure="yes"> + <classpath refid="path150" /> + + <formatter type="plain" /> + <batchtest fork="yes" todir="target/unit-reports"> + <fileset dir="src/test/java"> + <include name="**/VersionTest.java" /> + <exclude name="**/XTests.java" /> + </fileset> + </batchtest> + </junit> + + </target> + + + +</project> \ No newline at end of file Added: slf4j/trunk/integration/lib/junit-3.8.1.jar ============================================================================== Binary file. No diff available. Added: slf4j/trunk/integration/lib/slf4j-simple-1.5.0.jar ============================================================================== Binary file. No diff available. Added: slf4j/trunk/integration/lib/slf4j-simple-1.5.4-SNAPSHOT.jar ============================================================================== Binary file. No diff available. Added: slf4j/trunk/integration/pom.xml ============================================================================== --- (empty file) +++ slf4j/trunk/integration/pom.xml Fri Oct 3 17:44:19 2008 @@ -0,0 +1,98 @@ +<project + xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <parent> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-parent</artifactId> + <version>1.5.4-SNAPSHOT</version> + </parent> + + <modelVersion>4.0.0</modelVersion> + + <groupId>org.slf4j</groupId> + <artifactId>integration</artifactId> + <packaging>jar</packaging> + <name>SLF4J Integration tests</name> + + <url>http://www.slf4j.org</url> + <description>SLF4J integration tests</description> + + <dependencies> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-api</artifactId> + </dependency> + + <!-- declaration to cimcumvent http://jira.codehaus.org/browse/MANTRUN-95 --> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + </dependency> + <!-- declaration to cimcumvent http://jira.codehaus.org/browse/MANTRUN-95 --> + <dependency> + <groupId>ant</groupId> + <artifactId>ant-junit</artifactId> + <version>1.6.5</version> + </dependency> + + </dependencies> + + <build> + <plugins> + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <version>1.2</version> + <dependencies> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>3.8.1</version> + </dependency> + <dependency> + <groupId>ant</groupId> + <artifactId>ant-junit</artifactId> + <version>1.6.5</version> + </dependency> + </dependencies> + <executions> + <execution> + <id>ant-test</id> + <phase>package</phase> + <configuration> + <tasks> + <property name="currentVersion" value="${version}" /> + <property name="compile_classpath" refid="maven.compile.classpath"/> + <property name="runtime_classpath" refid="maven.runtime.classpath"/> + <property name="test_classpath" refid="maven.test.classpath"/> + <property name="plugin_classpath" refid="maven.plugin.classpath"/> + <ant antfile="${basedir}/build.xml"/> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-surefire-plugin</artifactId> + <configuration> + <forkMode>once</forkMode> + <reportFormat>plain</reportFormat> + <trimStackTrace>false</trimStackTrace> + <excludes> + <exclude>**/*Test.java</exclude> + </excludes> + </configuration> + </plugin> + </plugins> + + + </build> + +</project> \ No newline at end of file Added: slf4j/trunk/integration/src/test/java/org/slf4j/VersionTest.java ============================================================================== --- (empty file) +++ slf4j/trunk/integration/src/test/java/org/slf4j/VersionTest.java Fri Oct 3 17:44:19 2008 @@ -0,0 +1,24 @@ +package org.slf4j; + +import junit.framework.TestCase; + +public class VersionTest extends TestCase { + + public VersionTest(String name) { + super(name); + } + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + + public void test() throws Exception { + Logger logger = LoggerFactory.getLogger(this.getClass()); + logger.info("hello world"); + } +} Modified: slf4j/trunk/pom.xml ============================================================================== --- slf4j/trunk/pom.xml (original) +++ slf4j/trunk/pom.xml Fri Oct 3 17:44:19 2008 @@ -23,16 +23,17 @@ <modules> <module>slf4j-api</module> - <module>slf4j-simple</module> + <module>slf4j-simple</module> <module>slf4j-nop</module> <module>slf4j-jdk14</module> <module>slf4j-log4j12</module> <module>slf4j-jcl</module> - <module>slf4j-ext</module> + <module>slf4j-ext</module> <module>jcl-over-slf4j</module> <module>jcl104-over-slf4j</module> <module>log4j-over-slf4j</module> <module>jul-to-slf4j</module> + <module>integration</module> <module>slf4j-site</module> <module>slf4j-migrator</module> </modules> Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java ============================================================================== --- slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java (original) +++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/LoggerFactory.java Fri Oct 3 17:44:19 2008 @@ -26,10 +26,10 @@ import org.slf4j.helpers.Util; import org.slf4j.impl.StaticLoggerBinder; - + /** * The <code>LoggerFactory</code> is a utility class producing Loggers for - * various logging APIs, most notably for log4j, logback and JDK 1.4 logging. + * various logging APIs, most notably for log4j, logback and JDK 1.4 logging. * Other implementations such as [EMAIL PROTECTED] org.slf4j.impl.NOPLogger NOPLogger} and * [EMAIL PROTECTED] org.slf4j.impl.SimpleLogger SimpleLogger} are also supported. * @@ -50,34 +50,44 @@ static final String NO_STATICLOGGERBINDER_URL = "http://www.slf4j.org/codes.html#StaticLoggerBinder"; static final String NULL_LF_URL = "http://www.slf4j.org/codes.html#null_LF"; static final String VERSION_MISMATCH = "http://www.slf4j.org/codes.html#version_mismatch"; - + static private final String EXPECTED_VERSION = "1.5.4-SNAPSHOT"; - + // private constructor prevents instantiation private LoggerFactory() { } - static { - try { + try { String actualVer = StaticLoggerBinder.VERSION; - if(!EXPECTED_VERSION.equals(actualVer)) { - Util.reportFailure("Actual version "+actualVer+" differs from expected version "+EXPECTED_VERSION); - Util.reportFailure("See "+VERSION_MISMATCH+" for further details."); + if (!EXPECTED_VERSION.equals(actualVer)) { + Util.reportFailure("The version " + actualVer + + " of your slf4j-binding differs from " + EXPECTED_VERSION + + ", the expected version."); + Util.reportFailure("See " + VERSION_MISMATCH + " for further details."); } - } catch(Exception e) { - e.printStackTrace(); + } catch (java.lang.NoSuchFieldError nsfe) { + Util + .reportFailure("The version of your slf4j-binding is probably older than 1.5.4, and differs from " + + EXPECTED_VERSION + ", the expected version."); + Util.reportFailure("See " + VERSION_MISMATCH + " for further details."); + } catch (Throwable e) { + Util + .reportFailure("An unexpected problem occured while checking the version of your slf4j-binding"); + e.printStackTrace(); } - - try { + + try { loggerFactory = StaticLoggerBinder.SINGLETON.getLoggerFactory(); - } catch(NoClassDefFoundError ncde) { + } catch (NoClassDefFoundError ncde) { String msg = ncde.getMessage(); - if(msg != null && msg.indexOf("org/slf4j/impl/StaticLoggerBinder") != -1) { - Util.reportFailure("Failed to load class \"org.slf4j.impl.StaticLoggerBinder\"."); - Util.reportFailure("See "+NO_STATICLOGGERBINDER_URL+" for further details."); - - } + if (msg != null && msg.indexOf("org/slf4j/impl/StaticLoggerBinder") != -1) { + Util + .reportFailure("Failed to load class \"org.slf4j.impl.StaticLoggerBinder\"."); + Util.reportFailure("See " + NO_STATICLOGGERBINDER_URL + + " for further details."); + + } throw ncde; } catch (Exception e) { // we should never get here @@ -91,12 +101,14 @@ * bound [EMAIL PROTECTED] ILoggerFactory} instance. * * @param name - * The name of the logger. + * The name of the logger. * @return logger */ public static Logger getLogger(String name) { - if(loggerFactory == null) { - throw new IllegalStateException("Logging factory implementation cannot be null. See also "+NULL_LF_URL); + if (loggerFactory == null) { + throw new IllegalStateException( + "Logging factory implementation cannot be null. See also " + + NULL_LF_URL); } return loggerFactory.getLogger(name); } @@ -106,12 +118,14 @@ * the statically bound [EMAIL PROTECTED] ILoggerFactory} instance. * * @param clazz - * the returned logger will be named after clazz + * the returned logger will be named after clazz * @return logger */ public static Logger getLogger(Class clazz) { - if(loggerFactory == null) { - throw new IllegalStateException("Logging factory implementation cannot be null. See also "+NULL_LF_URL); + if (loggerFactory == null) { + throw new IllegalStateException( + "Logging factory implementation cannot be null. See also " + + NULL_LF_URL); } return loggerFactory.getLogger(clazz.getName()); } @@ -119,8 +133,8 @@ /** * Return the [EMAIL PROTECTED] ILoggerFactory} instance in use. * - * <p>ILoggerFactory instance is bound with this class at compile - * time. + * <p> + * ILoggerFactory instance is bound with this class at compile time. * * @return the ILoggerFactory instance in use */ Modified: slf4j/trunk/slf4j-api/src/main/java/org/slf4j/impl/StaticLoggerBinder.java ============================================================================== --- slf4j/trunk/slf4j-api/src/main/java/org/slf4j/impl/StaticLoggerBinder.java (original) +++ slf4j/trunk/slf4j-api/src/main/java/org/slf4j/impl/StaticLoggerBinder.java Fri Oct 3 17:44:19 2008 @@ -47,7 +47,8 @@ * Version tag used to check compatibility. The value of this field is * modified in each release. */ - public static final String VERSION = "1.5.4-SNAPSHOT"; + // to avoid constant folding by the compiler, VERSION field should *not* be final + public static String VERSION = "1.5.4-SNAPSHOT"; // !final private StaticLoggerBinder() { throw new UnsupportedOperationException("This code should have never made it into the jar"); Modified: slf4j/trunk/slf4j-site/src/site/pages/codes.html ============================================================================== --- slf4j/trunk/slf4j-site/src/site/pages/codes.html (original) +++ slf4j/trunk/slf4j-site/src/site/pages/codes.html Fri Oct 3 17:44:19 2008 @@ -173,6 +173,9 @@ matches that of the slf4j binding. </p> + <p>At initialization time, if SLF4J suspects that there may be a + mismatch problem, it emits a warning about the said mismatch. + </p> </div> </body> _______________________________________________ dev mailing list dev@slf4j.org http://www.slf4j.org/mailman/listinfo/dev