/***************************************************************************
* Copyright 2006-2016 by Christian Ihle *
* contact@kouchat.net *
* *
* This file is part of KouChat. *
* *
* KouChat is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 3 of *
* the License, or (at your option) any later version. *
* *
* KouChat is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with KouChat. *
* If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
package net.usikkert.kouchat.android.smiley;
import static org.junit.Assert.*;
import java.util.Set;
import net.usikkert.kouchat.android.R;
import net.usikkert.kouchat.android.controller.MainChatController;
import net.usikkert.kouchat.junit.ExpectedException;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
/**
* Test of {@link SmileyMap}.
*
* @author Christian Ihle
*/
@RunWith(RobolectricTestRunner.class)
public class SmileyMapTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
private SmileyMap smileyMap;
@Before
public void setUp() {
smileyMap = new SmileyMap(new MainChatController());
}
@Test
public void constructorShouldThrowExceptionIfContextIsNull() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Context can not be null");
new SmileyMap(null);
}
@Test
public void getSmileyCodesShouldContainAllElevenSmileys() {
final Set<String> textSmileys = smileyMap.getSmileyCodes();
assertNotNull(textSmileys);
assertEquals(11, textSmileys.size());
assertTrue(textSmileys.contains(":)"));
assertTrue(textSmileys.contains(":("));
assertTrue(textSmileys.contains(":p"));
assertTrue(textSmileys.contains(":D"));
assertTrue(textSmileys.contains(";)"));
assertTrue(textSmileys.contains(":O"));
assertTrue(textSmileys.contains(":@"));
assertTrue(textSmileys.contains(":S"));
assertTrue(textSmileys.contains(";("));
assertTrue(textSmileys.contains(":$"));
assertTrue(textSmileys.contains("8)"));
}
@Test
public void getSmileyShouldThrowExceptionIfCodeIsNull() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Smiley code can not be empty");
smileyMap.getSmiley(null);
}
@Test
public void getSmileyShouldThrowExceptionIfCodeIsEmpty() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Smiley code can not be empty");
smileyMap.getSmiley(" ");
}
@Test
public void getSmileyShouldThrowExceptionIfCodeIsNotFound() {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("Smiley with code ':%' does not exist");
smileyMap.getSmiley(":%");
}
@Test
public void getSmileyShouldSupportAllElevenSmileys() {
assertEquals(R.drawable.ic_smiley_smile, smileyId(":)"));
assertEquals(R.drawable.ic_smiley_sad, smileyId(":("));
assertEquals(R.drawable.ic_smiley_tongue, smileyId(":p"));
assertEquals(R.drawable.ic_smiley_teeth, smileyId(":D"));
assertEquals(R.drawable.ic_smiley_wink, smileyId(";)"));
assertEquals(R.drawable.ic_smiley_omg, smileyId(":O"));
assertEquals(R.drawable.ic_smiley_angry, smileyId(":@"));
assertEquals(R.drawable.ic_smiley_confused, smileyId(":S"));
assertEquals(R.drawable.ic_smiley_cry, smileyId(";("));
assertEquals(R.drawable.ic_smiley_embarrassed, smileyId(":$"));
assertEquals(R.drawable.ic_smiley_shade, smileyId("8)"));
}
@Test
@Config(qualifiers = "xhdpi")
public void getSmileyShouldReturnDrawableWithCorrectBounds() {
final Drawable smiley = smileyMap.getSmiley(":)");
assertEquals(new Rect(0, 0, 40, 40), smiley.getBounds());
}
private int smileyId(final String code) {
return Robolectric.shadowOf(smileyMap.getSmiley(code)).getCreatedFromResId();
}
}