chromium/mojo/public/java/system/javatests/src/org/chromium/mojo/bindings/BindingsHelperTest.java

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.mojo.bindings;

import androidx.test.filters.SmallTest;

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

import org.chromium.base.test.BaseJUnit4ClassRunner;
import org.chromium.base.test.util.Batch;

import java.nio.charset.Charset;

/** Testing {@link BindingsHelper}. */
@RunWith(BaseJUnit4ClassRunner.class)
@Batch(Batch.UNIT_TESTS)
public class BindingsHelperTest {
    /** Testing {@link BindingsHelper#utf8StringSizeInBytes(String)}. */
    @Test
    @SmallTest
    public void testUTF8StringLength() {
        String[] stringsToTest = {
            "", "a", "hello world", "éléphant", "𠜎𠜱𠝹𠱓𠱸𠲖𠳏𠳕", "你午饭想吃什么", "你午饭想吃什么\0éléphant",
        };
        for (String s : stringsToTest) {
            Assert.assertEquals(
                    s.getBytes(Charset.forName("utf8")).length,
                    BindingsHelper.utf8StringSizeInBytes(s));
        }
        Assert.assertEquals(1, BindingsHelper.utf8StringSizeInBytes("\0"));
        String s =
                new StringBuilder()
                        .appendCodePoint(0x0)
                        .appendCodePoint(0x80)
                        .appendCodePoint(0x800)
                        .appendCodePoint(0x10000)
                        .toString();
        Assert.assertEquals(10, BindingsHelper.utf8StringSizeInBytes(s));
        Assert.assertEquals(10, s.getBytes(Charset.forName("utf8")).length);
    }

    /** Testing {@link BindingsHelper#align(int)}. */
    @Test
    @SmallTest
    public void testAlign() {
        for (int i = 0; i < 3 * BindingsHelper.ALIGNMENT; ++i) {
            int j = BindingsHelper.align(i);
            Assert.assertTrue(j >= i);
            Assert.assertTrue(j % BindingsHelper.ALIGNMENT == 0);
            Assert.assertTrue(j - i < BindingsHelper.ALIGNMENT);
        }
    }
}