دوشنبه , ۱۰ اردیبهشت ۱۴۰۳

آموزش Robolectric-قسمت ششم: پیکربندی دستگاه(Device)

Robolectric Tool
Robolectric Tool

Robolectric شبیه‌سازی انواع مختلف پیکربندی Device را ساده می‌کند. به طور خاص، Propertyهایی که کلاس ‘android.content.res.Configuration’ را تشکیل می‌دهند می‌توانند همانطور که در اینجا توضیح داده شده است در متد تست، کلاس تست، بسته یا سطح Siute، مشخص شوند.

تنظیم پیکربندی دستگاه
پیکربندی دستگاه Android را می‌توان با استفاده از Property ویژه Config به نام ‘qualifiers’ مشخص کرد:

@Test @Config(qualifiers = "fr-rFR-w360dp-h640dp-xhdpi")
public void testItOnFrenchNexus5() { ... }

از نسخه ۳٫۶، Robolectric با توجه به قوانین مندرج در اینجا(اما بدون نام دایرکتوری قبلی)، Property(ویژگی) “Qualifiers” را Pars کرده و محیط شبیه‌سازی Android را با یک پیکربندی متناظر ستاپ می‌کند. Objectهای ‘Configuration’، ‘Display’ و ‘DisplayMetrics’ مربوط به سیستم: پیکربندی مشخص شده، Localeای که سِت خواهد شد، و منابع مناسبی که انتخاب خواهند شد را بازتاب خواهند کرد.

در رابطه با Propertyهای نامشخص، Robolectric بر اساس Propertyهای مشخص شده مقادیر سازگار را انتخاب نموده و یا مقادیر پیشفرض را طبق جدول ذیل استفاده خواهد کرد:

Propertyمقدار محاسبه شده(در صورت نامشخص بودن)پیشفرضدیگر قوانین
MCC and MNCNoneNone
Language, region, and script-localeNoneen-rUS
Layout direction

layout direction محلی

ldltr
Smallest width

کوچکتر از عرض و ارتفاع

sw320dp
Width

اگر اندازه صفحه نمایش مشخص شده باشد، عرض مربوطه همان چیزیست که اینجا اعلام شده است

w320dp

اگر جهت‌گیری صفحه نمایش مشخص شده باشد، عرض و ارتفاع به صورت مقتضی تبادل می‌شوند

Height

اگر اندازه صفحه نمایش مشخص شده باشد، ارتفاع مربوطه همان چیزیست که در اینجا اعلام شده است. اگر طول صفحه نمایش مشخص شده باشد، ارتفاع آن 25% افزایش می‌یابد

h470dp

اگر جهت‌گیری صفحه نمایش مشخص شده باشد، عرض و ارتفاع به صورت مقتضی تبادل می‌شود

Screen size

اگر ارتفاع و عرض مشخص شده باشند، اندازه صفحه نمایش مربوطه همان چیزیست که در اینجا اعلام شده است.

normal
Screen aspect

اگر عرض و ارتفاع مشخص شده باشد، در صورتیکه نسبت ارتفاع به عرض حداقل 1.75 باشد، استفاده می‌شود.

notlong
Round screen

اگر UI Mode برابر با watch است، به eound می‌رود

notround
Wide color gamutNonenowidecg
High dynamic rangeNonelowdr
Screen orientation

اگر عرض و ارتفاع مشخص شده باشد، در صورت تناسب port یا land می‌شود

port
UI modeNone

normal، به جز این property چیزی در Qualifier List وجود ندارد

Night modeNonenotnight
Screen pixel densityNonemdpi
Touchscreen typeNonefinger
Keyboard availabilityNonekeyssoft
Primary text input methodNonenokeys
Navigation key availabilityNonenavhidden
Primary non-touch navigation methodNonenonav
Platform version

سطح SDK در حال حاضر فعال است. لازم نیست مشخص شود

Qualifierهای تجمعی

به طور پیشفرض، مشخص کردن Qualifierها باعث می‌شود که هیچ یک از مشخصات Qualifierهای قبلی نادیده گرفته نشود. به عنوان مثال، Qualifierها در سطح متد تست به Qualifierهای در سطح کلاس تست بستگی دارند. با این حال، اگر ویژگی config، مربوط به Qualifierها با یک علامت ‘+’ (علامت پلاس) شروع شود، به عنوان یک پوشش برای هر یک از Qualifierهایی که مشخص شده‌اند، تفسیر می‌شود:

@Config(qualifiers = "xlarge-port")
class MyTest {
  public void testItWithXlargePort() { ... } // config is "xlarge-port"

  @Config(qualifiers = "+land")
  public void testItWithXlargeLand() { ... } // config is "xlarge-land"

  @Config(qualifiers = "land")
  public void testItWithLand() { ... } // config is "normal-land"
}

مقادیر Propertyهای نامشخص محاسبه می‌شوند، و بعد از اینکه تمام Configها ادغام شدند، قوانین اِعمال می‌گردند.

تغییر پیکربندی دستگاه
پیکربندی دستگاه را می‌توان در یک تست با استفاده از ‘()RuntimeEnvironment.setQualifiers’ تغییر داد:

@Test @Config(qualifiers = "+port")
public void testOrientationChange() {
  controller = Robolectric.buildActivity(MyActivity.class);
  controller.setup();
  // assert that activity is in portrait mode
  RuntimeEnvironment.setQualifiers("+land");
  controller.configurationChange();
  // assert that activity is in landscape mode
}

پارامتر string برای ‘()setQualifiers’ دارای قوانین مشابه ‘Config.qualifiers’ است.

توجه داشته باشید که ‘()RuntimeEnvironment.setQualifiers’، منابع سیستم و اپلیکیشن را با پیکربندی جدید به روز می‌کند، اما هیچگونه فعالیتی بر روی فعالیت‌های موجود یا سایر کامپوننت‌ها ایجاد نمی‌کند. ‘()ActivityController.configurationChange’ را می‌توان برای شبیه‌سازی دنباله‌ای از رویدادهایی که در یک دستگاه هنگام تغییر پیکربندی آن اتفاق می‌افتند استفاده نمود.

اگر فعالیت برای ادارۀ تغییرات پیکربندی، تنظیم شده باشد، ‘()ActivityController.configurationChange’ متد ‘()onConfigurationChanged’ متعلق به این Activity را فراخوانی می‌کند. در غیر اینصورت، ActivityController فعالیت مذبور را از بین برده و آنرا مجددا ایجاد می‌نماید.

شبیه‌سازی Displayها
Robolectric اجازه می‌دهد تا Propertyهای Display در خلال یک تست با استفاده از Setterهای روی ‘()ShadowDisplay’ تغییر کنند. برای سیستم عامل Jelly Bean MR1 و بالاتر، Displayهای چندگانه را می‌توان با استفاده از APIها در ‘ShadowDisplayManager’ شبیه‌سازی نمود. لطفا به منظور جزئیات بیشتر، اسناد خود را مشاهده کنید.

تمام قسمت‌های آموزش Robolectric، به صورت دسته‌بندی شده از اینجا نیز در دسترس است.

ابوالفضل خواجه دیزجی

همچنین ببینید

Selenium

آموزش Selenium-قسمت هفدهم: Mouse Click Event و Keyboard Event و موضوع Action Class در Selenium WebDriver

در این بخش، ما رویداد کیبورد(Keyboard Event) و ماوس(Mouse Event) را در Selenium Webdriver آموزش …

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *