framework_gem 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/EXECUTION_ENGINE.md +282 -0
- data/lib/Gemfile +12 -0
- data/lib/README.md +138 -0
- data/lib/User_Lib/helpers/helpers.rb +13 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_text_rois.rb +48 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_1080/apple_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_720/apple_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_black_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_color_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_image_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_text_rois.rb +7 -0
- data/lib/User_Lib/rois/apple_tv/apple_tv_video_rois.rb +7 -0
- data/lib/User_Lib/rois/black_rois.rb +33 -0
- data/lib/User_Lib/rois/color_rois.rb +38 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_1080/dta_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_720/dta_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/dta/dta_black_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_color_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_image_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_rois.rb +26 -0
- data/lib/User_Lib/rois/dta/dta_text_rois.rb +9 -0
- data/lib/User_Lib/rois/dta/dta_video_rois.rb +9 -0
- data/lib/User_Lib/rois/image_rois.rb +38 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_1080/mdn_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_720/mdn_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mdn/mdn_black_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_color_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_image_rois.rb +9 -0
- data/lib/User_Lib/rois/mdn/mdn_rois.rb +26 -0
- data/lib/User_Lib/rois/mdn/mdn_text_rois.rb +13 -0
- data/lib/User_Lib/rois/mdn/mdn_video_rois.rb +9 -0
- data/lib/User_Lib/rois/mobile/android/android_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_image_rois.rb +43 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_phone/android_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_image_rois.rb +54 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_tablet/android_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/android/android_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_phone/ios_phone_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_color_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_image_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_tablet/ios_tablet_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/ios/ios_video_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_black_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_color_rois.rb +12 -0
- data/lib/User_Lib/rois/mobile/mobile_image_rois.rb +38 -0
- data/lib/User_Lib/rois/mobile/mobile_rois.rb +22 -0
- data/lib/User_Lib/rois/mobile/mobile_text_rois.rb +8 -0
- data/lib/User_Lib/rois/mobile/mobile_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_1080/passport_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_720/passport_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_black_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_color_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_image_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_rois.rb +23 -0
- data/lib/User_Lib/rois/passport/passport_text_rois.rb +7 -0
- data/lib/User_Lib/rois/passport/passport_video_rois.rb +7 -0
- data/lib/User_Lib/rois/rois.rb +22 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_black_rois.rb +37 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_color_rois.rb +336 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_image_rois.rb +235 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_text_rois.rb +1523 -0
- data/lib/User_Lib/rois/roku/roku_720/roku_720_video_rois.rb +32 -0
- data/lib/User_Lib/rois/roku/roku_black_rois.rb +14 -0
- data/lib/User_Lib/rois/roku/roku_color_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_image_rois.rb +13 -0
- data/lib/User_Lib/rois/roku/roku_rois.rb +23 -0
- data/lib/User_Lib/rois/roku/roku_text_rois.rb +9 -0
- data/lib/User_Lib/rois/roku/roku_video_rois.rb +9 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_color_rois.rb +11 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_1080/roku_tv_1080_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_720/roku_tv_720_video_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_black_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_color_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_image_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/roku_tv/roku_tv_video_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_black_rois.rb +13 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_color_rois.rb +29 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_text_rois.rb +92 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_1080/samsung_tv_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_720/samsung_tv_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_black_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_color_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_image_rois.rb +9 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_rois.rb +23 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_text_rois.rb +12 -0
- data/lib/User_Lib/rois/samsung_tv/samsung_tv_video_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_1080/sara_1080_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_black_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_color_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_image_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_text_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_720/sara_720_video_rois.rb +8 -0
- data/lib/User_Lib/rois/sara/sara_black_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_color_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_image_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_rois.rb +26 -0
- data/lib/User_Lib/rois/sara/sara_text_rois.rb +9 -0
- data/lib/User_Lib/rois/sara/sara_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_image_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_text_rois.rb +47 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_1080/iguide_1080_video_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_text_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_720/iguide_720_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/iguide/iguide_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_image_rois.rb +12 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_text_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_1080/odn_1080_video_rois.rb +11 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_black_rois.rb +46 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_color_rois.rb +142 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_image_rois.rb +103 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_moto/odn_720_moto_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_color_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_image_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_sa/odn_720_sa_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_black_rois.rb +6 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_color_rois.rb +77 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_image_rois.rb +67 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_text_rois.rb +159 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_samsung/odn_720_samsung_video_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_text_rois.rb +221 -0
- data/lib/User_Lib/rois/stb/odn/odn_720/odn_720_video_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/odn/odn_black_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_color_rois.rb +10 -0
- data/lib/User_Lib/rois/stb/odn/odn_image_rois.rb +58 -0
- data/lib/User_Lib/rois/stb/odn/odn_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/odn/odn_text_rois.rb +70 -0
- data/lib/User_Lib/rois/stb/odn/odn_video_rois.rb +19 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_black_rois.rb +16 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_color_rois.rb +373 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_image_rois.rb +1592 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_color_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_image_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_text_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace_video_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_text_rois.rb +2489 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_1080/spectrum_1080_video_rois.rb +64 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_color_rois.rb +63 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_black_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_color_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_image_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_rois.rb +26 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_text_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch_video_rois.rb +8 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_image_rois.rb +117 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_text_rois.rb +84 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_720/spectrum_720_video_rois.rb +35 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_color_rois.rb +17 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_image_rois.rb +49 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_text_rois.rb +51 -0
- data/lib/User_Lib/rois/stb/spectrum/spectrum_video_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_black_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_color_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_image_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_rois.rb +23 -0
- data/lib/User_Lib/rois/stb/stb_text_rois.rb +9 -0
- data/lib/User_Lib/rois/stb/stb_video_rois.rb +9 -0
- data/lib/User_Lib/rois/template.txt +23 -0
- data/lib/User_Lib/rois/text_rois.rb +36 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_color_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_text_rois.rb +9 -0
- data/lib/User_Lib/rois/tivo/tivo_1080/tivo_1080_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_720/tivo_720_video_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_black_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_color_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_image_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_rois.rb +23 -0
- data/lib/User_Lib/rois/tivo/tivo_text_rois.rb +7 -0
- data/lib/User_Lib/rois/tivo/tivo_video_rois.rb +7 -0
- data/lib/User_Lib/rois/video_rois.rb +33 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_dvr.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_library.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_live_tv.rb +17 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_login.rb +24 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_main_menu.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_movies.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_on_demand.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_product_page.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_screen.rb +23 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_search.rb +31 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_settings.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/apple_tv/apple_tv_video_store.rb +25 -0
- data/lib/User_Lib/screen/dta/dta_dvr.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_library.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_live_tv.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_log_in.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_main_menu.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_movies.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_on_demand.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_product_page.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_screen.rb +24 -0
- data/lib/User_Lib/screen/dta/dta_search.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_settings.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/dta/dta_video_store.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_dvr.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_library.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_live_tv.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_log_in.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_main_menu.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_movies.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_on_demand.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_product_page.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_screen.rb +24 -0
- data/lib/User_Lib/screen/mdn/mdn_search.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_settings.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/mdn/mdn_video_store.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_devices.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_dvr.rb +337 -0
- data/lib/User_Lib/screen/mobile/android/android_favorites.rb +164 -0
- data/lib/User_Lib/screen/mobile/android/android_guide.rb +256 -0
- data/lib/User_Lib/screen/mobile/android/android_live_tv.rb +372 -0
- data/lib/User_Lib/screen/mobile/android/android_login.rb +111 -0
- data/lib/User_Lib/screen/mobile/android/android_main_menu.rb +53 -0
- data/lib/User_Lib/screen/mobile/android/android_on_demand.rb +402 -0
- data/lib/User_Lib/screen/mobile/android/android_parental_controls.rb +73 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_dvr.rb +31 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_guide.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_live_tv.rb +104 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_main_menu.rb +27 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_on_demand.rb +35 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_product_page.rb +7 -0
- data/lib/User_Lib/screen/mobile/android/android_phone/android_phone_search.rb +26 -0
- data/lib/User_Lib/screen/mobile/android/android_privacy_legal.rb +54 -0
- data/lib/User_Lib/screen/mobile/android/android_product_page.rb +484 -0
- data/lib/User_Lib/screen/mobile/android/android_screen.rb +56 -0
- data/lib/User_Lib/screen/mobile/android/android_search.rb +39 -0
- data/lib/User_Lib/screen/mobile/android/android_settings.rb +90 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_dvr.rb +58 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_guide.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_live_tv.rb +24 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_main_menu.rb +19 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_on_demand.rb +16 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_product_page.rb +45 -0
- data/lib/User_Lib/screen/mobile/android/android_tablet/android_tablet_search.rb +14 -0
- data/lib/User_Lib/screen/mobile/devices_mobile.rb +53 -0
- data/lib/User_Lib/screen/mobile/dvr_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/favorites_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/guide_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/ios/ios_devices.rb +43 -0
- data/lib/User_Lib/screen/mobile/ios/ios_dvr.rb +231 -0
- data/lib/User_Lib/screen/mobile/ios/ios_favorites.rb +79 -0
- data/lib/User_Lib/screen/mobile/ios/ios_guide.rb +53 -0
- data/lib/User_Lib/screen/mobile/ios/ios_live_tv.rb +413 -0
- data/lib/User_Lib/screen/mobile/ios/ios_login.rb +76 -0
- data/lib/User_Lib/screen/mobile/ios/ios_main_menu.rb +38 -0
- data/lib/User_Lib/screen/mobile/ios/ios_on_demand.rb +371 -0
- data/lib/User_Lib/screen/mobile/ios/ios_parental_controls.rb +104 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_dvr.rb +14 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_live_tv.rb +36 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_phone/ios_phone_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/ios/ios_privacy_legal.rb +56 -0
- data/lib/User_Lib/screen/mobile/ios/ios_product_page.rb +441 -0
- data/lib/User_Lib/screen/mobile/ios/ios_screen.rb +60 -0
- data/lib/User_Lib/screen/mobile/ios/ios_search.rb +145 -0
- data/lib/User_Lib/screen/mobile/ios/ios_settings.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_live_tv.rb +34 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_main_menu.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_on_demand.rb +7 -0
- data/lib/User_Lib/screen/mobile/ios/ios_tablet/ios_tablet_search.rb +13 -0
- data/lib/User_Lib/screen/mobile/live_tv_mobile.rb +73 -0
- data/lib/User_Lib/screen/mobile/login_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/main_menu_mobile.rb +83 -0
- data/lib/User_Lib/screen/mobile/mobile_screen.rb +232 -0
- data/lib/User_Lib/screen/mobile/on_demand_mobile.rb +70 -0
- data/lib/User_Lib/screen/mobile/parental_controls_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/privacy_legal_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/product_page_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/search_mobile.rb +5 -0
- data/lib/User_Lib/screen/mobile/settings_mobile.rb +33 -0
- data/lib/User_Lib/screen/passport/passport_dvr.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_guide.rb +37 -0
- data/lib/User_Lib/screen/passport/passport_library.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_live_tv.rb +17 -0
- data/lib/User_Lib/screen/passport/passport_main_menu.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_movies.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_on_demand.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_product_page.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_screen.rb +23 -0
- data/lib/User_Lib/screen/passport/passport_search.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_settings.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/passport/passport_video_store.rb +25 -0
- data/lib/User_Lib/screen/roku/brs/roku_guide_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_home_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_live_tv_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_login_brs.rb +103 -0
- data/lib/User_Lib/screen/roku/brs/roku_main_menu_brs.rb +46 -0
- data/lib/User_Lib/screen/roku/brs/roku_on_demand_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_product_page_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_screen_brs.rb +9 -0
- data/lib/User_Lib/screen/roku/brs/roku_search_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_settings_brs.rb +42 -0
- data/lib/User_Lib/screen/roku/brs/roku_watch_later_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/brs/roku_welcome_brs.rb +12 -0
- data/lib/User_Lib/screen/roku/roku_dvr.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_guide.rb +590 -0
- data/lib/User_Lib/screen/roku/roku_home.rb +346 -0
- data/lib/User_Lib/screen/roku/roku_library.rb +26 -0
- data/lib/User_Lib/screen/roku/roku_live_tv.rb +210 -0
- data/lib/User_Lib/screen/roku/roku_login.rb +795 -0
- data/lib/User_Lib/screen/roku/roku_main_menu.rb +425 -0
- data/lib/User_Lib/screen/roku/roku_mini_guide.rb +7 -0
- data/lib/User_Lib/screen/roku/roku_on_demand.rb +479 -0
- data/lib/User_Lib/screen/roku/roku_product_page.rb +483 -0
- data/lib/User_Lib/screen/roku/roku_screen.rb +85 -0
- data/lib/User_Lib/screen/roku/roku_search.rb +229 -0
- data/lib/User_Lib/screen/roku/roku_settings.rb +304 -0
- data/lib/User_Lib/screen/roku/roku_watch_later.rb +51 -0
- data/lib/User_Lib/screen/roku/roku_welcome.rb +10 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_dvr.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_home.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_library.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_live_tv.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_login.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_main_menu.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_mini_guide.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_on_demand.rb +26 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_product_page.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_screen.rb +7 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_search.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_settings.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_watch_later.rb +14 -0
- data/lib/User_Lib/screen/roku_tv/roku_tv_welcome.rb +14 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_dvr.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_library.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_live_tv.rb +21 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_login.rb +13 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_main_menu.rb +64 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_mini_guide.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_movies.rb +140 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_on_demand.rb +76 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_parental_controls.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_product_page.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_screen.rb +74 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_search.rb +29 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_settings.rb +189 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_tv_shows.rb +24 -0
- data/lib/User_Lib/screen/samsung_tv/samsung_tv_video_store.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_dvr.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_guide.rb +43 -0
- data/lib/User_Lib/screen/sara/sara_library.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_live_tv.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_log_in.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_main_menu.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_mini_guide.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_movies.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_on_demand.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_parental_controls.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_product_page.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_screen.rb +24 -0
- data/lib/User_Lib/screen/sara/sara_search.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_settings.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_tv_shows.rb +26 -0
- data/lib/User_Lib/screen/sara/sara_video_store.rb +26 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_devices.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_dvr.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_favorites.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_guide.rb +39 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_home.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_library.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_live_tv.rb +59 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_login.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_mini_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_movies.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_on_demand.rb +531 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_parental_controls.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_privacy_legal.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_product_page.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_quick_menu.rb +7 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_screen.rb +21 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_search.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_tv_shows.rb +10 -0
- data/lib/User_Lib/screen/stb/iguide/iguide_video_store.rb +10 -0
- data/lib/User_Lib/screen/stb/login_stb.rb +5 -0
- data/lib/User_Lib/screen/stb/odn/odn_dvr.rb +59 -0
- data/lib/User_Lib/screen/stb/odn/odn_favorites.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_guide.rb +177 -0
- data/lib/User_Lib/screen/stb/odn/odn_live_tv.rb +115 -0
- data/lib/User_Lib/screen/stb/odn/odn_login.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_main_menu.rb +175 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand.rb +1170 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_kids.rb +23 -0
- data/lib/User_Lib/screen/stb/odn/odn_on_demand_left_menu.rb +180 -0
- data/lib/User_Lib/screen/stb/odn/odn_parental_controls.rb +9 -0
- data/lib/User_Lib/screen/stb/odn/odn_product_page.rb +8 -0
- data/lib/User_Lib/screen/stb/odn/odn_screen.rb +111 -0
- data/lib/User_Lib/screen/stb/odn/odn_search.rb +167 -0
- data/lib/User_Lib/screen/stb/odn/odn_settings.rb +142 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_diagnostics.rb +27 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/screen_spectrum_docsis.rb +12 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_guide.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_main_menu.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_settings.rb +10 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_dvr.rb +1781 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_guide.rb +841 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_library.rb +384 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_live_tv.rb +259 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_main_menu.rb +223 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_mini_guide.rb +404 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_movies.rb +420 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_netflix.rb +37 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_on_demand.rb +2137 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_parental_controls.rb +528 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_pay_per_view.rb +26 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_product_page.rb +58 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_screen.rb +48 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_search.rb +92 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_settings.rb +1657 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_tv_shows.rb +1532 -0
- data/lib/User_Lib/screen/stb/spectrum/spectrum_video_store.rb +1598 -0
- data/lib/User_Lib/screen/stb/stb_screen.rb +7 -0
- data/lib/User_Lib/screen/tivo/tivo_dvr.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_library.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_live_tv.rb +17 -0
- data/lib/User_Lib/screen/tivo/tivo_login.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_main_menu.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_mini_guide.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_movies.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_on_demand.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_parental_controls.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_product_page.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_screen.rb +20 -0
- data/lib/User_Lib/screen/tivo/tivo_search.rb +31 -0
- data/lib/User_Lib/screen/tivo/tivo_settings.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_tv_shows.rb +25 -0
- data/lib/User_Lib/screen/tivo/tivo_video_store.rb +25 -0
- data/lib/config/ConfigParams.xml +96 -0
- data/lib/config/ImageROI.xml +45 -0
- data/lib/config/ROI.xml +150 -0
- data/lib/config/Userlog4j.xml +62 -0
- data/lib/config/schema-docs/mode.xsd +12 -0
- data/lib/config/schema-docs/processTestJobs.xsd +63 -0
- data/lib/config/schema-docs/rackip.xsd +24 -0
- data/lib/copy_ref_images.rb +199 -0
- data/lib/copy_repo.rb +136 -0
- data/lib/diagnostics/conductor/conductor_checkup.tmc +24 -0
- data/lib/diagnostics/db/mad_db_check.tmc +56 -0
- data/lib/diagnostics/db/mas_db_checkup.tmc +24 -0
- data/lib/diagnostics/db/mas_db_checkup_gem.tmc +20 -0
- data/lib/diagnostics/db/mas_db_checkup_jar.tmc +50 -0
- data/lib/diagnostics/iguide/iguide_nvram_reset.tmc +23 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb.tmc +33 -0
- data/lib/diagnostics/iguide/iguide_prepare_stb_and_health_check.tmc +63 -0
- data/lib/diagnostics/iguide/iguide_stb_health_check.tmc +54 -0
- data/lib/diagnostics/prepare_stb.tmc +30 -0
- data/lib/diagnostics/prepare_stb_and_health_check.tmc +56 -0
- data/lib/diagnostics/script_options/options_checkup.tmc +145 -0
- data/lib/diagnostics/server_components_check.tmc +62 -0
- data/lib/diagnostics/ssh/dncs_checkup.tmc +24 -0
- data/lib/diagnostics/ssh/mas_checkup.tmc +24 -0
- data/lib/diagnostics/stb_health_check.tmc +46 -0
- data/lib/diagnostics/stb_ip_check.tmc +120 -0
- data/lib/diagnostics/webservices/mas_rest_services_checkup.tmc +24 -0
- data/lib/diagnostics/webservices/mas_soap_services_checkup.tmc +24 -0
- data/lib/dsllib/common/dncs/dncs_utils.rb +449 -0
- data/lib/dsllib/common/mas_db/mas_conductor.rb +1328 -0
- data/lib/dsllib/common/mas_db/mas_db.rb +154 -0
- data/lib/dsllib/common/mas_db/mas_publish.rb +2349 -0
- data/lib/dsllib/common/mas_db/mas_rest_services.rb +75 -0
- data/lib/dsllib/common/mas_db/mas_soap_services.rb +540 -0
- data/lib/dsllib/common/mas_db/mas_utils.rb +422 -0
- data/lib/dsllib/common/remote_diagnostics/mdn_remote_diagnostics.rb +1335 -0
- data/lib/dsllib/common/remote_diagnostics/odn_web_server.rb +269 -0
- data/lib/dsllib/common/utils/excel_export.rb +273 -0
- data/lib/dsllib/common/utils/excel_module.rb +890 -0
- data/lib/dsllib/common/utils/server_components_utils.rb +130 -0
- data/lib/dsllib/common/utils/stb_health_check_utils.rb +92 -0
- data/lib/dsllib/common/utils/sword_utils.rb +393 -0
- data/lib/dsllib/common/utils/tmc_utils.rb +2944 -0
- data/lib/dsllib/common/utils/virtual_keyboard_navigator.rb +208 -0
- data/lib/dsllib/common/utils/virtual_keyboard_vp_navigator.rb +195 -0
- data/lib/dsllib/performance/DTA/roi.rb +214 -0
- data/lib/dsllib/performance/DTA/utils.rb +96 -0
- data/lib/dsllib/performance/iguide_concurrent_test/ROI.rb +236 -0
- data/lib/dsllib/performance/iguide_concurrent_test/utils.rb +533 -0
- data/lib/dsllib/performance/measure_tune.rb +438 -0
- data/lib/dsllib/performance/perf_lib.rb +660 -0
- data/lib/end_iteration.rb +4 -0
- data/lib/lib/data_services/channel.rb +39 -0
- data/lib/lib/data_services/data_services.rb +14 -0
- data/lib/lib/data_services/guide.rb +104 -0
- data/lib/lib/data_services/lineup.rb +114 -0
- data/lib/lib/data_services/program.rb +48 -0
- data/lib/lib/data_services/schedule.rb +18 -0
- data/lib/lib/data_services/splunk_connector.rb +135 -0
- data/lib/lib/data_services/splunk_data_reader.rb +77 -0
- data/lib/lib/element/element.rb +79 -0
- data/lib/lib/extensions/array_extensions.rb +32 -0
- data/lib/lib/extensions/datetime_extensions.rb +8 -0
- data/lib/lib/extensions/extensions.rb +51 -0
- data/lib/lib/extensions/file_extensions.rb +32 -0
- data/lib/lib/extensions/float_extensions.rb +32 -0
- data/lib/lib/extensions/integer_extensions.rb +39 -0
- data/lib/lib/extensions/nethttp_extensions.rb +11 -0
- data/lib/lib/extensions/object_extensions.rb +7 -0
- data/lib/lib/extensions/string_extensions.rb +35 -0
- data/lib/lib/helpers/tmc_helpers/csv_helper/csv_helper.rb +85 -0
- data/lib/lib/helpers/tmc_helpers/email_helper/email_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/http_helper/http_helper.rb +133 -0
- data/lib/lib/helpers/tmc_helpers/roi_helper/roi_helper.rb +17 -0
- data/lib/lib/helpers/tmc_helpers/snmp_helper/snmp_helper.rb +71 -0
- data/lib/lib/helpers/tmc_helpers/ssh_helper/ssh_helper.rb +337 -0
- data/lib/lib/helpers/tmc_helpers/tmc_helpers.rb +1260 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_password_keyboard.rb +102 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_search_keyboard.rb +103 -0
- data/lib/lib/keyboard/apple_tv/apple_tv_username_keyboard.rb +105 -0
- data/lib/lib/keyboard/keyboard.rb +504 -0
- data/lib/lib/keyboard/keyboard_layout.rb +51 -0
- data/lib/lib/keyboard/roku/roku_reset_pin_keyboard.rb +12 -0
- data/lib/lib/keyboard/roku/roku_rsg_search_keyboard.rb +67 -0
- data/lib/lib/keyboard/roku/roku_rsg_signin_keyboard.rb +106 -0
- data/lib/lib/keyboard/roku/roku_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/roku/roku_signin_keyboard.rb +42 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_search_keyboard.rb +50 -0
- data/lib/lib/keyboard/samsung_tv/samsung_tv_signin_keyboard.rb +52 -0
- data/lib/lib/keyboard/stb/odn/odn_on_demand_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/odn/odn_search_keyboard.rb +10 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_email_keyboard.rb +50 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_keyboard.rb +43 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_netflix_name_keyboard.rb +16 -0
- data/lib/lib/keyboard/stb/spectrum/spectrum_search_keyboard.rb +32 -0
- data/lib/lib/keyboard/tivo/tivo_password_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_search_keyboard.rb +0 -0
- data/lib/lib/keyboard/tivo/tivo_username_keyboard.rb +0 -0
- data/lib/lib/keys/apple_tv/apple_tv_keys.rb +26 -0
- data/lib/lib/keys/base_keys.rb +14 -0
- data/lib/lib/keys/dta/dta_keys.rb +60 -0
- data/lib/lib/keys/mdn/mdn_keys.rb +60 -0
- data/lib/lib/keys/passport/passport_keys.rb +59 -0
- data/lib/lib/keys/roku/roku_keys.rb +31 -0
- data/lib/lib/keys/roku_tv/roku_tv_keys.rb +32 -0
- data/lib/lib/keys/samsung_tv/samsung_tv_keys.rb +58 -0
- data/lib/lib/keys/sara/sara_keys.rb +60 -0
- data/lib/lib/keys/stb/iguide/iguide_keys.rb +56 -0
- data/lib/lib/keys/stb/odn/odn_keys.rb +63 -0
- data/lib/lib/keys/stb/spectrum/spectrum_keys.rb +59 -0
- data/lib/lib/keys/stb/stb_keys.rb +13 -0
- data/lib/lib/keys/tivo/tivo_keys.rb +26 -0
- data/lib/lib/logger/multi_io.rb +14 -0
- data/lib/lib/logger/tmc_dut_logger.rb +251 -0
- data/lib/lib/logger/tmc_logger.rb +30 -0
- data/lib/lib/mixins/assignable.rb +19 -0
- data/lib/lib/mixins/can_have_special_methods.rb +50 -0
- data/lib/lib/mixins/enumish.rb +16 -0
- data/lib/lib/new_platform.rb +302 -0
- data/lib/lib/new_sub_platform.rb +90 -0
- data/lib/lib/platform/apple_tv/apple_tv.rb +33 -0
- data/lib/lib/platform/apple_tv/apple_tv_1080/apple_tv_1080.rb +54 -0
- data/lib/lib/platform/apple_tv/apple_tv_720/apple_tv_720.rb +14 -0
- data/lib/lib/platform/dta/dta.rb +35 -0
- data/lib/lib/platform/dta/dta_1080/dta_1080.rb +15 -0
- data/lib/lib/platform/dta/dta_720/dta_720.rb +15 -0
- data/lib/lib/platform/mdn/mdn.rb +35 -0
- data/lib/lib/platform/mdn/mdn_1080/mdn_1080.rb +15 -0
- data/lib/lib/platform/mdn/mdn_720/mdn_720.rb +15 -0
- data/lib/lib/platform/mobile/android/android.rb +23 -0
- data/lib/lib/platform/mobile/android/android_phone/android_phone.rb +23 -0
- data/lib/lib/platform/mobile/android/android_tablet/android_tablet.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_phone/ios_phone.rb +23 -0
- data/lib/lib/platform/mobile/ios/ios_tablet/ios_tablet.rb +23 -0
- data/lib/lib/platform/mobile/mobile.rb +102 -0
- data/lib/lib/platform/passport/passport.rb +41 -0
- data/lib/lib/platform/passport/passport1080/passport_1080.rb +15 -0
- data/lib/lib/platform/passport/passport_720/passport_720.rb +14 -0
- data/lib/lib/platform/platform.rb +884 -0
- data/lib/lib/platform/roku/roku.rb +96 -0
- data/lib/lib/platform/roku/roku_720/roku_720.rb +16 -0
- data/lib/lib/platform/roku_tv/roku_tv.rb +33 -0
- data/lib/lib/platform/roku_tv/roku_tv_1080/roku_tv_1080.rb +14 -0
- data/lib/lib/platform/roku_tv/roku_tv_720/roku_tv_720.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv.rb +31 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_1080/samsung_tv_1080.rb +14 -0
- data/lib/lib/platform/samsung_tv/samsung_tv_720/samsung_tv_720.rb +14 -0
- data/lib/lib/platform/sara/sara.rb +42 -0
- data/lib/lib/platform/sara/sara_1080/sara_1080.rb +15 -0
- data/lib/lib/platform/sara/sara_720/sara_720.rb +15 -0
- data/lib/lib/platform/stb/iguide/iguide.rb +18 -0
- data/lib/lib/platform/stb/iguide/iguide_1080/iguide_1080.rb +14 -0
- data/lib/lib/platform/stb/iguide/iguide_720/iguide_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn.rb +480 -0
- data/lib/lib/platform/stb/odn/odn_1080/odn_1080.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_moto/odn_720_moto.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_sa/odn_720_sa.rb +14 -0
- data/lib/lib/platform/stb/odn/odn_720/odn_720_samsung/odn_720_samsung.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum.rb +48 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis/spectrum_1080_docsis.rb +16 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_arris/spectrum_1080_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_humax/spectrum_1080_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_docsis_tch/spectrum_1080_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_1080/spectrum_1080_pace/spectrum_1080_pace.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720.rb +14 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_arris/spectrum_720_docsis_arris.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_humax/spectrum_720_docsis_humax.rb +15 -0
- data/lib/lib/platform/stb/spectrum/spectrum_720/spectrum_720_docsis_tch/spectrum_720_docsis_tch.rb +15 -0
- data/lib/lib/platform/stb/stb.rb +93 -0
- data/lib/lib/platform/template.txt +16 -0
- data/lib/lib/platform/tivo/tivo.rb +28 -0
- data/lib/lib/platform/tivo/tivo_1080/tivo_1080.rb +15 -0
- data/lib/lib/platform/tivo/tivo_720/tivo_720.rb +14 -0
- data/lib/lib/platform/web/web.rb +51 -0
- data/lib/lib/platform_libs/roku/roku_controller.rb +254 -0
- data/lib/lib/prereqs/prereqs.rb +17 -0
- data/lib/lib/prereqs/prereqs_for_dut.rb +14 -0
- data/lib/lib/prereqs/prereqs_for_test.rb +14 -0
- data/lib/lib/remotes/remotes.rb +8 -0
- data/lib/lib/remotes/stb/spectrum/spectrum_remotes.rb +22 -0
- data/lib/lib/roi/black/black_roi.rb +125 -0
- data/lib/lib/roi/color/color_roi.rb +138 -0
- data/lib/lib/roi/image/image_roi.rb +187 -0
- data/lib/lib/roi/roi.rb +1064 -0
- data/lib/lib/roi/template_roi.txt +9 -0
- data/lib/lib/roi/text/text_roi.rb +187 -0
- data/lib/lib/roi/video/video_roi.rb +98 -0
- data/lib/lib/screen/screen.rb +183 -0
- data/lib/lib/screen/template.txt +7 -0
- data/lib/lib/screen/template_screen.txt +10 -0
- data/lib/lib/screens/apple_tv/apple_tv_screens.rb +44 -0
- data/lib/lib/screens/dta/dta_screens.rb +49 -0
- data/lib/lib/screens/mdn/mdn_screens.rb +49 -0
- data/lib/lib/screens/mobile/android/android_phone/android_phone_screens.rb +28 -0
- data/lib/lib/screens/mobile/android/android_screens.rb +40 -0
- data/lib/lib/screens/mobile/android/android_tablet/android_tablet_screens.rb +29 -0
- data/lib/lib/screens/mobile/ios/ios_phone/ios_phone_screens.rb +22 -0
- data/lib/lib/screens/mobile/ios/ios_screens.rb +39 -0
- data/lib/lib/screens/mobile/ios/ios_tablet/ios_tablet_screens.rb +20 -0
- data/lib/lib/screens/mobile/mobile_screens.rb +18 -0
- data/lib/lib/screens/passport/passport_screens.rb +42 -0
- data/lib/lib/screens/roku/roku_screens.rb +72 -0
- data/lib/lib/screens/roku_tv/roku_tv_screens.rb +43 -0
- data/lib/lib/screens/samsung_tv/samsung_tv_screens.rb +44 -0
- data/lib/lib/screens/sara/sara_screens.rb +49 -0
- data/lib/lib/screens/screens.rb +23 -0
- data/lib/lib/screens/stb/iguide/iguide_1080/iguide_1080_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_720/iguide_720_screens.rb +56 -0
- data/lib/lib/screens/stb/iguide/iguide_screens.rb +54 -0
- data/lib/lib/screens/stb/odn/odn_screens.rb +40 -0
- data/lib/lib/screens/stb/spectrum/spectrum_docsis/spectrum_1080_docsis_screens.rb +18 -0
- data/lib/lib/screens/stb/spectrum/spectrum_screens.rb +48 -0
- data/lib/lib/screens/stb/stb_screens.rb +13 -0
- data/lib/lib/screens/template.txt +52 -0
- data/lib/lib/screens/tivo/tivo_screens.rb +44 -0
- data/lib/lib/selenium/appium/appium.rb +388 -0
- data/lib/lib/selenium/selenium.rb +466 -0
- data/lib/lib/selenium/webdriver/webdriver.rb +254 -0
- data/lib/lib/test_case/boilerplate/functional.rb +7 -0
- data/lib/lib/test_case/boilerplate/performance.rb +7 -0
- data/lib/lib/test_case/ci_test.rb +47 -0
- data/lib/lib/test_case/functional_test_case.rb +27 -0
- data/lib/lib/test_case/make_boilerplate.rb +32 -0
- data/lib/lib/test_case/monitoring/apple_monitor.rb +104 -0
- data/lib/lib/test_case/monitoring/base_monitor.rb +140 -0
- data/lib/lib/test_case/monitoring/dta_monitor.rb +53 -0
- data/lib/lib/test_case/monitoring/iguide_monitor.rb +72 -0
- data/lib/lib/test_case/monitoring/mdn_monitor.rb +28 -0
- data/lib/lib/test_case/monitoring/monitoring_test.rb +111 -0
- data/lib/lib/test_case/monitoring/odn_monitor.rb +137 -0
- data/lib/lib/test_case/monitoring/passport_monitor.rb +50 -0
- data/lib/lib/test_case/monitoring/report_monitor.rb +178 -0
- data/lib/lib/test_case/monitoring/roku_monitor.rb +102 -0
- data/lib/lib/test_case/monitoring/sara_monitor.rb +33 -0
- data/lib/lib/test_case/monitoring/spec_monitor.rb +154 -0
- data/lib/lib/test_case/performance_test_case.rb +29 -0
- data/lib/lib/test_case/test_case.rb +1055 -0
- data/lib/lib/test_case/test_error.rb +29 -0
- data/lib/lib/test_case/test_exception.rb +9 -0
- data/lib/lib/test_case/test_status.rb +39 -0
- data/lib/lib/test_case/test_step.rb +156 -0
- data/lib/lib/test_case/test_trace.rb +80 -0
- data/lib/lib/test_data.rb +222 -0
- data/lib/lib/test_wrapper.rb +146 -0
- data/lib/misc/get_latest_android.sh +14 -0
- data/lib/misc/get_latest_ios.sh +14 -0
- data/lib/package-lock.json +3 -0
- data/lib/run_test.rb +4 -0
- data/lib/script_validator.rb +48 -0
- data/lib/syntax_eval.rb +151 -0
- data/lib/tools/convert_old_scripts.rb +100 -0
- data/lib/tools/find_duplicate_rois.rb +27 -0
- data/lib/tools/roku/inspector.rb +130 -0
- data/lib/tools/syntax_checker.rb +83 -0
- data/lib/upload_ref_images.rb +255 -0
- metadata +912 -0
@@ -0,0 +1,102 @@
|
|
1
|
+
require './lib/keyboard/keyboard'
|
2
|
+
require './lib/keyboard/keyboard_layout'
|
3
|
+
|
4
|
+
class AppleTvPasswordKeyboard < Keyboard
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super(*args)
|
8
|
+
# see Keyboard for explanation of layouts
|
9
|
+
keys_start = [
|
10
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
11
|
+
[:n0, :n1, :n2, :n3, :n4, :n5]
|
12
|
+
]
|
13
|
+
keys_lower = [
|
14
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
15
|
+
%w[a b c d e f],
|
16
|
+
%w[g h i j k l],
|
17
|
+
%w[m n o p q r],
|
18
|
+
%w[s t u v w x],
|
19
|
+
%w[y z 1 2 3 4],
|
20
|
+
%w[5 6 7 8 9 0],
|
21
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
22
|
+
]
|
23
|
+
keys_upper = [
|
24
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
25
|
+
%w[A B C D E F],
|
26
|
+
%w[G H I J K L],
|
27
|
+
%w[M N O P Q R],
|
28
|
+
%w[S T U V W X],
|
29
|
+
%w[Y Z 1 2 3 4],
|
30
|
+
%w[5 6 7 8 9 0],
|
31
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
32
|
+
]
|
33
|
+
keys_symbols = [
|
34
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
35
|
+
%w[! @ # $ % &],
|
36
|
+
%w[~ * \ / ? ^],
|
37
|
+
%w[_ ` ; : | =],
|
38
|
+
%w[é ñ [ ] { }],
|
39
|
+
%w[ç ü . , + -],
|
40
|
+
%w[< > ( ) ' "],
|
41
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
42
|
+
]
|
43
|
+
|
44
|
+
@layouts << KeyboardLayout.new(keys_start, [1, 0], name: 'keys_start')
|
45
|
+
@layouts << KeyboardLayout.new(keys_lower, [0, 1], nav_to_key: :LOWERCASE, name: 'keys_lower')
|
46
|
+
@layouts << KeyboardLayout.new(keys_upper, [0, 2], nav_to_key: :UPPERCASE, name: 'keys_upper')
|
47
|
+
@layouts << KeyboardLayout.new(keys_symbols, [0, 4], nav_to_key: :SYMBOLS, name: 'keys_symbols')
|
48
|
+
|
49
|
+
@verify_roi = dut.roi.text.search_box_text_entered rescue nil
|
50
|
+
# Do not traverse from any of the multi-column keys except to the key above-left of it, since they always left-justify.
|
51
|
+
@deny_traversals = [
|
52
|
+
[:LOWERCASE, "a"], [:LOWERCASE, "A"], [:LOWERCASE, "!"], [:LOWERCASE, :n0], [:LOWERCASE, :UPPERCASE],
|
53
|
+
["a", :LOWERCASE], ["A", :LOWERCASE], ["!", :LOWERCASE], [:n0, :LOWERCASE],
|
54
|
+
|
55
|
+
[:UPPERCASE, "d"], [:UPPERCASE, "D"], [:UPPERCASE, "$"], [:UPPERCASE, :n3], [:UPPERCASE, :LOWERCASE], [:UPPERCASE, :SYMBOLS],
|
56
|
+
["d", :UPPERCASE], ["D", :UPPERCASE], ["$", :UPPERCASE], [:n3, :UPPERCASE],
|
57
|
+
|
58
|
+
[:SYMBOLS, "f"], [:SYMBOLS, "F"], [:SYMBOLS, "&"], [:SYMBOLS, :n5], [:SYMBOLS, :UPPERCASE],
|
59
|
+
["f", :SYMBOLS], ["F", :SYMBOLS], ["&", :SYMBOLS], [:n5, :SYMBOLS],
|
60
|
+
|
61
|
+
[:SPACE, '>'], [:SPACE, '6'], [:SPACE, :DELETE],
|
62
|
+
['>', :SPACE], ['6', :SPACE],
|
63
|
+
[:DELETE, '9'], [:DELETE, ')'], [:DELETE, '.COM'], [:DELETE, :SPACE], [:DELETE, :CLEAR],
|
64
|
+
['9', :DELETE], [')', :DELETE], ['.COM', :DELETE],
|
65
|
+
[:CLEAR, "0"], [:CLEAR, "\""], [:CLEAR, :DELETE],
|
66
|
+
["0", :CLEAR], ["\"", :CLEAR]
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def displayed_rois
|
73
|
+
[@dut.roi.text.password_page_displayed]
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_layout_for_key(key)
|
77
|
+
res = nil
|
78
|
+
@layouts.each_with_index do |layout, i|
|
79
|
+
all_keys = layout.key_matrix(@shifted).flatten
|
80
|
+
if all_keys.include?(key)
|
81
|
+
# the key is in the layout, no case shift required
|
82
|
+
return [i, false, key]
|
83
|
+
elsif key.is_a?(String)
|
84
|
+
cased_val = key =~ /^[[:upper:]]+$/ ? key.downcase : key.upcase
|
85
|
+
if all_keys.include?(cased_val)
|
86
|
+
# the key is in the layout, but with a different case
|
87
|
+
if cur_layout.shift_key.nil?
|
88
|
+
# the other case is ok when there is no shift key
|
89
|
+
res = [i, false, cased_val]
|
90
|
+
else
|
91
|
+
# shift case when there is a shift key
|
92
|
+
res = [i, true, key]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
# the key is not in any layout/case
|
98
|
+
raise "Key #{key.inspect} is not defined in any keyboard layout." if res.nil?
|
99
|
+
return res
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require './lib/keyboard/keyboard'
|
2
|
+
require './lib/keyboard/keyboard_layout'
|
3
|
+
|
4
|
+
class AppleTvSearchKeyboard < Keyboard
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super(*args)
|
8
|
+
# see Keyboard for explanation of layouts
|
9
|
+
keys_start = [
|
10
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
11
|
+
[:n0, :n1, :n2, :n3, :n4, :n5]
|
12
|
+
]
|
13
|
+
keys_lower = [
|
14
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
15
|
+
%w[a b c d e f],
|
16
|
+
%w[g h i j k l],
|
17
|
+
%w[m n o p q r],
|
18
|
+
%w[s t u v w x],
|
19
|
+
%w[y z 1 2 3 4],
|
20
|
+
%w[5 6 7 8 9 0],
|
21
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
22
|
+
]
|
23
|
+
keys_upper = [
|
24
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
25
|
+
%w[A B C D E F],
|
26
|
+
%w[G H I J K L],
|
27
|
+
%w[M N O P Q R],
|
28
|
+
%w[S T U V W X],
|
29
|
+
%w[Y Z 1 2 3 4],
|
30
|
+
%w[5 6 7 8 9 0],
|
31
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
32
|
+
]
|
33
|
+
keys_symbols = [
|
34
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
35
|
+
%w[! @ # $ % &],
|
36
|
+
%w[~ * \ / ? ^],
|
37
|
+
%w[_ ` ; : | =],
|
38
|
+
%w[é ñ [ ] { }],
|
39
|
+
%w[ç ü . , + -],
|
40
|
+
%w[< > ( ) ' "],
|
41
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
42
|
+
]
|
43
|
+
|
44
|
+
@layouts << KeyboardLayout.new(keys_start, [1, 0], name: 'keys_start')
|
45
|
+
@layouts << KeyboardLayout.new(keys_lower, [0, 1], nav_to_key: :LOWERCASE, name: 'keys_lower')
|
46
|
+
@layouts << KeyboardLayout.new(keys_upper, [0, 2], nav_to_key: :UPPERCASE, name: 'keys_upper')
|
47
|
+
@layouts << KeyboardLayout.new(keys_symbols, [0, 4], nav_to_key: :SYMBOLS, name: 'keys_symbols')
|
48
|
+
|
49
|
+
@verify_roi = dut.roi.text.search_box_text_entered rescue nil
|
50
|
+
# Do not traverse from any of the multi-column keys except to the key above-left of it, since they always left-justify.
|
51
|
+
@deny_traversals = [
|
52
|
+
[:LOWERCASE, "a"], [:LOWERCASE, "A"], [:LOWERCASE, "!"], [:LOWERCASE, :n0], [:LOWERCASE, :UPPERCASE],
|
53
|
+
["a", :LOWERCASE], ["A", :LOWERCASE], ["!", :LOWERCASE], [:n0, :LOWERCASE],
|
54
|
+
|
55
|
+
[:UPPERCASE, "d"], [:UPPERCASE, "D"], [:UPPERCASE, "$"], [:UPPERCASE, :n3], [:UPPERCASE, :LOWERCASE], [:UPPERCASE, :SYMBOLS],
|
56
|
+
["d", :UPPERCASE], ["D", :UPPERCASE], ["$", :UPPERCASE], [:n3, :UPPERCASE],
|
57
|
+
|
58
|
+
[:SYMBOLS, "f"], [:SYMBOLS, "F"], [:SYMBOLS, "&"], [:SYMBOLS, :n5], [:SYMBOLS, :UPPERCASE],
|
59
|
+
["f", :SYMBOLS], ["F", :SYMBOLS], ["&", :SYMBOLS], [:n5, :SYMBOLS],
|
60
|
+
|
61
|
+
[:SPACE, '>'], [:SPACE, '6'], [:SPACE, :DELETE],
|
62
|
+
['>', :SPACE], ['6', :SPACE],
|
63
|
+
[:DELETE, '9'], [:DELETE, ')'], [:DELETE, '.COM'], [:DELETE, :SPACE], [:DELETE, :CLEAR],
|
64
|
+
['9', :DELETE], [')', :DELETE], ['.COM', :DELETE],
|
65
|
+
[:CLEAR, "0"], [:CLEAR, "\""], [:CLEAR, :DELETE],
|
66
|
+
["0", :CLEAR], ["\"", :CLEAR]
|
67
|
+
]
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
def displayed_rois
|
73
|
+
[@dut.roi.text.search_page_displayed_text, @dut.roi.text.search_page_new]
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_layout_for_key(key)
|
77
|
+
res = nil
|
78
|
+
@layouts.each_with_index do |layout, i|
|
79
|
+
all_keys = layout.key_matrix(@shifted).flatten
|
80
|
+
if all_keys.include?(key)
|
81
|
+
# the key is in the layout, no case shift required
|
82
|
+
return [i, false, key]
|
83
|
+
elsif key.is_a?(String)
|
84
|
+
cased_val = key =~ /^[[:upper:]]+$/ ? key.downcase : key.upcase
|
85
|
+
if all_keys.include?(cased_val)
|
86
|
+
# the key is in the layout, but with a different case
|
87
|
+
if cur_layout.shift_key.nil?
|
88
|
+
# the other case is ok when there is no shift key
|
89
|
+
res = [i, false, cased_val]
|
90
|
+
else
|
91
|
+
# shift case when there is a shift key
|
92
|
+
res = [i, true, key]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
# the key is not in any layout/case
|
98
|
+
raise "Key #{key.inspect} is not defined in any keyboard layout." if res.nil?
|
99
|
+
return res
|
100
|
+
end
|
101
|
+
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require './lib/keyboard/keyboard'
|
2
|
+
require './lib/keyboard/keyboard_layout'
|
3
|
+
|
4
|
+
class AppleTvUsernameKeyboard < Keyboard
|
5
|
+
|
6
|
+
def initialize(*args)
|
7
|
+
super(*args)
|
8
|
+
# see Keyboard for explanation of layouts
|
9
|
+
keys_start = [
|
10
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
11
|
+
[:n0, :n1, :n2, :n3, :n4, :n5]
|
12
|
+
]
|
13
|
+
keys_lower = [
|
14
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
15
|
+
%w[a b c d e f],
|
16
|
+
%w[g h i j k l],
|
17
|
+
%w[m n o p q r],
|
18
|
+
%w[s t u v w x],
|
19
|
+
%w[y z 1 2 3 4],
|
20
|
+
%w[5 6 7 8 9 0],
|
21
|
+
['.', '_', '@', '.com', '.net', '.edu'],
|
22
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
23
|
+
]
|
24
|
+
keys_upper = [
|
25
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
26
|
+
%w[A B C D E F],
|
27
|
+
%w[G H I J K L],
|
28
|
+
%w[M N O P Q R],
|
29
|
+
%w[S T U V W X],
|
30
|
+
%w[Y Z 1 2 3 4],
|
31
|
+
%w[5 6 7 8 9 0],
|
32
|
+
['.', '_', '@', '.COM', '.NET', '.EDU'],
|
33
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
34
|
+
]
|
35
|
+
keys_symbols = [
|
36
|
+
[:LOWERCASE, :LOWERCASE, :UPPERCASE, :UPPERCASE, :SYMBOLS, :SYMBOLS],
|
37
|
+
%w[! @ # $ % &],
|
38
|
+
%w[~ * \ / ? ^],
|
39
|
+
%w[_ ` ; : | =],
|
40
|
+
%w[é ñ [ ] { }],
|
41
|
+
%w[ç ü . , + -],
|
42
|
+
%w[< > ( ) ' "],
|
43
|
+
['.', '_', '@', '.com', '.net', '.edu'],
|
44
|
+
[:SPACE, :SPACE, :DELETE, :DELETE, :CLEAR, :CLEAR]
|
45
|
+
]
|
46
|
+
|
47
|
+
@layouts << KeyboardLayout.new(keys_start, [1, 0], name: 'keys_start')
|
48
|
+
@layouts << KeyboardLayout.new(keys_lower, [0, 1], nav_to_key: :LOWERCASE, name: 'keys_lower')
|
49
|
+
@layouts << KeyboardLayout.new(keys_upper, [0, 2], nav_to_key: :UPPERCASE, name: 'keys_upper')
|
50
|
+
@layouts << KeyboardLayout.new(keys_symbols, [0, 4], nav_to_key: :SYMBOLS, name: 'keys_symbols')
|
51
|
+
|
52
|
+
@verify_roi = dut.roi.text.search_box_text_entered rescue nil
|
53
|
+
# Do not traverse from any of the multi-column keys except to the key above-left of it, since they always left-justify.
|
54
|
+
@deny_traversals = [
|
55
|
+
[:LOWERCASE, "a"], [:LOWERCASE, "A"], [:LOWERCASE, "!"], [:LOWERCASE, :n0], [:LOWERCASE, :UPPERCASE],
|
56
|
+
["a", :LOWERCASE], ["A", :LOWERCASE], ["!", :LOWERCASE], [:n0, :LOWERCASE],
|
57
|
+
|
58
|
+
[:UPPERCASE, "d"], [:UPPERCASE, "D"], [:UPPERCASE, "$"], [:UPPERCASE, :n3], [:UPPERCASE, :LOWERCASE], [:UPPERCASE, :SYMBOLS],
|
59
|
+
["d", :UPPERCASE], ["D", :UPPERCASE], ["$", :UPPERCASE], [:n3, :UPPERCASE],
|
60
|
+
|
61
|
+
[:SYMBOLS, "f"], [:SYMBOLS, "F"], [:SYMBOLS, "&"], [:SYMBOLS, :n5], [:SYMBOLS, :UPPERCASE],
|
62
|
+
["f", :SYMBOLS], ["F", :SYMBOLS], ["&", :SYMBOLS], [:n5, :SYMBOLS],
|
63
|
+
|
64
|
+
[:SPACE, '.'], [:SPACE, :DELETE],
|
65
|
+
['.', :SPACE],
|
66
|
+
[:DELETE, '.com'], [:DELETE, '.COM'], [:DELETE, :SPACE], [:DELETE, :CLEAR],
|
67
|
+
['.com', :DELETE], ['.COM', :DELETE],
|
68
|
+
[:CLEAR, '.edu'], [:CLEAR, '.EDU'], [:CLEAR, :DELETE],
|
69
|
+
['.edu', :CLEAR], ['.EDU', :CLEAR]
|
70
|
+
]
|
71
|
+
end
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def displayed_rois
|
76
|
+
[@dut.roi.text.username_page_displayed]
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_layout_for_key(key)
|
80
|
+
res = nil
|
81
|
+
@layouts.each_with_index do |layout, i|
|
82
|
+
all_keys = layout.key_matrix(@shifted).flatten
|
83
|
+
if all_keys.include?(key)
|
84
|
+
# the key is in the layout, no case shift required
|
85
|
+
return [i, false, key]
|
86
|
+
elsif key.is_a?(String)
|
87
|
+
cased_val = key =~ /^[[:upper:]]+$/ ? key.downcase : key.upcase
|
88
|
+
if all_keys.include?(cased_val)
|
89
|
+
# the key is in the layout, but with a different case
|
90
|
+
if cur_layout.shift_key.nil?
|
91
|
+
# the other case is ok when there is no shift key
|
92
|
+
res = [i, false, cased_val]
|
93
|
+
else
|
94
|
+
# shift case when there is a shift key
|
95
|
+
res = [i, true, key]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
# the key is not in any layout/case
|
101
|
+
raise "Key #{key.inspect} is not defined in any keyboard layout." if res.nil?
|
102
|
+
return res
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
@@ -0,0 +1,504 @@
|
|
1
|
+
require './lib/keyboard/keyboard_layout'
|
2
|
+
|
3
|
+
# The Keyboard class defines methods for navigating/typing keys on layouts that are provided by inheriting classes.
|
4
|
+
# Keyboard layouts are defined as a matrix of keys. The key types are:
|
5
|
+
# special keys - defined as Symbols, i.e. :SHIFT_LOCK, :SHIFT, :BACKSPACE
|
6
|
+
# normal keys - defined as Strings, i.e. 'a', '1', '@'
|
7
|
+
# Splat arrays can be used to simplify rows containing mixed key types. Just don't make it confusing to read the layout!
|
8
|
+
class Keyboard
|
9
|
+
|
10
|
+
DEBUG = false #TODO: Use for debugging only! If pushed to master as false, key navigation will take forever.
|
11
|
+
|
12
|
+
def initialize(dut)
|
13
|
+
@dut = dut
|
14
|
+
@test_case = dut.send(:test_case)
|
15
|
+
@layouts = []
|
16
|
+
@start_layout_index = 0
|
17
|
+
@verify_roi = nil
|
18
|
+
@key_delay = 3.sec
|
19
|
+
@shifted = false
|
20
|
+
@shift_persists = false
|
21
|
+
@wrap_rows = false
|
22
|
+
@wrap_cols = false
|
23
|
+
@deny_traversals = []
|
24
|
+
reset
|
25
|
+
end
|
26
|
+
|
27
|
+
# Public: This function is used to write the given text on the virtual keyboard.
|
28
|
+
#
|
29
|
+
# text - String or Array of String keys to type.
|
30
|
+
# start_key - String non-default start key (default: nil).
|
31
|
+
# verify_roi - Roi object to verify the typed text (default: nil).
|
32
|
+
# delay_between_keys - Delay used between key presses in miliseconds min value of 3000 (default: 3000).
|
33
|
+
# nav_only - Boolean whether to navigate without selecting (default: false).
|
34
|
+
# Used to navigate to a single key without selecting it.
|
35
|
+
#
|
36
|
+
# Returns Boolean true if successfully able to write the given text. Else, returns false.
|
37
|
+
def type?(text, args={})
|
38
|
+
@key_delay = args[:delay_between_keys].to_i if args[:delay_between_keys].to_i > 3000
|
39
|
+
nav_only = args.fetch(:nav_only, false)
|
40
|
+
logger.info("#{nav_only ? 'Navigating to' : 'Typing'} #{text.inspect} on the #{cur_layout.name} keyboard.")
|
41
|
+
start_key = args[:start_key]
|
42
|
+
# only verify if verify==true (from `type_keys?')
|
43
|
+
verify_roi = args[:verify] ? args[:verify_roi] || @verify_roi : nil
|
44
|
+
unless start_key.nil?
|
45
|
+
@cur_coords = get_key_coords(start_key).first
|
46
|
+
end
|
47
|
+
unless text.is_a?(Array)
|
48
|
+
text = [text]
|
49
|
+
end
|
50
|
+
first_char = true
|
51
|
+
text.each do |val|
|
52
|
+
if val.is_a?(String) && val.length > 1
|
53
|
+
# type the string
|
54
|
+
val.split('').each do |key|
|
55
|
+
return false unless type?(key, nav_only: nav_only)
|
56
|
+
end
|
57
|
+
else
|
58
|
+
val = :SPACE if val == ' '
|
59
|
+
layout_index, shift, key = get_layout_for_key(val)
|
60
|
+
# this is a defined key
|
61
|
+
if layout_index != cur_layout_index
|
62
|
+
# change to the specified layout
|
63
|
+
return false unless type_key?(@layouts[layout_index].nav_to_key)
|
64
|
+
last_row_count = cur_key_matrix.count
|
65
|
+
last_row_width = cur_key_matrix[cur_coords[0]].count
|
66
|
+
@cur_layout_index = layout_index
|
67
|
+
last_nav_to_key = cur_layout.nav_to_key
|
68
|
+
# check if we need to reset the coords due to difference in dimensions between last and new keyboard
|
69
|
+
if cur_key_matrix.count != last_row_count || cur_key_matrix[cur_coords[0]].count != last_row_width
|
70
|
+
@cur_coords = get_key_coords(last_nav_to_key).first
|
71
|
+
end
|
72
|
+
# check if we need to downshift to restore the default case of the new layout
|
73
|
+
shift ||= (@shift_persists && @shifted)
|
74
|
+
end
|
75
|
+
# todo: implement shift lock for efficiency
|
76
|
+
# if this layout auto-cases, this is the first character, and the key is uppercase, then shift is not req'd
|
77
|
+
no_shift_reqd = cur_layout.auto_case && first_char && (key == key.upcase)
|
78
|
+
if shift && !no_shift_reqd
|
79
|
+
# press the shift key
|
80
|
+
return false unless type_key?(cur_layout.shift_key)
|
81
|
+
end
|
82
|
+
if nav_only
|
83
|
+
return false unless nav_to_key?(key)
|
84
|
+
else
|
85
|
+
return false unless type_key?(key)
|
86
|
+
end
|
87
|
+
first_char = false if first_char
|
88
|
+
first_char = true if cur_layout.auto_case && key == :SPACE
|
89
|
+
end
|
90
|
+
end
|
91
|
+
# all text typed successfully
|
92
|
+
if verify_roi.nil?
|
93
|
+
true
|
94
|
+
else
|
95
|
+
typed = verify_roi.retrieve.sub(/_$/, '')
|
96
|
+
if typed == text
|
97
|
+
true
|
98
|
+
else
|
99
|
+
logger.info(%Q(Tried to type "#{text}" but typed "#{typed}" instead!))
|
100
|
+
false
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# Public: Checks if the current keyboard is displayed.
|
106
|
+
#
|
107
|
+
# Returns a Boolean true if the
|
108
|
+
def displayed?
|
109
|
+
return false if displayed_rois.empty?
|
110
|
+
displayed_rois.each {|roi| return true if roi.displayed?}
|
111
|
+
false
|
112
|
+
end
|
113
|
+
|
114
|
+
# Public: Resets all keyboard attributes.
|
115
|
+
#
|
116
|
+
# Returns nothing.
|
117
|
+
def reset
|
118
|
+
@shifted = false
|
119
|
+
@cur_coords = nil # set automatically on first access
|
120
|
+
@cur_layout_index = nil # set automatically on first access
|
121
|
+
end
|
122
|
+
|
123
|
+
private
|
124
|
+
|
125
|
+
# Internal: Get ROIs to check whether this keyboard is displayed.
|
126
|
+
def displayed_rois
|
127
|
+
[]
|
128
|
+
end
|
129
|
+
|
130
|
+
# Internal: Get a handle to the logger.
|
131
|
+
def logger
|
132
|
+
@test_case.send(:logger_for_device, @dut.id)
|
133
|
+
end
|
134
|
+
|
135
|
+
# Internal: Get the key matrix for the layout given by name.
|
136
|
+
def key_matrix(index)
|
137
|
+
@layouts[index].key_matrix(@shifted)
|
138
|
+
end
|
139
|
+
|
140
|
+
# Internal: Get the key matrix for the current layout.
|
141
|
+
def cur_key_matrix
|
142
|
+
key_matrix(cur_layout_index)
|
143
|
+
end
|
144
|
+
|
145
|
+
# Internal: Get the current layout object.
|
146
|
+
def cur_layout
|
147
|
+
@layouts[cur_layout_index]
|
148
|
+
end
|
149
|
+
|
150
|
+
# Internal: Get the number of rows in the current key matrix.
|
151
|
+
def num_rows
|
152
|
+
cur_key_matrix.size
|
153
|
+
end
|
154
|
+
|
155
|
+
# Internal: Get the number of columns in the current key matrix.
|
156
|
+
def num_cols
|
157
|
+
cur_key_matrix.map {|row| row.size}.max
|
158
|
+
end
|
159
|
+
|
160
|
+
# Internal: Locate the layout for the specified key.
|
161
|
+
#
|
162
|
+
# Returns an Array of [INDEX, SHIFT, KEY] where INDEX is the index of the layout, SHIFT is a Boolean indicating
|
163
|
+
# whether shifting is required, and KEY is the verified key to type. Returns [nil, nil, nil] if the key is not found
|
164
|
+
# in any case in any layout.
|
165
|
+
def get_layout_for_key(key)
|
166
|
+
@layouts.each_with_index do |layout, i|
|
167
|
+
all_keys = layout.key_matrix(@shifted).flatten
|
168
|
+
if all_keys.include?(key)
|
169
|
+
# the key is in the layout, no case shift required
|
170
|
+
return [i, false, key]
|
171
|
+
elsif key.is_a?(String)
|
172
|
+
cased_val = key =~ /^[[:upper:]]+$/ ? key.downcase : key.upcase
|
173
|
+
if all_keys.include?(cased_val)
|
174
|
+
# the key is in the layout, but with a different case
|
175
|
+
if cur_layout.shift_key.nil?
|
176
|
+
# the other case is ok when there is no shift key
|
177
|
+
return [i, false, cased_val]
|
178
|
+
else
|
179
|
+
# shift case when there is a shift key
|
180
|
+
return [i, true, key]
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
end
|
185
|
+
# the key is not in any layout/case
|
186
|
+
raise "Key #{key.inspect} is not defined in any keyboard layout."
|
187
|
+
end
|
188
|
+
|
189
|
+
# Internal: Get the current key.
|
190
|
+
def cur_key
|
191
|
+
cur_key_matrix[cur_coords[0]][cur_coords[1]]
|
192
|
+
end
|
193
|
+
|
194
|
+
# Internal: Get the current coordinates.
|
195
|
+
def cur_coords
|
196
|
+
if @cur_coords.nil?
|
197
|
+
@cur_coords = cur_layout.start_coords.dup
|
198
|
+
end
|
199
|
+
@cur_coords
|
200
|
+
end
|
201
|
+
|
202
|
+
# Internal: Get the current layout index.
|
203
|
+
def cur_layout_index
|
204
|
+
if @cur_layout_index.nil?
|
205
|
+
@cur_layout_index = @start_layout_index
|
206
|
+
end
|
207
|
+
@cur_layout_index
|
208
|
+
end
|
209
|
+
|
210
|
+
# Internal: This function is used to get coordinates for a given key.
|
211
|
+
#
|
212
|
+
# key - String key on the virtual keyboard.
|
213
|
+
#
|
214
|
+
# Returns an Array of Integer Arrays, [[row, col], ...], of the possible coordinates for the given key if it is on
|
215
|
+
# the keyboard. Else, returns nil.
|
216
|
+
def get_key_coords(key)
|
217
|
+
key_coords = []
|
218
|
+
num_rows.times do |row|
|
219
|
+
num_cols.times do |col|
|
220
|
+
if key == cur_key_matrix[row][col]
|
221
|
+
key_coords << [row, col]
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
key_coords
|
226
|
+
end
|
227
|
+
|
228
|
+
# Internal: Navigate to and type the specified key.
|
229
|
+
def type_key?(key)
|
230
|
+
# TODO create ROI to verify highlighted text? (belongs in KeyboardLayout instance).
|
231
|
+
if nav_to_key?(key)
|
232
|
+
@dut.press_key.SELECT(sleep_time: @key_delay)
|
233
|
+
if key == cur_layout.shift_key
|
234
|
+
@shifted = !@shifted
|
235
|
+
end
|
236
|
+
return true
|
237
|
+
end
|
238
|
+
logger.info("Failed to type key '#{key}'.")
|
239
|
+
false
|
240
|
+
end
|
241
|
+
|
242
|
+
# Internal: Gets the value closest to zero from the given array.
|
243
|
+
def get_closest_to_zero(*arr)
|
244
|
+
ret = nil
|
245
|
+
arr.flatten.each {|v| ret = v if ret.nil? || v.abs < ret.abs}
|
246
|
+
#puts "closest to zero of #{arr.flatten.inspect} >>> #{ret}" if DEBUG
|
247
|
+
ret
|
248
|
+
end
|
249
|
+
|
250
|
+
# Internal: Gets neighboring key for the specified coordinates and direction.
|
251
|
+
def get_neighboring_key(coords, direction)
|
252
|
+
row, col = coords
|
253
|
+
if direction == :down
|
254
|
+
next_coords = @wrap_rows && row + 1 == num_rows ? [0, col] : [row + 1, col]
|
255
|
+
elsif direction == :up
|
256
|
+
next_coords = @wrap_rows || row != 0 ? [row - 1, col] : nil
|
257
|
+
elsif direction == :right
|
258
|
+
next_coords = @wrap_cols && col + 1 == num_cols ? [row, 0] : [row, col + 1]
|
259
|
+
else
|
260
|
+
next_coords = @wrap_cols || col != 0 ? [row, col - 1] : nil
|
261
|
+
end
|
262
|
+
row = next_coords.nil? ? nil : cur_key_matrix[next_coords[0]]
|
263
|
+
key = row.nil? ? nil : row[next_coords[1]]
|
264
|
+
if key == :BLANK
|
265
|
+
return get_neighboring_key(next_coords, direction)
|
266
|
+
end
|
267
|
+
[key, next_coords]
|
268
|
+
end
|
269
|
+
|
270
|
+
# Internal: Gets neighboring keys for the specified coordinates.
|
271
|
+
def get_neighboring_keys(coords)
|
272
|
+
keys = {}
|
273
|
+
[:down, :up, :left, :right].each do |dir|
|
274
|
+
keys[dir] = get_neighboring_key(coords, dir)
|
275
|
+
end
|
276
|
+
keys
|
277
|
+
end
|
278
|
+
|
279
|
+
# Internal: Gets all paths to the specified key from the given coordinates.
|
280
|
+
def get_paths_to_key(key, start_coords, coords: nil, path: [], paths: [], shortest: false)
|
281
|
+
coords ||= start_coords
|
282
|
+
this_key = cur_key_matrix[coords[0]][coords[1]]
|
283
|
+
opts = get_neighboring_keys(coords)
|
284
|
+
opts.each do |dir, opt|
|
285
|
+
next_key, next_coord = opt
|
286
|
+
if next_key.nil? || @deny_traversals.include?([this_key, next_key])
|
287
|
+
# key does not exist or is not allowed; no-op
|
288
|
+
puts "key does not exist or traversal from (#{this_key} #{coords.inspect}) is not allowed >>> #{next_key} #{next_coord.inspect}" if DEBUG
|
289
|
+
else
|
290
|
+
new_path = path + [{key: next_key, coords: next_coord, dir: dir}]
|
291
|
+
#puts 'new path=' + new_path.map {|n| n[:key]}.inspect
|
292
|
+
path_len = new_path.uniq {|nav| nav[:key]}.count
|
293
|
+
if next_key == key
|
294
|
+
paths << new_path
|
295
|
+
if @shortest.nil? || path_len < @shortest
|
296
|
+
@shortest = path_len
|
297
|
+
end
|
298
|
+
elsif shortest && !@shortest.nil? && path_len > @shortest
|
299
|
+
# path is longer than shortest; no-op
|
300
|
+
puts "path is longer than shortest (#{@shortest}) >>> #{new_path.inspect}" if DEBUG
|
301
|
+
elsif path.any? {|nav| nav[:key] == next_key} && path[-1][:key] != next_key #next_key == cur_key_matrix[start_coords[0]][start_coords[1]]
|
302
|
+
# key is repeated; no-op
|
303
|
+
puts "path repeats key (#{next_key}) >>> #{new_path.inspect}" if DEBUG
|
304
|
+
else
|
305
|
+
if [:up, :down].include?(dir)
|
306
|
+
reverse_dir = dir == :up ? :down : :up
|
307
|
+
else
|
308
|
+
reverse_dir = dir == :left ? :right : :left
|
309
|
+
end
|
310
|
+
navs = new_path.map {|nav| nav[:dir]}.select {|d| [dir, reverse_dir].include?(d)}
|
311
|
+
if navs.count > 2 && navs[-2] == reverse_dir && navs[0..-3].include?(dir)
|
312
|
+
# changed direction more than once; no-op
|
313
|
+
puts "path changed direction more than once >>> #{new_path.inspect}" if DEBUG
|
314
|
+
else
|
315
|
+
get_paths_to_key(key, start_coords, coords: next_coord, path: new_path, paths: paths, shortest: shortest)
|
316
|
+
end
|
317
|
+
end
|
318
|
+
end
|
319
|
+
end
|
320
|
+
paths
|
321
|
+
end
|
322
|
+
|
323
|
+
# Internal: This function is used to navigate to a given key.
|
324
|
+
#
|
325
|
+
# key - String key on the virtual keyboard.
|
326
|
+
#
|
327
|
+
# Returns Boolean true if successfully able to navigate to the given key. Else, returns false.
|
328
|
+
def nav_to_key?(key)
|
329
|
+
coords = get_key_coords(key)
|
330
|
+
if coords.empty?
|
331
|
+
logger.info("Key '#{key}' is not located on the #{cur_layout.name} keyboard.") # TODO indicate keyboard subclass being used.
|
332
|
+
return false
|
333
|
+
end
|
334
|
+
if cur_key == key # Already on correct key.
|
335
|
+
return true
|
336
|
+
end
|
337
|
+
# Get all valid paths to key from current coordinates.
|
338
|
+
@shortest = nil
|
339
|
+
paths = get_paths_to_key(key, cur_coords, shortest: true)
|
340
|
+
puts "paths count >>> #{paths.count}" if DEBUG
|
341
|
+
=begin
|
342
|
+
|
343
|
+
# Map reasonable routes to key. This may generate up to eight possible paths:
|
344
|
+
# down/right, down/left, up/right, up/left, right/down, right/up, left/down, left/up
|
345
|
+
# Yields max of 4 paths if keys do not wrap; 6 paths if either rows/cols wrap; or 8 paths if both rows/cols wrap.
|
346
|
+
dirs = [:down, :up, :right, :left]
|
347
|
+
paths = []
|
348
|
+
dirs.each do |dir_a|
|
349
|
+
secondary_dirs = [:down, :up].include?(dir_a) ? [:right, :left] : [:down, :up]
|
350
|
+
secondary_dirs.each do |dir_b|
|
351
|
+
puts "traversing #{dir_a} then #{dir_b} to coords >>> #{coords}" if DEBUG
|
352
|
+
navs = []
|
353
|
+
path_coords = cur_coords.dup
|
354
|
+
disallow_navs = []
|
355
|
+
until coords.include?(path_coords)
|
356
|
+
puts "current coords >>> #{path_coords.inspect}" if DEBUG
|
357
|
+
# Map neighboring keys.
|
358
|
+
map = get_neighboring_keys(path_coords)
|
359
|
+
puts "neighboring keys >>> #{map.inspect}" if DEBUG
|
360
|
+
# Determine navigation direction.
|
361
|
+
same_row = coords.any? {|c| c[0] - path_coords[0] == 0}
|
362
|
+
same_col = coords.any? {|c| c[1] - path_coords[1] == 0}
|
363
|
+
if ([:down, :up].include?(dir_a) && !same_row) || ([:right, :left].include?(dir_a) && !same_col)
|
364
|
+
nav = dir_a # travel in the primary direction
|
365
|
+
else
|
366
|
+
nav = dir_b # otherwise, travel in the secondary direction
|
367
|
+
end
|
368
|
+
if disallow_navs.include?(nav)
|
369
|
+
allow_navs = dirs.reject {|d| disallow_navs.include?(d)}
|
370
|
+
if allow_navs.empty?
|
371
|
+
puts 'path failed' if DEBUG
|
372
|
+
navs = nil
|
373
|
+
break
|
374
|
+
end
|
375
|
+
# try to navigate around something by changing to the other direction
|
376
|
+
if allow_navs.include?(dir_a)
|
377
|
+
nav = dir_a
|
378
|
+
elsif allow_navs.include?(dir_b)
|
379
|
+
nav = dir_b
|
380
|
+
else
|
381
|
+
nav = allow_navs.first
|
382
|
+
end
|
383
|
+
end
|
384
|
+
# Validate navigation constraints.
|
385
|
+
redirect = false
|
386
|
+
if map[nav].nil?
|
387
|
+
# we have dead-ended into a non-wrapping edge of the keyboard
|
388
|
+
puts 'redirecting due to non-wrapping edge of keyboard' if DEBUG
|
389
|
+
redirect = true
|
390
|
+
elsif map[nav] == :BLANK
|
391
|
+
# we need to navigate around a gap
|
392
|
+
puts 'redirecting for to navigate around gap' if DEBUG
|
393
|
+
redirect = true
|
394
|
+
else
|
395
|
+
last_nav = navs[-1]
|
396
|
+
last_key = last_nav.nil? ? curr_key : last_nav[0]
|
397
|
+
if map[nav] != last_key && navs.any? {|n| n[0] == map[nav]}
|
398
|
+
# this nav traverses to a key we were already on
|
399
|
+
puts 'redirecting for repeated key' if DEBUG
|
400
|
+
redirect = true
|
401
|
+
else
|
402
|
+
prior_key = navs[-2].nil? ? nil : navs[-2][0]
|
403
|
+
unless last_nav.nil?
|
404
|
+
if @avoid_traversals.include?([last_key, map[nav]])
|
405
|
+
# this traversal is not allowed; change direction
|
406
|
+
puts 'redirecting for disallowed traversal' if DEBUG
|
407
|
+
redirect = true
|
408
|
+
elsif nav != last_nav[1] && last_key == prior_key
|
409
|
+
# this nav changes direction and last two navs were same key; strip last and change direction
|
410
|
+
puts 'redirecting for multi-row/col key' if DEBUG
|
411
|
+
navs.pop
|
412
|
+
path_coords = navs[-1].nil? ? cur_coords : navs[-1][2]
|
413
|
+
redirect = true
|
414
|
+
end
|
415
|
+
end
|
416
|
+
end
|
417
|
+
end
|
418
|
+
# Redirect if necessary.
|
419
|
+
if redirect
|
420
|
+
disallow_navs << nav
|
421
|
+
next
|
422
|
+
end
|
423
|
+
disallow_navs.clear
|
424
|
+
# Update path coordinates.
|
425
|
+
case nav
|
426
|
+
when :down
|
427
|
+
path_coords[0] += 1
|
428
|
+
when :up
|
429
|
+
path_coords[0] -= 1
|
430
|
+
when :right
|
431
|
+
path_coords[1] += 1
|
432
|
+
when :left
|
433
|
+
path_coords[1] -= 1
|
434
|
+
else
|
435
|
+
raise 'Invalid directional key!'
|
436
|
+
end
|
437
|
+
if @wrap_rows
|
438
|
+
# Correct coords if we wrapped rows
|
439
|
+
if path_coords[0] == num_rows
|
440
|
+
path_coords[0] = 0
|
441
|
+
elsif path_coords[0] == -1
|
442
|
+
path_coords[0] = num_rows - 1
|
443
|
+
end
|
444
|
+
end
|
445
|
+
if @wrap_cols
|
446
|
+
# Correct coords if we wrapped cols
|
447
|
+
if path_coords[1] == num_cols
|
448
|
+
path_coords[1] = 0
|
449
|
+
elsif path_coords[1] == -1
|
450
|
+
path_coords[1] = num_cols - 1
|
451
|
+
end
|
452
|
+
end
|
453
|
+
navs << [map[nav], nav, path_coords.dup]
|
454
|
+
end
|
455
|
+
paths << navs unless navs.nil?
|
456
|
+
end
|
457
|
+
end
|
458
|
+
=end
|
459
|
+
# Scrub multi-row/col keys from paths
|
460
|
+
paths.each do |path|
|
461
|
+
path.reject!.each_with_index do |nav, i|
|
462
|
+
if i == 0
|
463
|
+
nav[:key] == cur_key # reject first key if same as current
|
464
|
+
else
|
465
|
+
nav[:key] == path[i - 1][:key] # reject key + n if same as last
|
466
|
+
end
|
467
|
+
end
|
468
|
+
end
|
469
|
+
# Choose the shortest path and navigate.
|
470
|
+
#puts "final paths >>>\n#{paths.map {|p| "\t#{p.inspect}"}.join("\n")}" if DEBUG
|
471
|
+
puts "final paths count >>> #{paths.count}" if DEBUG
|
472
|
+
path = paths.sort_by {|p| p.count}.first
|
473
|
+
puts "shortest path >>> #{path}" if DEBUG
|
474
|
+
path.each do |nav|
|
475
|
+
@dut.press_key("#{nav[:dir]}_arrow", sleep_time: @key_delay)
|
476
|
+
@cur_coords = nav[:coords]
|
477
|
+
end
|
478
|
+
# Verify cursor is on key.
|
479
|
+
# TODO add verification check. Should be in subclass since dependant on keyboard layout
|
480
|
+
# if verify_focus_on_key(key)
|
481
|
+
true
|
482
|
+
end
|
483
|
+
|
484
|
+
# TODO write method to verify you are on correct key (belongs in subclass).
|
485
|
+
# def verify_focus_on_key(key)
|
486
|
+
# # Create a 'base ROI for each keyboard subclass'
|
487
|
+
# # Use the vertical & horizontal spacing between keys
|
488
|
+
# # to calculate and update the ROI and check if color displayed
|
489
|
+
# end
|
490
|
+
|
491
|
+
# TODO write method to clear & reset keyboard (belongs in subclass).
|
492
|
+
# def reset_keyboard()
|
493
|
+
# if keyboard type has clear
|
494
|
+
# write_text('CLEAR')
|
495
|
+
# elsif # keyboard clears when you go back a screen...
|
496
|
+
# dut.press_key('exit', :sleep_time => 1.sec)
|
497
|
+
# dut.screen._blah_.nav_to?
|
498
|
+
# reset_attributes() if # if keyboard navigation resets back to starting point
|
499
|
+
# else
|
500
|
+
# nav_to_key(:BACKSPACE)
|
501
|
+
# text_roi.retrieve.to_s.length.times{dut.press_key('select', :sleep_time => 1.sec)}
|
502
|
+
# end
|
503
|
+
|
504
|
+
end
|