import java.util.Arrays;
import com.ericsson.otp.erlang.OtpErlangAtom;
import com.ericsson.otp.erlang.OtpErlangDecodeException;
import com.ericsson.otp.erlang.OtpErlangList;
import com.ericsson.otp.erlang.OtpErlangLong;
import com.ericsson.otp.erlang.OtpErlangMap;
import com.ericsson.otp.erlang.OtpInputStream;
import com.ericsson.otp.erlang.OtpOutputStream;
/*
* %CopyrightBegin%
*
* Copyright Ericsson AB 2004-2010. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* %CopyrightEnd%
*/
class Maps {
/*
* Implements test case jinterface_SUITE:maps/1
*
* Test the class OtpErlangMap
*/
@SuppressWarnings("resource")
public static void main(final String argv[]) {
runTest(new byte[] { (byte) 131, 116, 0, 0, 0, 0 }, "#{}", 1);
runTest(new byte[] { (byte) 131, 116, 0, 0, 0, 1, 100, 0, 1, 97, 100,
0, 1, 98 }, "#{a => b}", 2);
// make sure keys are sorted here, jinterface doesn't reorder them
runTest(new byte[] { (byte) 131, 116, 0, 0, 0, 2, 97, 2, 106,
100, 0, 1, 97, 97, 1 }, "#{2 => [],a => 1}", 3);
runTest(new byte[] { (byte) 131, 116, 0, 0, 0, 1, 104, 1, 97, 3, 108,
0, 0, 0, 1, 100, 0, 1, 114, 106 }, "#{{3} => [r]}", 4);
try {
// #{2 => [],a => 1}
final OtpErlangMap map = new OtpErlangMap(new OtpInputStream(
new byte[] { (byte) 131, 116, 0, 0, 0, 2, 97, 2, 106,
100, 0, 1, 97, 97, 1 }));
if (map.arity() != 2) {
fail(5);
}
if (!new OtpErlangLong(1).equals(map.get(new OtpErlangAtom("a")))) {
fail(6);
}
if (!new OtpErlangList().equals(map.get(new OtpErlangLong(2)))) {
fail(7);
}
if (map.get(new OtpErlangLong(1)) != null) {
fail(8);
}
} catch (final OtpErlangDecodeException e) {
fail(99);
}
}
@SuppressWarnings("resource")
private static void runTest(final byte[] in, final String out, final int err) {
try {
final OtpInputStream is = new OtpInputStream(in);
final OtpErlangMap map = new OtpErlangMap(is);
final String output = map.toString();
if (!output.equals(out)) {
fail("toString mismatch " + output + " <> " + out, err);
}
final OtpOutputStream os = new OtpOutputStream(map);
final byte[] outArray0 = os.toByteArray();
final byte[] outArray = new byte[outArray0.length + 1];
System.arraycopy(outArray0, 0, outArray, 1, outArray0.length);
outArray[0] = (byte) 131;
if (!Arrays.equals(in, outArray)) {
fail("encode error " + Arrays.toString(outArray), err);
}
} catch (final OtpErlangDecodeException e) {
fail("decode error " + e.getMessage(), err);
} catch (final Exception e) {
fail("error " + e.getMessage(), err);
}
}
private static void fail(final int reason) {
System.exit(reason);
}
private static void fail(final String str, final int reason) {
System.out.println(str);
System.exit(reason);
}
}