package com.facebook.stetho.inspector.elements.android;
import android.app.Activity;
import android.os.Build;
import android.widget.CheckBox;
import android.widget.TextView;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.Robolectric;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
@Config(emulateSdk = Build.VERSION_CODES.JELLY_BEAN)
@RunWith(RobolectricTestRunner.class)
public class ViewDescriptorTest {
private final MethodInvoker mMethodInvoker = mock(MethodInvoker.class);
private final ViewDescriptor mDescriptor = new ViewDescriptor(mMethodInvoker);
private final Activity mActivity = Robolectric.setupActivity(Activity.class);
private final TextView mTextView = new TextView(mActivity);
private final CheckBox mCheckBox = new CheckBox(mActivity);
@Test
public void testSetAttributeAsTextWithSetText() {
mDescriptor.setAttributesAsText(mTextView, "text=\"Hello World\"");
verify(mMethodInvoker).invoke(mTextView, "setText", "Hello World");
}
@Test
public void testSetAttributeAsTextWithSetId() {
mDescriptor.setAttributesAsText(mTextView, "id=\"2\"");
verify(mMethodInvoker).invoke(mTextView, "setId", "2");
}
@Test
public void testSetAttributeAsTextWithSetChecked() {
mDescriptor.setAttributesAsText(mCheckBox, "checked=\"true\"");
verify(mMethodInvoker).invoke(mCheckBox, "setChecked", "true");
}
@Test
public void testSetMultipleAttributesAsText() {
mDescriptor.setAttributesAsText(mTextView, "id=\"2\" text=\"Hello World\"");
verify(mMethodInvoker).invoke(mTextView, "setId", "2");
verify(mMethodInvoker).invoke(mTextView, "setText", "Hello World");
}
@Test
public void testSetAttributeAsTextIgnoreInvalidFormat() {
mDescriptor.setAttributesAsText(mTextView, "garbage");
verify(mMethodInvoker, never()).invoke(anyObject(), anyString(), anyString());
}
}