⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 messagetest.java

📁 jxme的一些相关程序,主要是手机上程序开发以及手机和计算机通信的一些程序资料,程序编译需要Ant支持
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        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 + -