public static <T> String valueToString(final String name, final T value) {
        if (value instanceof Tuple2) {
            final Tuple2<?, ?> tuple2 = (Tuple2<?, ?>) value;
            return LogUtil.message("{}1: '{}', {}2: '{}'",
                    name, tuple2._1, name.toLowerCase(), tuple2._2);
        } else if (value instanceof Tuple3) {
            final Tuple3<?, ?, ?> tuple3 = (Tuple3<?, ?, ?>) value;
            return LogUtil.message("{}1: '{}', {}2: '{}', {}3: '{}'",
                    name, tuple3._1, name.toLowerCase(), tuple3._2, name.toLowerCase(), tuple3._3);
        } else {
            return LogUtil.message("{}: '{}'", name, value);
        }
    }
Useful class for holding input and expected output values for a test case.

@param <I> The type of the test case input. If there are multiple inputs then
           {@code I} may be a {@link Tuple} of input values.
@param <O> The type of the test case expected output. If there are multiple outputs then
           {@code O} may be a {@link Tuple} of input values.
stroom-test-common/src/main/java/stroom/test/common/TestCase.java