/* * Copyright (C) 2003, C. Ramakrishnan / Illposed Software. * All rights reserved. * * This code is licensed under the BSD 3-Clause license. * See file LICENSE (or LICENSE.html) for more information. */ package com.illposed.osc; import java.math.BigInteger; import com.illposed.osc.utility.OSCByteArrayToJavaConverter; import com.illposed.osc.utility.OSCJavaToByteArrayConverter; /** * @author Chandrasekhar Ramakrishnan * @see OSCMessage */ public class OSCMessageTest extends junit.framework.TestCase { /** * @param result received from OSC * @param answer what should have been received */ public static void checkResultEqualsAnswer(byte[] result, byte[] answer) { if (result.length != answer.length) { fail( "Result and answer aren't the same length " + result.length + " vs " + answer.length); } for (int i = 0; i < result.length; i++) { if (result[i] != answer[i]) { String errorString = "Didn't convert correctly: " + i; errorString = errorString + " result: " + result[i]; errorString = errorString + " answer: " + answer[i]; fail(errorString); } } } public void testDecreaseVolume() { Object[] args = {new Integer(1), new Float(0.2)}; OSCMessage message = new OSCMessage("/sc/mixer/volume", args); byte[] answer = { 47, 115, 99, 47, 109, 105, 120, 101, 114, 47, 118, 111, 108, 117, 109, 101, 0, 0, 0, 0, 44, 105, 102, 0, 0, 0, 0, 1, 62, 76, -52, -51 }; byte[] result = message.getByteArray(); checkResultEqualsAnswer(result, answer); } /** * See the comment in * {@link OSCJavaToByteArrayConverterTest#testPrintFloat2OnStream}. */ public void testIncreaseVolume() { Object[] args = {new Integer(1), new Float(1.0)}; OSCMessage message = new OSCMessage("/sc/mixer/volume", args); byte[] answer = { 47, 115, 99, 47, 109, 105, 120, 101, 114, 47, 118, 111, 108, 117, 109, 101, 0, 0, 0, 0, 44, 105, 102, 0, 0, 0, 0, 1, 63, (byte) 128, 0, 0}; byte[] result = message.getByteArray(); checkResultEqualsAnswer(result, answer); } public void testPrintStringOnStream() { OSCJavaToByteArrayConverter stream = new OSCJavaToByteArrayConverter(); stream.write("/example1"); stream.write(100); byte[] answer = {47, 101, 120, 97, 109, 112, 108, 101, 49, 0, 0, 0, 0, 0, 0, 100}; byte[] result = stream.toByteArray(); checkResultEqualsAnswer(result, answer); } public void testRun() { OSCMessage message = new OSCMessage("/sc/run"); byte[] answer = {47, 115, 99, 47, 114, 117, 110, 0, 44, 0, 0, 0}; byte[] result = message.getByteArray(); checkResultEqualsAnswer(result, answer); } public void testStop() { OSCMessage message = new OSCMessage("/sc/stop"); byte[] answer = {47, 115, 99, 47, 115, 116, 111, 112, 0, 0, 0, 0, 44, 0, 0, 0}; byte[] result = message.getByteArray(); checkResultEqualsAnswer(result, answer); } public void testCreateSynth() { OSCMessage message = new OSCMessage("/s_new"); message.addArgument(new Integer(1001)); message.addArgument("freq"); message.addArgument(new Float(440.0)); byte[] answer = {0x2F, 0x73, 0x5F, 0x6E, 0x65, 0x77, 0, 0, 0x2C, 0x69, 0x73, 0x66, 0, 0, 0, 0, 0, 0, 0x3, (byte) 0xE9, 0x66, 0x72, 0x65, 0x71, 0, 0, 0, 0, 0x43, (byte) 0xDC, 0, 0}; byte[] result = message.getByteArray(); checkResultEqualsAnswer(result, answer); } public void testEncodeBigInteger() { OSCMessage message = new OSCMessage("/dummy"); BigInteger one001 = new BigInteger("1001"); message.addArgument(one001); byte[] byteArray = message.getByteArray(); OSCByteArrayToJavaConverter converter = new OSCByteArrayToJavaConverter(); OSCMessage packet = (OSCMessage) converter.convert(byteArray, byteArray.length); if (!packet.getAddress().equals("/dummy")) { fail("Send Big Integer did not receive the correct address"); } Object[] arguments = packet.getArguments(); if (arguments.length != 1) { fail("Send Big Integer should have 1 argument, not " + arguments.length); } if (!(arguments[0] instanceof BigInteger)) { fail("arguments[0] should be a BigInteger, not " + arguments[0]); } if (!(new BigInteger("1001").equals(arguments[0]))) { fail("Instead of BigInteger(1001), received " + arguments[0]); } } public void testEncodeArray() { OSCMessage message = new OSCMessage("/dummy"); Float[] floats = {new Float(10.0), new Float(100.0)}; message.addArgument(floats); byte[] byteArray = message.getByteArray(); OSCByteArrayToJavaConverter converter = new OSCByteArrayToJavaConverter(); OSCMessage packet = (OSCMessage) converter.convert(byteArray, byteArray.length); if (!packet.getAddress().equals("/dummy")) { fail("Send Array did not receive the correct address"); } Object[] arguments = packet.getArguments(); if (arguments.length != 1) { fail("Send Array should have 1 argument, not " + arguments.length); } if (!(arguments[0] instanceof Object[])) { fail("arguments[0] should be a Object array, not " + arguments[0]); } for (int i = 0; i < 2; ++i) { Object[] theArray = (Object[]) arguments[0]; if (!floats[i].equals(theArray[i])) { fail("Array element " + i + " should be " + floats[i] + " not " + theArray[i]); } } } }