Skip to content

Commit

Permalink
Bindings for lou_registerLogCallback and lou_setLogLevel
Browse files Browse the repository at this point in the history
  • Loading branch information
Bert Frees committed Jun 12, 2014
1 parent 5629f9c commit a30a1ad
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 3 deletions.
4 changes: 2 additions & 2 deletions pom.xml
Expand Up @@ -6,7 +6,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>org.liblouis</groupId>
<artifactId>liblouis-java</artifactId>
<version>1.2.0</version>
<version>1.2.1-SNAPSHOT</version>
<packaging>bundle</packaging>
<name>liblouis-java</name>
<description>JNA based Java bindings to liblouis, an open-source braille translator and back-translator.</description>
Expand Down Expand Up @@ -43,7 +43,7 @@
<dependency>
<groupId>org.liblouis</groupId>
<artifactId>louis</artifactId>
<version>2.5.4</version>
<version>2.6.0-SNAPSHOT</version>
<type>nar</type>
<scope>test</scope>
</dependency>
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/org/liblouis/Logger.java
@@ -0,0 +1,19 @@
package org.liblouis;

import com.sun.jna.Callback;

public interface Logger extends Callback {

public static abstract class Level {
public static final int ALL = -2147483648;
public static final int DEBUG = 10000;
public static final int INFO = 20000;
public static final int WARN = 30000;
public static final int ERROR = 40000;
public static final int FATAL = 50000;
public static final int OFF = 2147483647;
}

public void invoke(int level, String message);

}
4 changes: 4 additions & 0 deletions src/main/java/org/liblouis/Louis.java
Expand Up @@ -52,6 +52,10 @@ public int lou_translatePrehyphenated(String tableList, WideString inbuf, IntByR

public void lou_registerTableResolver(TableResolver resolver);

public void lou_registerLogCallback(Logger logger);

public void lou_setLogLevel(int level);

}

public static class TypeMapper extends DefaultTypeMapper {
Expand Down
84 changes: 84 additions & 0 deletions src/test/java/org/liblouis/LoggerTest.java
@@ -0,0 +1,84 @@
package org.liblouis;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FilenameFilter;
import java.io.PrintStream;
import java.util.Collection;

import static org.apache.commons.io.filefilter.FileFilterUtils.asFileFilter;
import static org.apache.commons.io.filefilter.FileFilterUtils.trueFileFilter;
import org.apache.commons.io.FileUtils;

import org.junit.Before;
import org.junit.Test;

import static org.junit.Assert.assertEquals;

import static org.liblouis.Logger.Level.DEBUG;
import static org.liblouis.Logger.Level.INFO;
import static org.liblouis.Logger.Level.WARN;
import static org.liblouis.Logger.Level.ERROR;
import static org.liblouis.Logger.Level.FATAL;

public class LoggerTest {

@Test
public void testLogger() {
logger.reset();
try { new Translator("unexisting_file"); }
catch (CompilationException e) {}
assertEquals("[ERROR] Cannot resolve table 'unexisting_file'" + "\n" +
"[ERROR] 1 errors found." + "\n" +
"[ERROR] unexisting_file could not be found" + "\n",
logger.toString());
logger.reset();
Louis.getLibrary().lou_setLogLevel(FATAL);
try { new Translator("unexisting_file"); }
catch (CompilationException e) {}
assertEquals("", logger.toString());
}

private ByteArrayLogger logger;

@Before
@SuppressWarnings("unchecked")
public void initialize() {
final File testRootDir = new File(this.getClass().getResource("/").getPath());
Louis.setLibraryPath(((Collection<File>)FileUtils.listFiles(
new File(testRootDir, "../dependency"),
asFileFilter(new FilenameFilter() {
public boolean accept(File dir, String fileName) {
return dir.getName().equals("shared") && fileName.startsWith("liblouis"); }}),
trueFileFilter())).iterator().next());
logger = new ByteArrayLogger() {
public String format(int level, String message) {
switch (level) {
case DEBUG: return "[DEBUG] " + message;
case INFO: return "[INFO] " + message;
case WARN: return "[WARN] " + message;
case ERROR: return "[ERROR] " + message;
case FATAL: return "[FATAL] " + message; }
return null;
}
};
Louis.getLibrary().lou_registerLogCallback(logger);
}

private abstract class ByteArrayLogger implements Logger {
private ByteArrayOutputStream stream = new ByteArrayOutputStream();
private PrintStream printStream = new PrintStream(stream);
public abstract String format(int level, String message);
public void invoke(int level, String message) {
String formattedMessage = format(level, message);
if (formattedMessage != null)
printStream.println(formattedMessage);
}
public void reset() {
stream.reset();
}
public String toString() {
return stream.toString();
}
}
}
2 changes: 1 addition & 1 deletion src/test/java/org/liblouis/TranslatorTest.java
Expand Up @@ -19,7 +19,7 @@ public class TranslatorTest {
@Test
public void testVersion() {
assertEquals(
"2.5.4",
"2.6.0-SNAPSHOT",
Louis.getLibrary().lou_version());
}

Expand Down

0 comments on commit a30a1ad

Please sign in to comment.