Testing TextView Text Color with Robolectric for Android

I am trying to TDD / check the text color of a textView for android. However all properties seem to return either 0 or zero, does anyone know why?

Code that creates a text view:

public void setupTextView() {

    LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
    TextView textView = new TextView(this);

    textView.setText(job.getName());

    if (job.getLastBuild().getBuildStatus().equals("SUCCESS")) {

        textView.setTextColor(Color.parseColor("#007000"));

    } else {

       textView.setTextColor(Color.parseColor("#FF0000"));

    }

    layout.addView(textView);

}

      

I ran the application and the above code works.

The properties I was trying to get in the test code:

@Test
public void firstTextViewShouldReflectPassingJobStatus() throws Exception {

    LinearLayout layout = layout = (LinearLayout) activity.findViewById(R.id.layout);

    TextView gomoTextView = (TextView) layout.getChildAt(0);

    System.out.println(gomoTextView.getCurrentTextColor()); //Returns 0
    System.out.println(gomoTextView.getTextColors()); //Returns null
    System.out.println(gomoTextView.getSolidColor()); //Returns 0
    System.out.println(gomoTextView.getCurrentHintTextColor()); //Returns 0

    //I also tried using `Robolectric.shadowOf()`:
    ShadowTextView shadowGomoTextView = Robolectric.shadowOf(gomoTextView);

    System.out.println(shadowGomoTextView.getTextColorHexValue()); //Returns 0
    System.out.println(shadowGomoTextView.getHintColorHexValue()); //Returns null

}

      

Update replies to comments

I have a unit test in a class that calls onCreate()

:

private LinearLayout layout;
private HomeActivity activity;

@Before
public void setUp() throws Exception {

    activity = spy(new HomeActivity());
    Jenkins mockJenkins = TestUtilities.getTestJenkins();
    when(activity.getJenkins()).thenReturn(mockJenkins);

    activity.onCreate(null);
    layout = (LinearLayout) activity.findViewById(R.id.layout);

}

      

And the onCreate method in the HomeActivity class:

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Jenkins jenkins = getJenkins();
    displayJenkins(jenkins);
}

      

And then the jenkins display calls a load of other methods which include setupTextView()

+3


source to share


1 answer


Looking at the sources , it hasn't been implemented yet. I suggest you implement your own shadow as described here .



Robolectric 2.0 has been pushed into alpha state . I think you should be fixed at release time as they are going to use as much of the real Android source as possible.

+1


source







All Articles