blob: 72fd54244b078893bd88955e51b17da6841ecc51 [file] [log] [blame]
// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package org.mozc.android.inputmethod.japanese.view;
import static org.easymock.EasyMock.anyInt;
import static org.easymock.EasyMock.eq;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.same;
import org.mozc.android.inputmethod.japanese.emoji.EmojiProviderType;
import org.mozc.android.inputmethod.japanese.emoji.EmojiUtil;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCandidates.CandidateList;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCandidates.CandidateWord;
import org.mozc.android.inputmethod.japanese.testing.InstrumentationTestCaseWithMock;
import org.mozc.android.inputmethod.japanese.view.CarrierEmojiRenderHelper.BackgroundTextView;
import com.google.common.base.Optional;
import android.os.Handler;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.TypedValue;
import android.view.View;
import org.easymock.IMockBuilder;
import java.util.Collections;
import java.util.Set;
/**
*/
public class CarrierEmojiRenderHelperTest extends InstrumentationTestCaseWithMock {
private static final int CODE_POINT_IMODE = 0xFEE10;
private static final int CODE_POINT_EZMARK = 0xFEE40;
private static final Set<EmojiProviderType> DOCOMO_PROVIDER_SET =
Collections.singleton(EmojiProviderType.DOCOMO);
private static String toString(int codePoint) {
return new String(new int[] {codePoint}, 0, 1);
}
private IMockBuilder<BackgroundTextView> createBackgroundTextViewMockBuilder() {
return createMockBuilder(BackgroundTextView.class)
.withConstructor(View.class)
.withArgs(createViewMock(View.class));
}
private BackgroundTextView createBackgroundTextViewMock() {
return createBackgroundTextViewMockBuilder().createMock();
}
private BackgroundTextView createBackgroundTextViewNiceMock() {
return createBackgroundTextViewMockBuilder().createNiceMock();
}
@SmallTest
public void testBackgroundTextView_isShown() {
View view = createViewMock(View.class);
BackgroundTextView backgroundTextView = new BackgroundTextView(view);
for (boolean isShown : new boolean[] {true, false}) {
resetAll();
expect(view.isShown()).andReturn(isShown);
replayAll();
assertEquals(isShown, backgroundTextView.isShown());
verifyAll();
}
}
@SmallTest
public void testBackgroundTextView_invalidate() {
View view = createViewMock(View.class);
BackgroundTextView backgroundTextView = new BackgroundTextView(view);
// By default invalidate should be proxy'ed.
resetAll();
view.invalidate();
replayAll();
backgroundTextView.invalidate();
verifyAll();
// Once lockInvalidate is invoked, invalidate shouldn't be proxy'ed.
resetAll();
replayAll();
backgroundTextView.lockInvalidate();
backgroundTextView.invalidate();
verifyAll();
// When unlockInvalidate is invoked, invalidate should be proxy'ed again.
resetAll();
view.invalidate();
replayAll();
backgroundTextView.unlockInvalidate();
backgroundTextView.invalidate();
verifyAll();
}
@SmallTest
public void testBackgroundTextView_postInvalidate() {
View view = createViewMock(View.class);
BackgroundTextView backgroundTextView = new BackgroundTextView(view);
resetAll();
view.postInvalidate();
replayAll();
backgroundTextView.postInvalidate();
verifyAll();
}
@SmallTest
public void testBackgroundTextView_postDelayed() {
View view = createViewMock(View.class);
BackgroundTextView backgroundTextView = new BackgroundTextView(view);
Runnable runnable = createNiceMock(Runnable.class);
resetAll();
expect(view.postDelayed(same(runnable), eq(100L))).andReturn(true);
replayAll();
assertTrue(backgroundTextView.postDelayed(runnable, 100L));
verifyAll();
}
@SmallTest
public void testBackgroundTextView_getHandler() {
View view = createViewMock(View.class);
BackgroundTextView backgroundTextView = new BackgroundTextView(view);
Handler handler = new Handler();
resetAll();
expect(view.getHandler()).andReturn(handler);
replayAll();
assertSame(handler, backgroundTextView.getHandler());
verifyAll();
}
@SmallTest
public void testIsSystemSupportedEmoji() {
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, createBackgroundTextViewNiceMock());
helper.setEmojiProviderType(EmojiProviderType.NONE);
assertFalse(helper.isSystemSupportedEmoji());
// Docomo is system supported.
helper.setEmojiProviderType(EmojiProviderType.DOCOMO);
assertTrue(helper.isSystemSupportedEmoji());
// Others are not.
helper.setEmojiProviderType(EmojiProviderType.SOFTBANK);
assertFalse(helper.isSystemSupportedEmoji());
helper.setEmojiProviderType(EmojiProviderType.KDDI);
assertFalse(helper.isSystemSupportedEmoji());
}
@SmallTest
public void testIsRenderableEmoji() {
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, createBackgroundTextViewNiceMock());
// For NONE provider type, any value won't be rendered.
helper.setEmojiProviderType(EmojiProviderType.NONE);
assertFalse(helper.isRenderableEmoji(toString(EmojiUtil.MIN_EMOJI_PUA_CODE_POINT)));
// For system supported emoji, it'll depends on the EmojiData contents.
helper.setEmojiProviderType(EmojiProviderType.DOCOMO);
assertTrue(helper.isRenderableEmoji(toString(CODE_POINT_IMODE)));
assertFalse(helper.isRenderableEmoji(toString(CODE_POINT_EZMARK)));
}
@SmallTest
public void testSetCandidateList_empty() {
BackgroundTextView backgroundTextView = createBackgroundTextViewMock();
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, backgroundTextView);
helper.setEmojiProviderType(EmojiProviderType.DOCOMO);
resetAll();
backgroundTextView.setText("");
replayAll();
helper.setCandidateList(Optional.<CandidateList>absent());
verifyAll();
resetAll();
backgroundTextView.setText("");
replayAll();
helper.setCandidateList(Optional.of(CandidateList.getDefaultInstance()));
verifyAll();
}
@SmallTest
public void testSetCandidateList() {
BackgroundTextView backgroundTextView = createBackgroundTextViewMock();
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, backgroundTextView);
helper.setEmojiProviderType(EmojiProviderType.DOCOMO);
resetAll();
backgroundTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 14);
backgroundTextView.setText(toString(CODE_POINT_IMODE) + "\n");
expect(backgroundTextView.getLayoutParams()).andReturn(null);
backgroundTextView.measureInternal(anyInt(), anyInt());
replayAll();
helper.setCandidateTextSize(14);
helper.setCandidateList(Optional.of(CandidateList.newBuilder()
.addCandidates(CandidateWord.newBuilder()
.setId(0)
.setValue("a"))
.addCandidates(CandidateWord.newBuilder()
.setId(1)
.setValue(toString(CODE_POINT_IMODE)))
.build()));
verifyAll();
}
@SmallTest
public void testSetCandidateList_nonSystemSupportedEmojiProviderType() {
BackgroundTextView backgroundTextView = createBackgroundTextViewMock();
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, backgroundTextView);
helper.setEmojiProviderType(EmojiProviderType.SOFTBANK);
resetAll();
replayAll();
helper.setCandidateTextSize(14);
helper.setCandidateList(Optional.of(CandidateList.newBuilder()
.addCandidates(CandidateWord.newBuilder()
.setId(0)
.setValue("a"))
.addCandidates(CandidateWord.newBuilder()
.setId(1)
.setValue("b"))
.build()));
verifyAll();
}
@SmallTest
public void testProxyMethod() {
BackgroundTextView backgroundTextView = createBackgroundTextViewMock();
CarrierEmojiRenderHelper helper = new CarrierEmojiRenderHelper(
DOCOMO_PROVIDER_SET, backgroundTextView);
resetAll();
backgroundTextView.onAttachedToWindow();
replayAll();
helper.onAttachedToWindow();
verifyAll();
resetAll();
backgroundTextView.onDetachedFromWindow();
replayAll();
helper.onDetachedFromWindow();
verifyAll();
}
}