package org.openntf.domino.tests.rpr;
import java.io.File;
import java.io.IOException;
import java.util.Vector;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openntf.domino.Session;
import org.openntf.domino.Stream;
import org.openntf.domino.junit.DominoJUnitRunner;
import org.openntf.domino.junit.TestRunnerUtil;
import org.openntf.domino.utils.Factory;
import org.openntf.domino.utils.Factory.SessionType;
import org.openntf.domino.utils.LMBCSUtils;
/**
* This test checks if the LMBSUtils works correctly. It computes LMBCS payload by <br>
* a) writing to a temp file and checking it's length (horrible slow)<br>
* b) using LMBSUtils.getPayload()
*
* The result is compared. At the end of the test you should see "All payloads are equal". Then you know that the LMBCUtils are working
* correctly
*
* @author Manfred Steinsiek, Foconis AG
*
*/
@RunWith(DominoJUnitRunner.class)
public class LMBCSPayload implements Runnable {
public static void main(final String[] args) {
TestRunnerUtil.runAsDominoThread(new LMBCSPayload(), TestRunnerUtil.NATIVE_SESSION);
}
public LMBCSPayload() {
// whatever you might want to do in your constructor, but stay away from Domino objects
}
@Override
@Test
public void run() {
Session sess = Factory.getSession(SessionType.CURRENT);
boolean succ = true;
char[] c = new char[1];
int[] payloads = new int[2];
Vector<String> diffv = new Vector<String>();
try {
// PrintStream prs = new PrintStream("d:/stein/misc/payload-nativelotus.txt");
for (int i = 0; i < 65536; i++) {
if (i % 1000 == 0)
System.out.println(i + " ...");
c[0] = (char) i;
if (!cmpOne(sess, new String(c), payloads, false)) {
diffv.add("\t" + i + ":\tLotus=" + payloads[0] + "\tOwn=" + payloads[1]);
succ = false;
}
// prs.printf("%5d %04x %d\n", i, i, payloads[0]);
}
// prs.close();
if (succ)
System.out.println("All payloads are equal");
else {
System.out.println("Differences (" + diffv.size() + "):");
for (String s : diffv)
System.out.println(s);
Assert.fail("Payloads are not equal");
}
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean cmpOne(final Session sess, final String s, final int[] payloads, final boolean protIfEq) throws IOException {
payloads[0] = getStrPayloadLotus(sess, s);
payloads[1] = LMBCSUtils.getPayload(s);
if (payloads[0] == payloads[1]) {
if (protIfEq)
System.out.println("Payloads for \"" + s + "\" are equal: " + payloads[0]);
return true;
}
System.out.println("Payloads for \"" + s + "\" are different: Lotus=" + payloads[0] + ", Own=" + payloads[1]);
return false;
}
private int getStrPayloadLotus(final Session sess, final String whose) throws IOException {
int payload = 0;
File fAux = null;
Stream str = null;
try {
fAux = File.createTempFile("ntfdom", "aux.tmp");
str = sess.createStream();
str.open(fAux.getPath(), "LMBCS");
str.writeText(whose);
payload = str.getBytes();
} finally {
if (str != null)
str.close();
if (fAux != null)
fAux.delete();
}
return payload;
}
}