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,41 @@
|
|
1
|
+
require './lib/platform/platform'
|
2
|
+
require './lib/screens/passport/passport_screens'
|
3
|
+
require './lib/rois/passport/passport_rois'
|
4
|
+
require './lib/keys/passport/passport_keys'
|
5
|
+
|
6
|
+
# Adds to or modifies the platform with Passport-specific functionality.
|
7
|
+
|
8
|
+
class Passport < Platform
|
9
|
+
|
10
|
+
# Public: Initializes a Passport device.
|
11
|
+
def initialize(*args)
|
12
|
+
super(*args)
|
13
|
+
@screens = PassportScreens.new(self)
|
14
|
+
@roi = PassportRois.new(self)
|
15
|
+
set_keys(PassportKeys.new)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Public: Initializes the Passport and brings it to the Live TV screen.
|
19
|
+
#
|
20
|
+
# Returns a Boolean true if the device was initialized, otherwise false.
|
21
|
+
def init?
|
22
|
+
super do
|
23
|
+
tries = 2
|
24
|
+
count = 0
|
25
|
+
while (tries > count) do
|
26
|
+
if has_power?
|
27
|
+
return true
|
28
|
+
elsif power_on
|
29
|
+
sleep(2000)
|
30
|
+
#do nothing
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if has_power?
|
35
|
+
return true
|
36
|
+
else
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require './lib/platform/passport/passport'
|
2
|
+
require './lib/rois/passport/passport_1080/passport_1080_rois'
|
3
|
+
|
4
|
+
# Adds to or modifies the Passport platform with 1080p-specific functionality.
|
5
|
+
|
6
|
+
class Passport1080 < Passport
|
7
|
+
|
8
|
+
# Public: Initializes an Passport 1080p device.
|
9
|
+
def initialize(*args)
|
10
|
+
super(*args)
|
11
|
+
@roi = Passport1080Rois.new(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require './lib/platform/passport/passport'
|
2
|
+
require './lib/rois/passport/passport_720/passport_720_rois'
|
3
|
+
|
4
|
+
# Adds to or modifies the Passport platform with 720p-specific functionality.
|
5
|
+
|
6
|
+
class Passport720 < Passport
|
7
|
+
|
8
|
+
# Public: Initializes an Passport 720p device.
|
9
|
+
def initialize(*args)
|
10
|
+
super(*args)
|
11
|
+
@roi = Passport720Rois.new(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,884 @@
|
|
1
|
+
require './lib/screens/screens'
|
2
|
+
require './lib/rois/rois'
|
3
|
+
require './lib/keys/base_keys'
|
4
|
+
require './lib/remotes/remotes'
|
5
|
+
require './lib/test_case/test_case'
|
6
|
+
require 'tmpdir'
|
7
|
+
|
8
|
+
# The Platform class contains DUT behaviors. It should define all cross-platform methods as stubs which call
|
9
|
+
# `raise_not_implemented'.
|
10
|
+
|
11
|
+
class Platform
|
12
|
+
|
13
|
+
attr_reader(:id, :screens, :roi, :keys, :remotes)
|
14
|
+
|
15
|
+
# Public: Initializes a new Platform. NOT FOR USE IN TESTS.
|
16
|
+
#
|
17
|
+
# Returns nothing.
|
18
|
+
def initialize(test_case, id: nil, config: nil)
|
19
|
+
# Default the test case attribute to a new Object. The screens initialized for syntax eval delegate to this
|
20
|
+
# attribute, so if it is nil, then they will have no methods; if it is a TestCase, then they will have all the
|
21
|
+
# test case methods in addition to their own. A blank Object is best as it will have only the screen methods.
|
22
|
+
@test_case = test_case || Object.new
|
23
|
+
@platform = nil
|
24
|
+
@model = nil
|
25
|
+
@ip_address = nil
|
26
|
+
@mac_address = nil
|
27
|
+
@id = id
|
28
|
+
@remotes = Remotes.new
|
29
|
+
@remote_type = nil
|
30
|
+
@screens = Screens.new(self)
|
31
|
+
@roi = Rois.new(self)
|
32
|
+
@key_presser = nil
|
33
|
+
@keys = nil
|
34
|
+
set_keys(BaseKeys.new)
|
35
|
+
@resolution = nil
|
36
|
+
@config = config
|
37
|
+
@initted = false
|
38
|
+
@name = nil
|
39
|
+
end
|
40
|
+
|
41
|
+
# Public: Gets the device slot.
|
42
|
+
#
|
43
|
+
# Returns the Integer device slot or nil.
|
44
|
+
def slot
|
45
|
+
@id
|
46
|
+
end
|
47
|
+
|
48
|
+
# Public: Presses keys. When no arguments are given, this returns the key presser, which defines methods for all of
|
49
|
+
# the valid keys for this platform. See examples.
|
50
|
+
#
|
51
|
+
# Examples
|
52
|
+
#
|
53
|
+
# press_key.ARROW_DOWN
|
54
|
+
# # => nil
|
55
|
+
#
|
56
|
+
# press_key.NUM_3(:sleep_time => 1.sec)
|
57
|
+
# # => nil
|
58
|
+
#
|
59
|
+
# press_key('0123', :delay_between_keys => 250.ms, :sleep_time => 5.sec)
|
60
|
+
# # => nil
|
61
|
+
#
|
62
|
+
# Returns the key presser or the Time at which the key(s) were pressed.
|
63
|
+
def press_key(*args)
|
64
|
+
if args.empty?
|
65
|
+
@key_presser
|
66
|
+
else
|
67
|
+
keys = args[0]
|
68
|
+
raise 'Key cannot be nil.' if keys.empty? || keys.nil?
|
69
|
+
args = args.fetch(1, {})
|
70
|
+
delay_between_keys = args.fetch(:delay_between_keys, 500.ms)
|
71
|
+
sleep_time = args.fetch(:sleep_time, 3.sec)
|
72
|
+
if keys.is_a?(Integer) || keys =~ /\A\d+\z/
|
73
|
+
keys = keys.to_s.chars.to_a
|
74
|
+
keys << 'select' if keys.length > 1 && keys.length < 4 && self.class <= Stb
|
75
|
+
end
|
76
|
+
unless keys.is_a?(Array)
|
77
|
+
keys = [keys]
|
78
|
+
end
|
79
|
+
logger.keypress(keys, message: %Q(Pressing keys: #{keys.join(', ')}))
|
80
|
+
json_keys = keys.each_with_index.map do |k, i|
|
81
|
+
{key: "KEY_#{k}".upcase, delayMs: (i + 1) == keys.count ? 0.ms : delay_between_keys}
|
82
|
+
end
|
83
|
+
resp = @test_case.send(:tmc_put, '/api/ir/send', json:
|
84
|
+
{devices: [@id], remote: @remote_type, irData: json_keys, script: @test_case.send(:path)})
|
85
|
+
sleep(sleep_time)
|
86
|
+
resp['stop'].to_time
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Public: Checks if the device has physical power.
|
91
|
+
#
|
92
|
+
# Returns Boolean true if device has physical power, otherwise false.
|
93
|
+
def has_power?
|
94
|
+
resp = @test_case.send(:tmc_get, "/api/power/#{@id}")
|
95
|
+
resp['state']
|
96
|
+
end
|
97
|
+
|
98
|
+
# Public: Powers on the device.
|
99
|
+
#
|
100
|
+
# Returns nothing.
|
101
|
+
def power_on
|
102
|
+
@test_case.send(:tmc_put, "/api/power/#{@id}", :json => {:state => true})
|
103
|
+
end
|
104
|
+
|
105
|
+
# Public: Powers off the device.
|
106
|
+
#
|
107
|
+
# Returns nothing.
|
108
|
+
def power_off
|
109
|
+
@test_case.send(:tmc_put, "/api/power/#{@id}", :json => {:state => false})
|
110
|
+
end
|
111
|
+
|
112
|
+
# Public: Power cycles the device.
|
113
|
+
#
|
114
|
+
# delay - Integer milliseconds to wait before powering the device on again (default: 3.sec).
|
115
|
+
#
|
116
|
+
# Returns nothing.
|
117
|
+
def power_cycle(args={})
|
118
|
+
power_off
|
119
|
+
sleep(args.fetch(:delay, 3.sec))
|
120
|
+
power_on
|
121
|
+
end
|
122
|
+
|
123
|
+
# Public: Powers on the device via remote control.
|
124
|
+
#
|
125
|
+
# Returns a Boolean true if the device powered on successfully, otherwise false.
|
126
|
+
# Raises an Exception with a "Not implemented!" message if it is not implemented by this platform.
|
127
|
+
def power_on?
|
128
|
+
raise_not_implemented(__method__)
|
129
|
+
end
|
130
|
+
|
131
|
+
# Public: Checks if the device is HD.
|
132
|
+
#
|
133
|
+
# Returns a Boolean true if the device is HD, otherwise false.
|
134
|
+
def high_def?
|
135
|
+
h = resolution[:height]
|
136
|
+
[720, 1080].include?(h)
|
137
|
+
end
|
138
|
+
|
139
|
+
# Public: Saves the last captured dut screen to disk.
|
140
|
+
#
|
141
|
+
# filename - String desired path to the file, relative to the test image folder (default: nil).
|
142
|
+
# If default, generates a filename like 'device_<id>_<timestamp>.jpg'.
|
143
|
+
# format - Symbol desired format, can be :raw, :base64 (default: nil).
|
144
|
+
#
|
145
|
+
# Returns the String path to the file relative to the test image folder, or image data in the desired format.
|
146
|
+
def save_last_screen_captured(args={})
|
147
|
+
capture_screen(args.merge(_last_captured: true))
|
148
|
+
end
|
149
|
+
|
150
|
+
# Public: Captures the dut screen to disk.
|
151
|
+
#
|
152
|
+
# filename - String desired path to the file, relative to the test image folder (default: nil).
|
153
|
+
# If default, generates a filename like 'device_<id>_<timestamp>.jpg'.
|
154
|
+
# format - Symbol desired format, can be :raw, :base64 (default: nil).
|
155
|
+
# size - Integer desired image size as a percent of original dimensions from 0 - 100 (default: nil).
|
156
|
+
# quality - Integer desired quality as a percent 0 - 100 (default: nil).
|
157
|
+
#
|
158
|
+
# Returns the String path to the file relative to the test image folder, or image data in the desired format.
|
159
|
+
def capture_screen(args={})
|
160
|
+
if self.class <= Web
|
161
|
+
# special case for web platform
|
162
|
+
meth = :selenium
|
163
|
+
else
|
164
|
+
# other platforms
|
165
|
+
meth = nil
|
166
|
+
end
|
167
|
+
format = args[:format]
|
168
|
+
filename = args[:filename]
|
169
|
+
last_captured = args.fetch(:_last_captured, false)
|
170
|
+
unless filename.nil?
|
171
|
+
logger.warn('`filename\' parameter deprecated and will be removed in future release.', tag: :DEPRECATED)
|
172
|
+
raise 'Filename must end in .jpg!' unless filename.end_with?('.jpg')
|
173
|
+
end
|
174
|
+
case meth
|
175
|
+
when :selenium
|
176
|
+
# take screenshot via selenium
|
177
|
+
resp = self.send(:selenium_request, :post, 'screenshot', {})
|
178
|
+
else
|
179
|
+
# platform default
|
180
|
+
json = get_json_for_iter.merge(path: filename, fromStash: last_captured)
|
181
|
+
json[:percentSize] = args[:size] if args.key?(:size)
|
182
|
+
json[:quality] = args[:quality] if args.key?(:quality)
|
183
|
+
resp = @test_case.send(:tmc_post, "/api/images/#{@id}", json: json)
|
184
|
+
end
|
185
|
+
if resp.nil?
|
186
|
+
if last_captured
|
187
|
+
logger.warn('No last screen capture to save', screenshot: false)
|
188
|
+
return nil
|
189
|
+
else
|
190
|
+
raise 'Failed to capture screen!'
|
191
|
+
end
|
192
|
+
end
|
193
|
+
path = resp['path'].gsub('\\', '/') # just in case
|
194
|
+
if format.nil?
|
195
|
+
path
|
196
|
+
else
|
197
|
+
resp = @test_case.send(:tmc_get, "/api/images/#{path}?job=#{@test_case.job}&test=#{@test_case.id}", attr: :body)
|
198
|
+
if format == :base64
|
199
|
+
Base64.encode64(resp)
|
200
|
+
elsif format == :raw
|
201
|
+
resp
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
# Public: Uploads a screenshot to the reporting system.
|
207
|
+
#
|
208
|
+
# filename - String path to an existing screenshot (default: nil).
|
209
|
+
# If default, a new screenshot will be captured.
|
210
|
+
#
|
211
|
+
# Returns nothing.
|
212
|
+
def upload_screenshot(args={})
|
213
|
+
case test_case.options[:reporting_mode]
|
214
|
+
when 'twb' # send it to twb
|
215
|
+
twb_post_screenshot(:ss_filename => args[:filename])
|
216
|
+
else # send it to SWORD
|
217
|
+
sword_attach_screenshot("Screenshot from TMC slot #{@id}", nil, args[:filename])
|
218
|
+
end
|
219
|
+
end
|
220
|
+
|
221
|
+
# Public: Checks if the device is generic.
|
222
|
+
#
|
223
|
+
# Returns a Boolean true if the device is generic, otherwise false.
|
224
|
+
def is_generic?
|
225
|
+
@platform.nil?
|
226
|
+
end
|
227
|
+
|
228
|
+
# Public: Gets the current device resolution, retrieving it first if necessary.
|
229
|
+
#
|
230
|
+
# update - Boolean indicating whether to force update of resolution (default: false).
|
231
|
+
#
|
232
|
+
# Returns the resolution as a Hash of :width, :height.
|
233
|
+
def resolution(update: false)
|
234
|
+
if @resolution.nil? || update
|
235
|
+
resp = @test_case.send(:tmc_get, "/api/video/info?devices=#{@id}")
|
236
|
+
video_inf = resp['videoInfo'][0]
|
237
|
+
@resolution = {width: video_inf['width'], height: video_inf['height']}
|
238
|
+
end
|
239
|
+
@resolution
|
240
|
+
end
|
241
|
+
|
242
|
+
# Public: Resets video on the dut. This should be called after changing resolution on a device.
|
243
|
+
#
|
244
|
+
# Returns nothing.
|
245
|
+
def reset_video
|
246
|
+
logger.info("Resetting video on slot #{@id}")
|
247
|
+
@test_case.send(:tmc_put, "/api/video/reset/#{@id}", :json => {})
|
248
|
+
end
|
249
|
+
|
250
|
+
# Public: Gets the specified SNMP object from the dut.
|
251
|
+
#
|
252
|
+
# object - String object OID to retrieve.
|
253
|
+
# port - Integer SNMP port (default: 161).
|
254
|
+
# trap_port - Integer SNMP trap port (default: 162).
|
255
|
+
# community - String SNMP community string (default: 'public').
|
256
|
+
# write_community - String SNMP community string (default: 'public').
|
257
|
+
# version - Symbol SNMP version (default: :SNMPv2c).
|
258
|
+
# timeout - Integer timeout in seconds (default: 1).
|
259
|
+
# retries - Integer retries (default: 5).
|
260
|
+
# transport - Class SNMP transport (default: UDPTransport).
|
261
|
+
# max_recv_bytes - Integer maximum receive bytes (default: 8000).
|
262
|
+
# use_IPv6 - Boolean indicating whether to use IPv6 (default: false).
|
263
|
+
# True if :host is formatted like an IPv6 address.
|
264
|
+
#
|
265
|
+
# Returns a String of value retrieved.
|
266
|
+
def snmp_get(object, args={})
|
267
|
+
@test_case.snmp_get(ip_address, object, args)
|
268
|
+
end
|
269
|
+
|
270
|
+
# Public: Sets the specified SNMP object on the dut.
|
271
|
+
#
|
272
|
+
# object - String object OID to set.
|
273
|
+
# value - String value to set.
|
274
|
+
# port - Integer SNMP port (default: 161).
|
275
|
+
# trap_port - Integer SNMP trap port (default: 162).
|
276
|
+
# community - String SNMP community string (default: 'public').
|
277
|
+
# write_community - String SNMP community string (default: 'public').
|
278
|
+
# version - Symbol SNMP version (default: :SNMPv2c).
|
279
|
+
# timeout - Integer timeout in seconds (default: 1).
|
280
|
+
# retries - Integer retries (default: 5).
|
281
|
+
# transport - Class SNMP transport (default: UDPTransport).
|
282
|
+
# max_recv_bytes - Integer maximum receive bytes (default: 8000).
|
283
|
+
# use_IPv6 - Boolean indicating whether to use IPv6 (default: false).
|
284
|
+
# True if :host is formatted like an IPv6 address.
|
285
|
+
#
|
286
|
+
# Returns the result.
|
287
|
+
def snmp_set(object, value, args={})
|
288
|
+
@test_case.snmp_set(ip_address, object, value, args)
|
289
|
+
end
|
290
|
+
|
291
|
+
# Public: Gets the MAC address for the dut.
|
292
|
+
# Format is xx:xx:xx:xx:xx:xx
|
293
|
+
#
|
294
|
+
# Returns String MAC address.
|
295
|
+
def mac_address
|
296
|
+
if @mac_address.nil? && !config['macAddress'].nil?
|
297
|
+
@mac_address = config['macAddress']
|
298
|
+
if @mac_address.length.eql?(12)
|
299
|
+
# add separator
|
300
|
+
@mac_address = @mac_address.split(/(\w{2})/).select{|x| !x.empty?}.join(':')
|
301
|
+
end
|
302
|
+
end
|
303
|
+
@mac_address
|
304
|
+
end
|
305
|
+
|
306
|
+
# Public: Gets the IP address for the dut.
|
307
|
+
# Format is xxx.xxx.xxx.xxx
|
308
|
+
#
|
309
|
+
# Returns String IP address.
|
310
|
+
def ip_address
|
311
|
+
if @ip_address.nil?
|
312
|
+
@ip_address = config['ipAddress']
|
313
|
+
end
|
314
|
+
@ip_address
|
315
|
+
end
|
316
|
+
|
317
|
+
# Public: Gets the current device resolution width.
|
318
|
+
#
|
319
|
+
# Returns the Integer width in pixels.
|
320
|
+
def width
|
321
|
+
resolution[:width]
|
322
|
+
end
|
323
|
+
|
324
|
+
# Public: Gets the current device resolution height.
|
325
|
+
#
|
326
|
+
# Returns the Integer height in pixels.
|
327
|
+
def height
|
328
|
+
resolution[:height]
|
329
|
+
end
|
330
|
+
|
331
|
+
# Public: Gets the platform name for the dut.
|
332
|
+
#
|
333
|
+
# Returns String platform.
|
334
|
+
def platform
|
335
|
+
if @platform.nil?
|
336
|
+
@platform = config['platform']
|
337
|
+
end
|
338
|
+
@platform
|
339
|
+
end
|
340
|
+
|
341
|
+
# Public: Gets the current device model.
|
342
|
+
#
|
343
|
+
# Returns the String model name.
|
344
|
+
def model
|
345
|
+
if @model.nil?
|
346
|
+
@model = config['model']
|
347
|
+
end
|
348
|
+
@model
|
349
|
+
end
|
350
|
+
|
351
|
+
# Public: Gets the current device entitlements.
|
352
|
+
#
|
353
|
+
# Returns an Array of String entitlement package names.
|
354
|
+
def entitlements
|
355
|
+
if @entitlements.nil?
|
356
|
+
@entitlements = config['entitlements']
|
357
|
+
end
|
358
|
+
@entitlements
|
359
|
+
end
|
360
|
+
|
361
|
+
# Public : Gets the name for the dut.
|
362
|
+
#
|
363
|
+
# Returns the String device name.
|
364
|
+
def name
|
365
|
+
if @name.nil?
|
366
|
+
@name = config['name']
|
367
|
+
end
|
368
|
+
@name
|
369
|
+
end
|
370
|
+
|
371
|
+
# Public: Checks if the device type is one of those given.
|
372
|
+
#
|
373
|
+
# device_types - Splat Array of String or Symbol device types to check.
|
374
|
+
#
|
375
|
+
# Returns a Boolean true if the device type is in the provided list, otherwise false.
|
376
|
+
def device_type_is?(*device_types)
|
377
|
+
device_types.include?(model.to_sym)
|
378
|
+
end
|
379
|
+
|
380
|
+
# Public: Checks if the device type is NOT one of those given.
|
381
|
+
#
|
382
|
+
# device_types - Splat Array of String or Symbol device types to check.
|
383
|
+
#
|
384
|
+
# Returns a Boolean true if the device type is NOT in the provided list, otherwise false.
|
385
|
+
def device_type_not?(*device_types)
|
386
|
+
!device_type_is?(*device_types)
|
387
|
+
end
|
388
|
+
|
389
|
+
# Public: Gets the device software version.
|
390
|
+
#
|
391
|
+
# Returns the String software version.
|
392
|
+
def software_version
|
393
|
+
# Search for a software version defined in script options, in order of specificity.
|
394
|
+
# Try the device type first.
|
395
|
+
device_type_key = "#{platform}_software_version".downcase.to_sym
|
396
|
+
if @test_case.options.include?(device_type_key)
|
397
|
+
@test_case.options[:build_code] = @test_case.options[device_type_key]
|
398
|
+
end
|
399
|
+
# Next, try the platform hierarchy.
|
400
|
+
cls = self.class
|
401
|
+
loop do
|
402
|
+
platform_key = "#{cls.name}_software_version".downcase.to_sym
|
403
|
+
if @test_case.options.include?(platform_key)
|
404
|
+
@test_case.options[:build_code] = @test_case.options[platform_key]
|
405
|
+
break
|
406
|
+
end
|
407
|
+
break if cls == Platform || cls == cls.superclass
|
408
|
+
cls = cls.superclass
|
409
|
+
end
|
410
|
+
# Next, try the base app_version.
|
411
|
+
if @test_case.options.include?(:software_version)
|
412
|
+
@test_case.options[:build_code] = @test_case.options[:software_version]
|
413
|
+
end
|
414
|
+
# Finally, default to build_code.
|
415
|
+
@test_case.options[:build_code]
|
416
|
+
end
|
417
|
+
|
418
|
+
# Deprecated: Use software_version instead.
|
419
|
+
def app_version
|
420
|
+
software_version
|
421
|
+
end
|
422
|
+
|
423
|
+
# Public: Gets the DUT username from test data.
|
424
|
+
# Expected format: "dut_credentials": {1: {username: 'foo', ...}}
|
425
|
+
#
|
426
|
+
# Returns the String username.
|
427
|
+
def username
|
428
|
+
creds[:username]
|
429
|
+
end
|
430
|
+
|
431
|
+
# Public: Gets the DUT password from test data.
|
432
|
+
# Expected format: "dut_credentials": {1: {..., password: 'baz'}}
|
433
|
+
#
|
434
|
+
# Returns the String password.
|
435
|
+
def password
|
436
|
+
creds[:password]
|
437
|
+
end
|
438
|
+
|
439
|
+
# Public: Gets the parental controls PIN. Must be implemented by each Platform subclass.
|
440
|
+
#
|
441
|
+
# Returns the String parental controls PIN.
|
442
|
+
def parental_controls_pin
|
443
|
+
$parental_controls_pin || '0000'
|
444
|
+
end
|
445
|
+
|
446
|
+
# Public: Gets the alternate parental controls PIN. Must be implemented by each Platform subclass.
|
447
|
+
#
|
448
|
+
# Returns the String alternate parental controls PIN.
|
449
|
+
def alt_parental_controls_pin
|
450
|
+
$alt_parental_controls_pin || '1111'
|
451
|
+
end
|
452
|
+
|
453
|
+
|
454
|
+
# Public: Initializes the device. Must be implemented by each Platform subclass.
|
455
|
+
#
|
456
|
+
# block -- Block that performs initialization.
|
457
|
+
#
|
458
|
+
# Returns a Boolean true if the device was initialized, otherwise false.
|
459
|
+
def init?(&block)
|
460
|
+
return true if @initted # no-op if already initted
|
461
|
+
unless has_power?
|
462
|
+
power_on # platforms should override this, call super, and add whatever wait/verification is needed
|
463
|
+
end
|
464
|
+
@initted = block.call
|
465
|
+
end
|
466
|
+
|
467
|
+
# Public: Checks if audio is present on the device.
|
468
|
+
#
|
469
|
+
# threshold - Integer threshold 0 - 32k audio level must exceed to be considered present (default: 0).
|
470
|
+
# sample_length - Integer milliseconds to sample audio (default: 5000).
|
471
|
+
#
|
472
|
+
# Returns a Boolean true if audio is present, otherwise false.
|
473
|
+
def audio_present?(args={})
|
474
|
+
threshold = args.fetch(:threshold, 0)
|
475
|
+
lvl = audio_level(args)
|
476
|
+
lvl > threshold
|
477
|
+
end
|
478
|
+
|
479
|
+
# Public: Gets audio level from the device.
|
480
|
+
#
|
481
|
+
# sample_length - Integer milliseconds to sample audio (default: 5000).
|
482
|
+
# threshold - Integer unit of PCM to return no audio. Humans can't hear under 1000 (default: 100)
|
483
|
+
#
|
484
|
+
# Returns the Integer peak audio level 0 - 32k, where 0 indicates no audio,
|
485
|
+
# or nil if the level could not be determined.
|
486
|
+
def audio_level(args={})
|
487
|
+
lvls = audio_levels(args)
|
488
|
+
lev = [lvls[:left], lvls[:right]].max
|
489
|
+
(lev > args.fetch(:threshold, 100)) ? lev : 0
|
490
|
+
end
|
491
|
+
|
492
|
+
# Public: Gets left channel audio level from the device.
|
493
|
+
#
|
494
|
+
# sample_length - Integer milliseconds to sample audio (default: 5000).
|
495
|
+
#
|
496
|
+
# Returns the Integer peak audio level of the left channel 0 - 32k, where 0 indicates no audio,
|
497
|
+
# or nil if the level could not be determined.
|
498
|
+
def audio_level_left(args={})
|
499
|
+
audio_levels(args)[:left]
|
500
|
+
end
|
501
|
+
|
502
|
+
# Public: Gets right channel audio level from the device.
|
503
|
+
#
|
504
|
+
# sample_length - Integer milliseconds to sample audio (default: 5000).
|
505
|
+
#
|
506
|
+
# Returns the Integer peak audio level of the right channel 0 - 32k, where 0 indicates no audio,
|
507
|
+
# or nil if the level could not be determined.
|
508
|
+
def audio_level_right(args={})
|
509
|
+
audio_levels(args)[:right]
|
510
|
+
end
|
511
|
+
|
512
|
+
# Public: Captures audio on the device.
|
513
|
+
#
|
514
|
+
# duration - Integer total milliseconds to capture audio.
|
515
|
+
# key - String name or Array of keys to press to trigger audio capture (default: nil).
|
516
|
+
# If default, no keys will be pressed.
|
517
|
+
# delay - Integer milliseconds to delay after pressing key and before starting frame capture (default: 0).
|
518
|
+
# cleanup - Boolean indicating whether to automatically clean up audio during teardown (default: true).
|
519
|
+
#
|
520
|
+
# Returns a Hash with the following keys:
|
521
|
+
# :audio - String path to audio file.
|
522
|
+
# :start_time - Time at which audio capture began.
|
523
|
+
def capture_audio(duration, args={})
|
524
|
+
key = args[:key]
|
525
|
+
delay = args.fetch(:delay, 0)
|
526
|
+
cleanup = args.fetch(:cleanup, true)
|
527
|
+
press_key(key) unless key.nil?
|
528
|
+
ret = {audio: nil, start_time: Time.now}
|
529
|
+
sleep(delay) if delay > 0
|
530
|
+
json = get_json_for_iter.merge(block: true, durationMs: duration)
|
531
|
+
resp = @test_case.send(:tmc_post, "/api/audio/record/#{id}", json: json)
|
532
|
+
ret[:audio] = resp['filename']
|
533
|
+
if cleanup && !ret[:audio].nil?
|
534
|
+
@test_case.add_teardown('Cleaning up captured audio') do
|
535
|
+
delete_files = [ ret[:audio] ]
|
536
|
+
@test_case.send(:tmc_delete, '/api/audio', json: get_json_for_test.merge(files: delete_files))
|
537
|
+
end
|
538
|
+
end
|
539
|
+
ret
|
540
|
+
end
|
541
|
+
|
542
|
+
# Public: Records audio on the device.
|
543
|
+
#
|
544
|
+
# duration - Integer total milliseconds to record audio. Required if block or window is true (default: nil).
|
545
|
+
# block - Boolean block until the recording is finished (default: true).
|
546
|
+
# window - Boolean limit recording length to the specified duration (default: true).
|
547
|
+
# format - String desired audio format, can be 'mp3', 'wav', 'wma' (default: 'mp3').
|
548
|
+
#
|
549
|
+
# Returns a Hash with the following keys:
|
550
|
+
# :id - String unique identifier for the recording.
|
551
|
+
# :path - String path to the recording on the server.
|
552
|
+
# :start_time - Time at which recording began.
|
553
|
+
# :end_time - Time at which recording stopped.
|
554
|
+
def record_audio(duration: nil, block: true, window: true, format: 'mp3')
|
555
|
+
record_media(:audio, duration, block, window, format)
|
556
|
+
end
|
557
|
+
|
558
|
+
# Public: Stops audio recording on the device.
|
559
|
+
#
|
560
|
+
# id - String unique identifier for the recording to stop.
|
561
|
+
#
|
562
|
+
# Returns a Hash with the following keys:
|
563
|
+
# :id - String unique identifier for the recording.
|
564
|
+
# :path - String path to the recording on the server.
|
565
|
+
# :start_time - Time at which recording began.
|
566
|
+
# :end_time - Time at which recording stopped.
|
567
|
+
def stop_audio(id)
|
568
|
+
stop_media(:audio, id)
|
569
|
+
end
|
570
|
+
|
571
|
+
# Public: Records video on the device.
|
572
|
+
#
|
573
|
+
# duration - Integer total milliseconds to record video. Required if block or window is true (default: nil).
|
574
|
+
# block - Boolean block until the recording is finished (default: true).
|
575
|
+
# window - Boolean limit recording length to the specified duration (default: true).
|
576
|
+
# format - String desired video format, can be 'mp4', 'avi', 'wmv' (default: 'mp4').
|
577
|
+
#
|
578
|
+
# Returns a Hash with the following keys:
|
579
|
+
# :id - String unique identifier for the recording.
|
580
|
+
# :path - String path to the recording on the server.
|
581
|
+
# :start_time - Time at which recording began.
|
582
|
+
# :end_time - Time at which recording stopped.
|
583
|
+
def record_video(duration: nil, block: true, window: true, format: 'mp4')
|
584
|
+
record_media(:video, duration, block, window, format)
|
585
|
+
end
|
586
|
+
|
587
|
+
# Public: Stops video recording on the device.
|
588
|
+
#
|
589
|
+
# id - String unique identifier for the recording to stop.
|
590
|
+
#
|
591
|
+
# Returns a Hash with the following keys:
|
592
|
+
# :id - String unique identifier for the recording.
|
593
|
+
# :path - String path to the recording on the server.
|
594
|
+
# :start_time - Time at which recording began.
|
595
|
+
# :end_time - Time at which recording stopped.
|
596
|
+
def stop_video(id)
|
597
|
+
stop_media(:video, id)
|
598
|
+
end
|
599
|
+
|
600
|
+
# Public: Captures frames on the device.
|
601
|
+
#
|
602
|
+
# duration - Integer total milliseconds to capture frames.
|
603
|
+
# key - String name or Array of keys to press to trigger audio capture (default: nil).
|
604
|
+
# If default, no keys will be pressed.
|
605
|
+
# delay - Integer milliseconds to delay after pressing key and before starting frame capture (default: 0).
|
606
|
+
# cleanup - Boolean indicating whether to automatically clean up frames during teardown (default: true).
|
607
|
+
# If true, all frames in the output which have :keep => false will be deleted at the end of the test.
|
608
|
+
#
|
609
|
+
# Returns a Hash with the following keys:
|
610
|
+
# :frames - Array of captured frames, each being a Hash with the following keys:
|
611
|
+
# :filename - String full path to the frame on the server.
|
612
|
+
# :capturedAt - Time at which the frame was captured.
|
613
|
+
# :keep - Boolean indicating whether to keep the frame if cleanup is true. Initializes false.
|
614
|
+
# :start_time - Time at which frame capture began.
|
615
|
+
def capture_frames(duration, args={})
|
616
|
+
key = args[:key]
|
617
|
+
cleanup = args.fetch(:cleanup, true)
|
618
|
+
frames = []
|
619
|
+
if cleanup
|
620
|
+
@test_case.add_teardown('Cleaning up captured frames', frames) do |frame_arr|
|
621
|
+
delete_files = frame_arr.reject { |frm| frm[:keep] }.map { |frm| frm[:filename] }
|
622
|
+
json = get_json_for_test.merge(files: delete_files)
|
623
|
+
@test_case.send(:tmc_delete, '/api/images', json: json)
|
624
|
+
end
|
625
|
+
end
|
626
|
+
# Capture frames
|
627
|
+
delay = args.fetch(:delay, 0)
|
628
|
+
ret = {}
|
629
|
+
if key.nil?
|
630
|
+
# this is the best we can do since there is no key. as long as the script runs locally on the TMC,
|
631
|
+
# we do not need to worry about clock drift issues
|
632
|
+
ret[:start_time] = Time.now
|
633
|
+
else
|
634
|
+
# use the key press time
|
635
|
+
ret[:start_time] = press_key(key, sleep_time: 0) unless key.nil?
|
636
|
+
end
|
637
|
+
if delay > 0
|
638
|
+
sleep(delay)
|
639
|
+
end
|
640
|
+
json = get_json_for_iter.merge(durationMs: duration)
|
641
|
+
result = @test_case.send(:tmc_post, "/api/images/record/#{@id}", json: json)
|
642
|
+
raise 'Failed to capture frames!' if result.nil?
|
643
|
+
#ret[:start_time] ||= @test_case.to_time(result['startTime']) # use this start time ONLY if no key and no delay
|
644
|
+
result.fetch('images').each do |frm|
|
645
|
+
capture_time = frm.fetch('captureTime')
|
646
|
+
capture_time = capture_time / 1000.0 unless capture_time.is_a?(String)
|
647
|
+
frames << {filename: frm.fetch('path'), capturedAt: @test_case.to_time(capture_time), keep: false}
|
648
|
+
end
|
649
|
+
ret[:frames] = frames
|
650
|
+
# Calculate average FPS and maximum/average margin of error
|
651
|
+
max_i, max = [0, 0]
|
652
|
+
frame_deltas = frames.each_with_index.map do |f, i|
|
653
|
+
if i == 0
|
654
|
+
delta = @test_case.get_time_delta(ret[:start_time], f[:capturedAt])
|
655
|
+
else
|
656
|
+
delta = @test_case.get_time_delta(frames[i - 1][:capturedAt], f[:capturedAt])
|
657
|
+
end
|
658
|
+
if delta > max
|
659
|
+
max_i, max = [i, delta]
|
660
|
+
end
|
661
|
+
delta
|
662
|
+
end
|
663
|
+
deltas_sum = frame_deltas.inject(0) {|sum, x| sum + x}
|
664
|
+
sec = deltas_sum / 1000.0
|
665
|
+
avg_fps = frames.count / sec
|
666
|
+
avg_delta = deltas_sum / frame_deltas.count
|
667
|
+
logger.debug("Captured #{frames.count} frames in #{sec} s [avg frames/s: #{avg_fps}, " +
|
668
|
+
"max error: #{max} ms (frame #{max_i}), avg error: #{avg_delta} ms]")
|
669
|
+
ret
|
670
|
+
end
|
671
|
+
|
672
|
+
# Public: Locks the specified resource to perform an action.
|
673
|
+
#
|
674
|
+
# resource - String resource to lock.
|
675
|
+
# timeout - Integer lock timeout in milliseconds.
|
676
|
+
# block - Block to perform..
|
677
|
+
#
|
678
|
+
# Returns the result of the specified block.
|
679
|
+
def lock(resource, timeout, &block)
|
680
|
+
@test_case.lock(resource, timeout, device: @id, &block)
|
681
|
+
end
|
682
|
+
|
683
|
+
# Public: Checks if the current remote type matches the given type.
|
684
|
+
#
|
685
|
+
# type - String remote type to check. Available remotes can be retrieved from `dut.remotes'.
|
686
|
+
#
|
687
|
+
# Returns a Boolean true if the remote type matches, otherwise false.
|
688
|
+
def remote_type_is?(type)
|
689
|
+
if @remote_type.nil?
|
690
|
+
@remote_type = config['remoteType']
|
691
|
+
end
|
692
|
+
@remote_type == type
|
693
|
+
end
|
694
|
+
|
695
|
+
# Public: Sets the remote type for the dut. This persists only for the current script. To configure the remote type
|
696
|
+
# permanently, the device configuration must be updated.
|
697
|
+
#
|
698
|
+
# type - String remote type to set. Available remotes can be retrieved from `dut.remotes'.
|
699
|
+
#
|
700
|
+
# Returns nothing.
|
701
|
+
def remote_type=(type)
|
702
|
+
unless remote_type_is?(type)
|
703
|
+
@remote_type = type
|
704
|
+
end
|
705
|
+
end
|
706
|
+
|
707
|
+
private
|
708
|
+
|
709
|
+
# Internal: Gets DUT credentials from test data.
|
710
|
+
def creds
|
711
|
+
if @creds.nil?
|
712
|
+
creds = @test_case.test_data.fetch(:dut_credentials, []).find {|c| c[0] == @id}
|
713
|
+
if creds.nil?
|
714
|
+
return {}
|
715
|
+
else
|
716
|
+
@creds = creds[1]
|
717
|
+
end
|
718
|
+
end
|
719
|
+
@creds
|
720
|
+
end
|
721
|
+
|
722
|
+
# Internal: Starts recording the specified media type.
|
723
|
+
def record_media(type, duration, block, window, format)
|
724
|
+
json = get_json_for_iter
|
725
|
+
json[:durationMs] = duration unless duration.nil?
|
726
|
+
json[:block] = block
|
727
|
+
json[:window] = window
|
728
|
+
json[:format] = format unless format.nil?
|
729
|
+
result = @test_case.send(:tmc_post, "/api/#{type}/record/#{@id}", json: json)
|
730
|
+
ret = @test_case.rubify(result)
|
731
|
+
begin
|
732
|
+
# always stop recording during teardown
|
733
|
+
if type == :video
|
734
|
+
recordings_attr = :@video_recording_ids
|
735
|
+
elsif type == :audio
|
736
|
+
recordings_attr = :@audio_recording_ids
|
737
|
+
else
|
738
|
+
raise 'Invalid media type!'
|
739
|
+
end
|
740
|
+
@test_case.instance_variable_get(recordings_attr)[ret[:id]] = @id
|
741
|
+
if block
|
742
|
+
log_and_upload_media(type, ret)
|
743
|
+
end
|
744
|
+
ensure
|
745
|
+
if block
|
746
|
+
json = get_json_for_test.merge(files: [ret[:path]])
|
747
|
+
@test_case.send(:tmc_delete, "/api/#{type}", json: json)
|
748
|
+
end
|
749
|
+
end
|
750
|
+
ret
|
751
|
+
end
|
752
|
+
|
753
|
+
# Internal: Stops recording the specified media.
|
754
|
+
def stop_media(type, id)
|
755
|
+
result = @test_case.send(:tmc_delete, "/api/#{type}/record/#{@id}", json: {id: id})
|
756
|
+
ret = @test_case.rubify(result)
|
757
|
+
begin
|
758
|
+
if type == :video
|
759
|
+
recordings_attr = :@video_recording_ids
|
760
|
+
elsif type == :audio
|
761
|
+
recordings_attr = :@audio_recording_ids
|
762
|
+
else
|
763
|
+
raise 'Invalid media type!'
|
764
|
+
end
|
765
|
+
@test_case.instance_variable_get(recordings_attr).delete(id)
|
766
|
+
log_and_upload_media(type, ret)
|
767
|
+
ensure
|
768
|
+
json = get_json_for_test.merge(files: [ret[:path]])
|
769
|
+
@test_case.send(:tmc_delete, "/api/#{type}", json: json)
|
770
|
+
end
|
771
|
+
ret
|
772
|
+
end
|
773
|
+
|
774
|
+
# Internal: Logs recording details and uploads the specified media.
|
775
|
+
def log_and_upload_media(type, response)
|
776
|
+
path = response[:path]
|
777
|
+
full_path = response[:full_path]
|
778
|
+
download_path = nil
|
779
|
+
name = File.join('tmc', 'jobs', @test_case.job, @test_case.id.to_s, File.basename(path))
|
780
|
+
unless File.exists?(full_path)
|
781
|
+
# The file does not exist locally. Download it.
|
782
|
+
media_resource = "/api/#{type}/play/#{path.gsub('\\', '/')}?job=#{@test_case.job}&test=#{@test_case.id}"
|
783
|
+
data = @test_case.send(:tmc_get, media_resource, :attr => :body)
|
784
|
+
dl_dir = Dir.mktmpdir
|
785
|
+
download_path = File.join(dl_dir, File.basename(path))
|
786
|
+
File.open(download_path, 'wb') {|f| f.write(data)}
|
787
|
+
end
|
788
|
+
begin
|
789
|
+
response[:url] = @test_case.aws_upload_s3(ENV['AWS_DEFAULT_BUCKET'], name, download_path || full_path)
|
790
|
+
duration_ms = @test_case.get_time_delta(response[:start_time], response[:end_time])
|
791
|
+
logger.info("Recorded #{duration_ms / 1000.0} seconds of #{type}", screen_image: response[:url])
|
792
|
+
ensure
|
793
|
+
unless download_path.nil?
|
794
|
+
File.delete(download_path)
|
795
|
+
end
|
796
|
+
end
|
797
|
+
end
|
798
|
+
|
799
|
+
# Internal: Calls the test case sleep method.
|
800
|
+
def sleep(*args)
|
801
|
+
test_case.sleep(*args)
|
802
|
+
end
|
803
|
+
|
804
|
+
# Internal: Gets a handle to the test case logger.
|
805
|
+
def logger
|
806
|
+
test_case.send(:logger_for_device, @id)
|
807
|
+
end
|
808
|
+
|
809
|
+
# Internal: Gets device config.
|
810
|
+
def config
|
811
|
+
if @config.nil?
|
812
|
+
resp = @test_case.send(:tmc_get, "/api/config/hardware/devices?devices=#{@id}")
|
813
|
+
@config = resp['devices'].first
|
814
|
+
end
|
815
|
+
@config
|
816
|
+
end
|
817
|
+
|
818
|
+
# Internal: Gets JSON for job and test.
|
819
|
+
def get_json_for_test
|
820
|
+
{job: @test_case.job, test: @test_case.id}
|
821
|
+
end
|
822
|
+
|
823
|
+
# Internal: Gets JSON for job, test, and iteration.
|
824
|
+
def get_json_for_iter
|
825
|
+
get_json_for_test.merge(iteration: @test_case.iteration)
|
826
|
+
end
|
827
|
+
|
828
|
+
# Internal: Gets audio levels from the device.
|
829
|
+
#
|
830
|
+
# sample_length - Integer milliseconds to sample audio (default: 5000).
|
831
|
+
#
|
832
|
+
# Returns a Hash of the peak audio levels with keys :left and :right.
|
833
|
+
def audio_levels(args={})
|
834
|
+
duration = args.fetch(:sample_length, 5.sec)
|
835
|
+
resp = @test_case.send(:tmc_get, "/api/audio/levels/#{@id}?sampleLength=#{duration.to_f / 1000}")
|
836
|
+
lvls = {
|
837
|
+
left: resp['leftPeak'].abs,
|
838
|
+
right: resp['rightPeak'].abs
|
839
|
+
}
|
840
|
+
logger.debug("Got audio levels [ L: #{lvls[:left]}, R: #{lvls[:right]} ]", tag: 'AUDIO')
|
841
|
+
lvls
|
842
|
+
end
|
843
|
+
|
844
|
+
# Internal: Raises a "not implemented" exception for the given method.
|
845
|
+
#
|
846
|
+
# Returns nothing.
|
847
|
+
# Raises an Exception with a "not implemented" message.
|
848
|
+
def raise_not_implemented(method)
|
849
|
+
raise "(#{self.class}.#{method} not implemented!"
|
850
|
+
end
|
851
|
+
|
852
|
+
# Internal: Exposes the TestCase object.
|
853
|
+
#
|
854
|
+
# Returns the TestCase object.
|
855
|
+
def test_case
|
856
|
+
@test_case
|
857
|
+
end
|
858
|
+
|
859
|
+
# Internal: Exposes the service reference.
|
860
|
+
#
|
861
|
+
# Returns the service reference.
|
862
|
+
def service
|
863
|
+
@test_case.send(:service)
|
864
|
+
end
|
865
|
+
|
866
|
+
# Internal: Assigns the keys instance.
|
867
|
+
#
|
868
|
+
# Returns nothing.
|
869
|
+
def set_keys(keys_obj)
|
870
|
+
if @key_presser.nil?
|
871
|
+
@key_presser = Class.new.new
|
872
|
+
@key_presser.instance_variable_set(:@kp_dut, self)
|
873
|
+
end
|
874
|
+
@keys = keys_obj
|
875
|
+
@keys.instance_variable_get(:@enum).each do |k,v|
|
876
|
+
press_this_key = Proc.new do |*a|
|
877
|
+
kwargs = {:sleep_time => 0.sec}.update(a.last || {})
|
878
|
+
@kp_dut.press_key(v, kwargs)
|
879
|
+
end
|
880
|
+
@key_presser.class.send(:define_method, k, press_this_key)
|
881
|
+
end
|
882
|
+
end
|
883
|
+
|
884
|
+
end
|