Back to Repositories

Testing Encoding Utility Functions in AndroidUtilCode

This test suite validates the EncodeUtils class functionality in AndroidUtilCode, covering URL encoding/decoding, Base64 operations, HTML encoding/decoding, and binary conversions. The tests ensure proper character encoding across different formats and character sets.

Test Coverage Overview

The test suite provides comprehensive coverage of encoding/decoding operations.

Key areas tested include:
  • URL encoding/decoding with UTF-8 support
  • Base64 encoding/decoding with string and byte array handling
  • HTML entity encoding/decoding
  • Binary string conversions
Edge cases include handling of Unicode characters and HTML markup.

Implementation Analysis

The testing approach employs JUnit 4 framework with systematic verification of encoding/decoding pairs.

Key patterns include:
  • Bidirectional testing (encode->decode verification)
  • Byte array and string conversion testing
  • Character set specification testing
  • Assert-based verification using assertEquals and assertArrayEquals

Technical Details

Testing infrastructure:
  • JUnit 4 test framework
  • BaseTest class extension for common utilities
  • UTF-8 character encoding support
  • Assertion methods for both string and byte array comparisons

Best Practices Demonstrated

The test suite exemplifies several testing best practices.

Notable aspects include:
  • Isolated test methods for distinct encoding operations
  • Clear test method naming conventions
  • Comprehensive assertion coverage
  • Proper test organization with focused test cases
  • Documentation of test purposes and expected behaviors

blankj/androidutilcode

lib/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java

            
package com.blankj.utilcode.util;

import org.junit.Test;

import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;

/**
 * <pre>
 *     author: Blankj
 *     blog  : http://blankj.com
 *     time  : 2016/08/12
 *     desc  : test EncodeUtils
 * </pre>
 */
public class EncodeUtilsTest extends BaseTest {

    @Test
    public void urlEncode_urlDecode() {
        String urlEncodeString = "%E5%93%88%E5%93%88%E5%93%88";
        assertEquals(urlEncodeString, EncodeUtils.urlEncode("哈哈哈"));
        assertEquals(urlEncodeString, EncodeUtils.urlEncode("哈哈哈", "UTF-8"));

        assertEquals("哈哈哈", EncodeUtils.urlDecode(urlEncodeString));
        assertEquals("哈哈哈", EncodeUtils.urlDecode(urlEncodeString, "UTF-8"));
    }

    @Test
    public void base64Decode_base64Encode() {
        assertArrayEquals("blankj".getBytes(), EncodeUtils.base64Decode(EncodeUtils.base64Encode("blankj")));
        assertArrayEquals("blankj".getBytes(), EncodeUtils.base64Decode(EncodeUtils.base64Encode2String("blankj".getBytes())));
        assertEquals(
                "Ymxhbmtq",
                EncodeUtils.base64Encode2String("blankj".getBytes())
        );
        assertArrayEquals("Ymxhbmtq".getBytes(), EncodeUtils.base64Encode("blankj".getBytes()));
    }

    @Test
    public void htmlEncode_htmlDecode() {
        String html = "<html>" +
                "<head>" +
                "<title>我的第一个 HTML 页面</title>" +
                "</head>" +
                "<body>" +
                "<p>body 元素的内容会显示在浏览器中。</p>" +
                "<p>title 元素的内容会显示在浏览器的标题栏中。</p>" +
                "</body>" +
                "</html>";
        String encodeHtml = "<html><head><title>我的第一个 HTML 页面</title></head><body><p>body 元素的内容会显示在浏览器中。</p><p>title 元素的内容会显示在浏览器的标题栏中。</p></body></html>";

        assertEquals(encodeHtml, EncodeUtils.htmlEncode(html));

        assertEquals(html, EncodeUtils.htmlDecode(encodeHtml).toString());
    }

    @Test
    public void binEncode_binDecode() {
        String test = "test";
        String binary = EncodeUtils.binaryEncode(test);
        assertEquals("test", EncodeUtils.binaryDecode(binary));
    }
}