📄 messagetest.java
字号:
int actualLen = usedLen + offset;
byte b[] = new byte[actualLen];
for(int i=0; i<usedLen; ++i)
b[i+offset] = (byte)i;
MessageElement element;
if (namespace == null)
element = m.newMessageElement("elem"+n, type, b, offset, usedLen);
else
element = m.newMessageElement(namespace+":elem"+n, type, b, offset, usedLen);
return element;
}
void checkElements(Message m, Vector v)
{
Enumeration e;
e = m.getElements();
int cnt = 0;
while(e.hasMoreElements()) {
MessageElement el
= (MessageElement)e.nextElement();
if (!referenceIsIn(el, v)) {
fail("Unexpected element, "+el.getName()+", found in message");
}
checkElement(el);
cnt++;
}
assertTrue(v.size() == cnt);
}
void checkElement(MessageElement element)
{
String nsname = element.getName();
String[] names = MessageElement.parseName(nsname);
String namespace = names[0];
String name = names[1];
assertTrue(namespace.equals("ding"));
assertTrue(name.substring(0, 4).equals("elem"));
int n = 0;
try {
n = Integer.parseInt(name.substring(4));
} catch(NumberFormatException ex) {
fail("Element name does not end with integer string");
}
int cnt=n+10;
assertTrue(element.getType().equals(testTypes[n % testTypes.length]));
assertTrue(cnt == element.getLength());
try {
// Check using the input stream.
InputStream is = element.getStream();
for(int i=0; i<cnt; ++i) {
int d = is.read();
assertTrue("Entry "+i+" is "+d+" expected "+i, d == i);
}
assertTrue(is.read() == -1);
// Check using the byte array.
byte bs[] = element.getBytesOffset();
int offset = element.getOffset();
for(int i=0; i<cnt; ++i) {
int d = bs[i+offset];
assertTrue("Entry "+i+" is "+d+" expected "+i, d == i);
}
} catch(Exception ex) {
fail("Threw "+ex);
}
}
void checkWireMessage(byte[] bytes, Vector elements, boolean oneNamespace)
{
int bi=0;
elements = (Vector)elements.clone();
int n = elements.size();
// Message magic word
assertTrue("Incorrect message magic[0]", bytes[bi++] == 'j');
assertTrue("Incorrect message magic[1]", bytes[bi++] == 'x');
assertTrue("Incorrect message magic[2]", bytes[bi++] == 'm');
assertTrue("Incorrect message magic[3]", bytes[bi++] == 'g');
// Message version
assertTrue("Incorrect message version", bytes[bi++] == 0);
// Namespaces - one
Hashtable namespace2id = new Hashtable();
int namespaceCnt = oneNamespace ? 1: n < 4 ? n : 4;
assertTrue(bytes[bi++] == (namespaceCnt >> 8));
assertTrue(bytes[bi++] == (namespaceCnt & 0xff));
if (oneNamespace) {
// First and only Namespaces
assertTrue(bytes[bi++] == 0);
assertTrue(bytes[bi++] == 4);
assertTrue(bytes[bi++] == 'd');
assertTrue(bytes[bi++] == 'i');
assertTrue(bytes[bi++] == 'n');
assertTrue(bytes[bi++] == 'g');
} else {
for(int ns=0; ns<namespaceCnt; ++ns) {
String namespace = getWireString(bytes, bi);
bi = skipWireString(bytes, bi);
namespace2id.put(namespace, new Integer(ns+2));
}
}
// Element count
assertTrue("Wrong element count at index "+bi, bytes[bi++] == n>>8);
assertTrue(bytes[bi++] == (n&0xff));
for(int i=1; i<=n; ++i) {
String name = getWireString(bytes, bi+6);
int ei = Integer.parseInt(name.substring(4));
int nsid;
String namespace;
if (oneNamespace) {
nsid = 2;
namespace = "ding";
} else {
namespace = "namespace" + (ei % 4);
Integer nsidint = (Integer)namespace2id.get(namespace);
nsid = nsidint.intValue();
}
MessageElement el = removeElement(elements, namespace+":"+name);
if (el == null)
fail("Unexpected element at index "+bi+" named "+name);
bi = checkWireElement(bytes, bi, ei, nsid);
// End of message
}
assertTrue(elements.size() == 0);
assertTrue(bytes.length == bi);
}
int checkWireElement(byte[] bytes, int bi, int n,
int namespaceId)
{
// Element magic word
assertTrue("Incorrect element magic[0]", bytes[bi++] == 'j');
assertTrue("Incorrect element magic[1]", bytes[bi++] == 'x');
assertTrue("Incorrect element magic[2]", bytes[bi++] == 'e');
assertTrue("Incorrect element magic[3]", bytes[bi++] == 'l');
// Namespace id
assertTrue("namespace id="+bytes[bi], bytes[bi++] == namespaceId);
// flags
assertTrue(bytes[bi++] == 0x01);
// Name
String name = "elem"+n;
bi = checkWireString(bytes, bi, "elem"+n);
// Element media type
bi = checkWireString(bytes, bi, testTypes[n % testTypes.length].toString());
// Element data length
int len = n+10;
assertTrue(bytes[bi++] == ((len >> 24) & 0xff));
assertTrue(bytes[bi++] == ((len >> 16) & 0xff));
assertTrue(bytes[bi++] == ((len >> 8) & 0xff));
assertTrue("at byte "+bi, bytes[bi++] == ((len >> 0) & 0xff));
// Element data
for(int i=0; i<len; ++i) {
assertTrue(bytes[bi++] == i);
}
return bi;
}
int checkWireString(byte[] bytes, int bi, String s)
{
byte nbytes[] = s.getBytes();
int len = nbytes.length;
assertTrue(bytes[bi++] == (len>>8));
assertTrue(bytes[bi++] == (len&0xff));
for(int i=0; i<len; ++i)
assertTrue("string wrong at byte "+i, bytes[bi++] == nbytes[i]);
return bi;
}
String getWireString(byte[] bytes, int bi)
{
int len = (bytes[bi] << 8) + bytes[bi+1];
assertTrue("Name too long: "+len, len<50);
try {
return new String(bytes, bi+2, len, "UTF8");
} catch(UnsupportedEncodingException ex) {
fail(ex.toString());
return null; // Never called
}
}
int skipWireString(byte[] bytes, int bi)
{
int len = (bytes[bi] << 8) + bytes[bi+1];
assertTrue("Name too long: "+len, len<50);
return bi+2+len;
}
void printMessage(String label, Message m)
{
System.out.println(label+":");
Enumeration e=m.getElements();
while(e.hasMoreElements()) {
MessageElement el = (MessageElement)e.nextElement();
printElement(el);
}
}
void printElement(MessageElement el)
{
System.out.println(" name: "+el.getName());
MimeMediaType type = el.getType();
if (type != null)
System.out.println(" type: "+type);
if (type != null && type.getType().equals("text")) {
System.out.println(" value: "+new String(el.getBytesOffset(), el.getOffset(), el.getLength()));
} else {
byte[] bytes=el.getBytesOffset();
int end = el.getOffset() + el.getLength();
int cnt=0;
for(int i=el.getOffset(); i<end; ++i) {
if (cnt == 0) {
System.out.print(" value: "+bytes[i]);
++cnt;
} else {
System.out.print(" "+bytes[i]);
++cnt;
}
if (cnt == 20) {
System.out.println("");
cnt = 0;
}
}
if (cnt != 0)
System.out.println("");
}
System.out.println("");
}
void dumpBytes(byte[] bytes)
{
System.out.println("length = "+bytes.length);
for(int i=0; i<bytes.length; ++i) {
System.out.print("b["+i+"]="+bytes[i]+" 0x"
+Integer.toHexString(bytes[i]));
char c = (char)bytes[i];
if (c < ' ')
System.out.println();
else
System.out.println(" '"+c+"'");
}
}
/**
* Like v.indexOf(el) != -1, but indexOf() uses
* equals(). Here we use ==.
*/
boolean referenceIsIn(MessageElement el, Vector v)
{
Enumeration e = v.elements();
while(e.hasMoreElements())
if (e.nextElement() == el)
return true;
return false;
}
MessageElement removeElement(Vector elements, String name)
{
for(int i=0; i<elements.size(); ++i) {
MessageElement el = (MessageElement)elements.get(i);
if (el.getName().equals(name)) {
elements.remove(i);
return el;
}
}
return null;
}
MessageWireFormat getXMLMessageFormat()
{
MimeMediaType type = new MimeMediaType("text/xml");
return MessageWireFormatFactory.newMessageWireFormat(type);
}
MessageWireFormat getBinaryMessageFormat()
{
MimeMediaType type = new MimeMediaType("application/x-jxta-msg");
return MessageWireFormatFactory.newMessageWireFormat(type);
}
public static void main (String args[]) {
new junit.textui.TestRunner().main(new String[] {"net.jxta.test.endpoint.MessageTest"});
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -