@Test
public void testIsTextWithUtf8() {

    byte[][] validUtf8Bytes = new byte[][]{
            "netty".getBytes(CharsetUtil.UTF_8),
            new byte[]{(byte) 0x24},
            new byte[]{(byte) 0xC2, (byte) 0xA2},
            new byte[]{(byte) 0xE2, (byte) 0x82, (byte) 0xAC},
            new byte[]{(byte) 0xF0, (byte) 0x90, (byte) 0x8D, (byte) 0x88},
            new byte[]{(byte) 0x24,
                    (byte) 0xC2, (byte) 0xA2,
                    (byte) 0xE2, (byte) 0x82, (byte) 0xAC,
                    (byte) 0xF0, (byte) 0x90, (byte) 0x8D, (byte) 0x88} // multiple characters
    };
    for (byte[] bytes : validUtf8Bytes) {
        assertIsText(bytes, true, CharsetUtil.UTF_8);
    }
    byte[][] invalidUtf8Bytes = new byte[][]{
            new byte[]{(byte) 0x80},
            new byte[]{(byte) 0xF0, (byte) 0x82, (byte) 0x82, (byte) 0xAC}, // Overlong encodings
            new byte[]{(byte) 0xC2},                                        // not enough bytes
            new byte[]{(byte) 0xE2, (byte) 0x82},                           // not enough bytes
            new byte[]{(byte) 0xF0, (byte) 0x90, (byte) 0x8D},              // not enough bytes
            new byte[]{(byte) 0xC2, (byte) 0xC0},                           // not correct bytes
            new byte[]{(byte) 0xE2, (byte) 0x82, (byte) 0xC0},              // not correct bytes
            new byte[]{(byte) 0xF0, (byte) 0x90, (byte) 0x8D, (byte) 0xC0}, // not correct bytes
            new byte[]{(byte) 0xC1, (byte) 0x80},                           // out of lower bound
            new byte[]{(byte) 0xE0, (byte) 0x80, (byte) 0x80},              // out of lower bound
            new byte[]{(byte) 0xED, (byte) 0xAF, (byte) 0x80}               // out of upper bound
    };
    for (byte[] bytes : invalidUtf8Bytes) {
        assertIsText(bytes, false, CharsetUtil.UTF_8);
    }
}