tester.meta("m2");
// No actual parameters
//
ParameterMap result = tester.encode();
assertEquals(1, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
//
result = tester.meta("m1", "foo").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
//
result = tester.meta("m2", "foo").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
//
result = tester.meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
//
result = tester.meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
//
result = tester.meta("m3", "zuu").encode();
assertEquals(1, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
//
result = tester.meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
//
result = tester.meta("m1", "foo").meta("m2", "bar").meta("m2", "bar").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
// {m1} actual parameter
//
result = tester.actual("m1", "a").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
//
result = tester.actual("m1", "a").meta("m1", "foo").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
//
result = tester.actual("m1", "a").meta("m2", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
//
result = tester.actual("m1", "a").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
//
result = tester.actual("m1", "a").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
// {m2} actual parameter
//
result = tester.actual("m2", "b").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m1", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m2", "foo").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
//
result = tester.actual("m2", "b").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
// {m3} actual parameter
//
result = tester.actual("m3", "c").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m1", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m2", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m3", "zuu").encode();
assertEquals(2, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m3", "c").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
// {m1,m2} actual parameter
//
result = tester.actual("m1", "a").actual("m2", "b").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m1", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m2", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
//
result = tester.actual("m1", "a").actual("m2", "b").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
// {m1,m3} actual parameter
//
result = tester.actual("m1", "a").actual("m3", "c").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m1", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m2", "foo").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
// {m2,m3} actual parameter
//
result = tester.actual("m2", "b").actual("m3", "c").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m1", "foo").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m2", "foo").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(3, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
// {m1,m2,m3} actual parameter
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m1", "foo").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m2", "foo").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"0"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"10"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m2", "foo").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"1"}, result.getValues("action"));
assertEquals(new String[]{"a"}, result.getValues("m1"));
assertEquals(new String[]{"foo","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
//
result = tester.actual("m1", "a").actual("m2", "b").actual("m3", "c").meta("m1", "foo").meta("m2", "bar").meta("m3", "zuu").encode();
assertEquals(4, result.size());
assertEquals(new String[]{"11"}, result.getValues("action"));
assertEquals(new String[]{"foo","a"}, result.getValues("m1"));
assertEquals(new String[]{"bar","b"}, result.getValues("m2"));
assertEquals(new String[]{"c"}, result.getValues("m3"));
}