package com.ctriposs.baiji.io; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.io.IOException; import java.util.Arrays; import java.util.Collection; @RunWith(Parameterized.class) public class BinaryCodecTestMap extends BinaryCodecTestBase { @Parameterized.Parameters public static Collection<Object[]> data() { return Arrays.asList(new Object[][]{new Object[]{1, new String[]{}}, new Object[]{6, new String[]{"a", "b"}}, new Object[]{9, new String[]{"a", "b", "c", ""}}}); } private final int _size; private final String[] _entries; public BinaryCodecTestMap(int size, String[] entries) { _size = size; _entries = entries; } @Test public void testMap() throws IOException { ItemDecoder decoder = new ItemDecoder() { @Override public Object decode(Decoder decoder) throws IOException { int length = (int) decoder.readArrayStart() * 2; String[] entries = new String[length]; if (length != 0) { for (int i = 0; i < length; i += 2) { entries[i] = decoder.readString(); entries[i + 1] = decoder.readString(); } Assert.assertEquals(0, decoder.readArrayNext()); } return entries; } }; ItemEncoder encoder = new ItemEncoder() { @Override public void encode(Encoder encoder, Object obj) throws IOException { String[] entries = (String[]) obj; encoder.writeArrayStart(); encoder.setItemCount(entries.length / 2); for (int i = 0; i < entries.length; i += 2) { encoder.startItem(); encoder.writeString(entries[i]); encoder.writeString(entries[i + 1]); } encoder.writeArrayEnd(); } }; testRead(_entries, decoder, encoder, _size); } }