Sunday 30 March 2014

Android action bar item test case using Robotium

Hello friends,
                  This is my small tutorial on Android test driven development using Robotium
Today, I am going to share the code which helps you in writing the testcase for
action bar menu item selection.

Here is the complete video  for your reference:

Here is my code:

1. MainActivityTest.java


/*
 * Copyright (C) 2014 Mukesh Y authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.example.actionbar;

import android.R.integer;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.widget.TextView;

import com.actionbarsherlock.app.ActionBar;
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.MenuItem.OnMenuItemClickListener;
import com.actionbarsherlock.view.SubMenu;

/**
 * @author Mukesh Y
 */
public class MainActivity extends SherlockActivity implements
  OnMenuItemClickListener {

 private SubMenu mSortItem;
 private MenuItem mMapItem;
 private int MAP_ID = 101;
 private int SORT_ID = 102;

 CharSequence selected = "Light";
 TextView mTextView;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
  setContentView(R.layout.activity_main);

  mTextView = (TextView)findViewById(R.id.theme);
  ActionBar ab = getSupportActionBar();
  ab.setBackgroundDrawable(getApplicationContext().getResources()
    .getDrawable(R.drawable.bg_titlebar_tile));
  ab.setDisplayShowTitleEnabled(true);
  mTextView.setText(selected);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {

  mSortItem = menu.addSubMenu(0,SORT_ID,0,selected);
  mSortItem.setIcon(R.drawable.ic_menu_sort);
  
  mSortItem.getItem().setShowAsAction(
    MenuItem.SHOW_AS_ACTION_IF_ROOM
      | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
  mMapItem = menu.add(0, MAP_ID, 0, "map");
  mMapItem.setIcon(R.drawable.google_maps_icon_pressed)
    .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);

  getMenuState("Light");
  return true;
 }

 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  
  if (item.getItemId()==mMapItem.getItemId()) {
   Intent mapIntent = new Intent(this, Map.class);
   startActivity(mapIntent);
  } else {

  }
  return true;
 }

 @Override
 public boolean onMenuItemClick(MenuItem item) {
  mSortItem.clear();
  getMenuState(item.getTitle());
  return false;
 }

 public void getMenuState(CharSequence selected) {
  mTextView.setText(selected);
  if (selected.equals("Default")) {
   mSortItem.add(0, R.style.Theme_Sherlock, 0, "Default")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   
   setTheme(R.style.Theme_Sherlock);
  } else if (selected.equals("Light")) {
   mSortItem.add(0, R.style.Theme_Sherlock, 0, "Default")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   setTheme(R.style.Theme_Sherlock_Light);
  } else {
   mSortItem.add("Default")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light, 0, "Light")
     .setIcon(android.R.drawable.checkbox_off_background)
     .setOnMenuItemClickListener(this);
   mSortItem.add(0, R.style.Theme_Sherlock_Light_DarkActionBar, 0, "Light (Dark Action Bar)")
     .setIcon(android.R.drawable.checkbox_on_background)
     .setOnMenuItemClickListener(this);
   setTheme(R.style.Theme_Sherlock_Light_DarkActionBar);
  }

 }
}


2. AllTests.java
/*
 * Copyright (C) 2014 Mukesh Y authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.robotium.actionbartest;

import junit.framework.TestSuite;
import android.app.Activity;
import android.test.ActivityInstrumentationTestCase2;

/**
 * @author Mukesh Y
 */
public class AllTests extends  ActivityInstrumentationTestCase2 {
 
 

 public AllTests(Class activityClass) {
  super(activityClass);
 }

 public static TestSuite suite() {
  TestSuite t = new TestSuite();
  t.addTestSuite(MainActivityTest.class);
  t.addTestSuite(MapActivityTest.class);
  
  return t; 
 }
 
 @Override
 public void setUp() throws Exception {
  
 }
 
 
 @Override
 public void tearDown() throws Exception {
 }

}


Download Code From Here
Enjoy Coding...  :)

Mukesh Kumar

Hi Guys I am from Delhi working as Web/Mobile Application Developer(Android Developer), also have knowledge of Roboelctric and Mockito ,android test driven development... Blogging has been my passion and I think blogging is one of the powerful medium to share knowledge and ideas....

1 comments:

  1. hi frnds that was nice post ,thanks for sharing,now you can get all solutions in just one click ,here we have all type of solutions for all type of problems .
    click on app creator to solve your problem

    ReplyDelete

 

Copyright @ 2013 Android Developers Blog.