package org.aplas.myshop; import android.os.Build; import androidx.lifecycle.Lifecycle; import androidx.test.core.app.ActivityScenario; import org.aplas.myshop.model.User; import org.junit.Before; import org.junit.FixMethodOrder; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.MethodSorters; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @RunWith(RobolectricTestRunner.class) @Config(manifest= Config.NONE) @FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestC2MyShop011 extends ViewTest { ActivityScenario scenario; private String packageName = "org.aplas"; private String targetDevice = "9"; private int minSDK = 21; private String actName = "LoginActivity"; private String layoutName = "activity_login"; private String backwardComp = "AppCompatActivity"; //private String packName; //ResourceTest rsc; @Before public void initTest() { scenario = ActivityScenario.launch(LoginActivity.class); scenario.moveToState(Lifecycle.State.CREATED); } @Test public void check_01_AppName() { //Check Project Name (Should be MyData) //ActivityScenario main = launchMainApp(); scenario.onActivity(activity -> { assertEquals("Application Name is Wrong", appName.toLowerCase(), getAppName(activity.getPackageName())); }); } @Test public void check_02_PackageName() { //Check Company Domain (Should be org.aplas.android) scenario.onActivity(activity -> { String packName = packageName+"."+appName.toLowerCase(); assertEquals("Package Name is Wrong", packName, activity.getPackageName()); }); } @Test public void check_03_TargetDevice() { //Check Target Device (Should be 6.0.1) scenario.onActivity(activity -> { assertEquals("Target Device is Wrong",targetDevice, Build.VERSION.RELEASE); }); } @Test public void check_04_MinimumSDK() { //Check Minimum SDK (Should be 28) scenario.onActivity(activity -> { assertEquals("Minimum SDK Version is Wrong",minSDK,activity.getApplicationInfo().minSdkVersion); }); } @Test public void check_05_ActivityName() { //Check Activity Name (Should be MyActivity) scenario.onActivity(activity -> { assertEquals("Activity Name is Wrong", actName, activity.getClass().getSimpleName()); }); } @Test public void check_06_LayoutName() { //Check Layout Name (Should be activity_layout) scenario.onActivity(activity -> { int resId = activity.getResources().getIdentifier(layoutName, "layout", activity.getPackageName()); assertNotEquals("Layout Name is Wrong", 0, resId); }); } @Test public void check_07_ActivityParent() { //Check Backward Compatibility (Should be AppCompatActivity) scenario.onActivity(activity -> { assertEquals("Activity Parent is Wrong", backwardComp, activity.getClass().getSuperclass().getSimpleName()); }); } @Test public void check_08_String_Resource() { //string check scenario.onActivity(activity -> { org.aplas.myshop.ResourceTest rsc = new org.aplas.myshop.ResourceTest(activity.getResources()); rsc.testStringResource("app_name","MyShop"); rsc.testStringResource("hint_name","Name"); rsc.testStringResource("hint_username","Username"); rsc.testStringResource("hint_password","Password"); rsc.testStringResource("hint_confirm_password","Confirm Password"); rsc.testStringResource("text_login","Login"); rsc.testStringResource("text_register","Register"); rsc.testStringResource("error_message_username","Enter Username"); rsc.testStringResource("error_message_password","Enter Password"); rsc.testStringResource("error_message_role","Select Your Role"); rsc.testStringResource("success_message","Registration Successful"); rsc.testStringResource("text_not_member","No account yet? Create one"); rsc.testStringResource("text_already_member","Already a member? Login"); rsc.testStringResource("error_username_exists","Username Already Exists"); rsc.testStringResource("error_password_match","Password Does Not Matches"); rsc.testStringResource("error_valid_email_password","Wrong Email or Password"); rsc.testStringResource("radio_seller","Seller"); rsc.testStringResource("radio_buyer","Buyer"); rsc.testStringResource("hint_product_name","Product Name"); rsc.testStringResource("hint_product_price","Product Price"); rsc.testStringResource("hint_product_buyer","Product Buyer"); rsc.testStringResource("hint_product_quantity","Quantity"); rsc.testStringResource("text_add_product","Add Product"); rsc.testStringResource("text_remove_product","Remove Product"); rsc.testStringResource("text_add_to_cart","Add To Cart"); rsc.testStringResource("text_back","Back"); rsc.testStringResource("error_message_product_name","Enter Product Name"); rsc.testStringResource("error_message_product_price","Enter Product Price"); rsc.testStringResource("product_success_message","Add Product Successful"); rsc.testStringResource("error_product_exists","Product Already Exists"); String[] data = {"---You Want to Be A?---", "Seller", "Buyer"}; rsc.testStringArrayResource("roles",data); }); } @Test public void check_09_Color_Resources() { scenario.onActivity(activity -> { org.aplas.myshop.ResourceTest rsc = new org.aplas.myshop.ResourceTest(activity.getResources()); rsc.testColorResource(activity, "black", "#000000"); rsc.testColorResource(activity, "white", "#FFFFFF"); rsc.testColorResource(activity, "colorPrimary", "#51d8c7"); rsc.testColorResource(activity, "colorPrimaryDark", "#51d8c7"); rsc.testColorResource(activity, "colorAccent", "#FFFFFF"); rsc.testColorResource(activity, "colorBackground", "#001a33"); rsc.testColorResource(activity, "colorText", "#FFFFFF"); rsc.testColorResource(activity, "colorTextHint", "#51d8c7"); }); } @Test public void check_10_Image_Resource(){ scenario.onActivity(activity -> { org.aplas.myshop.ResourceTest rsc = new org.aplas.myshop.ResourceTest(activity.getResources()); rsc.testImgResource("myshop"); }); } @Test public void check_11_ImageView(){ scenario.onActivity(activity -> { testViewExist("imgLogo","ImageView", activity); }); } @Test public void check_12_EditText(){ scenario.onActivity(activity -> { testViewExist("textInputEditTextUsername","EditText", activity); testViewExist("textInputEditTextPassword","EditText", activity); }); } @Test public void check_13_Button(){ scenario.onActivity(activity -> { testViewExist("appCompatButtonLogin","Button", activity); }); } @Test public void check_14_TextView(){ scenario.onActivity(activity -> { testViewExist("textViewLinkRegister","TextView", activity); }); } @Test public void check_15_User_Class_Properties() { String packname = "org.aplas.myshop.model"; String cname = "User"; try { Class c = Class.forName(packname+"."+cname); Constructor ctor = c.getConstructor(); Object obj = ctor.newInstance(); assertEquals("Class "+cname+" should be in 'model' directory", packname, obj.getClass().getPackage().getName()); } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException | InvocationTargetException e) { failTest("Class " + cname + " is not defined ("+ e.toString() +")"); } } private String getAppName(String packName) { String[] list = packName.split("\\."); String res = list[list.length-1]; return res; } }