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,138 @@
|
|
1
|
+
require './lib/roi/roi'
|
2
|
+
require './lib/mixins/can_have_special_methods'
|
3
|
+
|
4
|
+
# The ColorRoi class defines a color Roi and its methods
|
5
|
+
|
6
|
+
class ColorRoi < Roi
|
7
|
+
include CanHaveSpecialMethods
|
8
|
+
|
9
|
+
attr_accessor(:red, :green, :blue, :similarity)
|
10
|
+
|
11
|
+
# Public: Initializes a color Roi.
|
12
|
+
#
|
13
|
+
# dut - Platform (or subclass) instance to which this Roi belongs.
|
14
|
+
# x - Integer x coordinate (default: nil).
|
15
|
+
# y - Integer y coordinate (default: nil).
|
16
|
+
# width - Integer width (default: nil).
|
17
|
+
# height - Integer height (default: nil).
|
18
|
+
# rectangle - Hash defining rectangle with keys :x, :y, :width, :height (default: nil).
|
19
|
+
# element - Hash same as rectangle (default: nil).
|
20
|
+
# red - Integer red value 0 - 255 (default: nil). Required unless rgb is given.
|
21
|
+
# green - Integer green value 0 - 255 (default: nil). Required unless rgb is given.
|
22
|
+
# blue - Integer blue value 0 - 255 (default: nil). Required unless rgb is given.
|
23
|
+
# rgb - Integer Array of 3 values (0 - 255) for red, green, blue (default: nil).
|
24
|
+
# Required unless red, green, blue are given.
|
25
|
+
# similarity - Integer color similarity threshold 0 - 100 (default: 85).
|
26
|
+
# ref_img - String path to reference image (default: nil).
|
27
|
+
#
|
28
|
+
# Returns nothing.
|
29
|
+
def initialize(dut, args={})
|
30
|
+
super(dut, args)
|
31
|
+
if args[:rgb].nil?
|
32
|
+
self.rgb=([args.fetch(:red), args.fetch(:green), args.fetch(:blue)])
|
33
|
+
else
|
34
|
+
self.rgb=(args[:rgb])
|
35
|
+
end
|
36
|
+
@similarity = args.fetch(:similarity, 85)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Public: Gets RGB value.
|
40
|
+
#
|
41
|
+
# Returns Integer Array of 3 values (0 - 255) for red, green, blue.
|
42
|
+
def rgb
|
43
|
+
[@red, @green, @blue]
|
44
|
+
end
|
45
|
+
|
46
|
+
# Public: Sets RGB value.
|
47
|
+
#
|
48
|
+
# rgb - Integer Array of 3 values (0 - 255) for red, green, blue.
|
49
|
+
#
|
50
|
+
# Returns nothing.
|
51
|
+
def rgb=(rgb)
|
52
|
+
@red = rgb[0]
|
53
|
+
@green = rgb[1]
|
54
|
+
@blue = rgb[2]
|
55
|
+
end
|
56
|
+
|
57
|
+
# Public: Gets color Roi info.
|
58
|
+
#
|
59
|
+
# Returns a tidy String with color Roi info.
|
60
|
+
def info
|
61
|
+
"#{super} RGB=#{@red}:#{@green}:#{@blue} Similarity=#{@similarity}"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Public: Checks if color is displayed as defined in the given ROI.
|
65
|
+
# Corresponds to: api_is_color_displayed?
|
66
|
+
#
|
67
|
+
# key - String name of key to press to trigger evaluation (default: nil).
|
68
|
+
# If default, no keys will be pressed.
|
69
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
70
|
+
# timeout - Integer total milliseconds to allow before timing out (default: 0).
|
71
|
+
# verifies_for - Integer total milliseconds for which the ROI must verify in order to succeed (default: 0).
|
72
|
+
# If default, the ROI must only verify once.
|
73
|
+
# priority - Symbol representing evaluation priority used to throttle CPU usage (default: :normal):
|
74
|
+
# :critical - Sleep 10 milliseconds between intensive tasks (should be used sparingly).
|
75
|
+
# :high - Sleep 100 milliseconds between intensive tasks.
|
76
|
+
# :normal - Sleep 1 second between intensive tasks (default).
|
77
|
+
# :low - Sleep 10 seconds between intensive tasks.
|
78
|
+
# :background - Sleep 1 minute between intensive tasks (should be used sparingly).
|
79
|
+
# log_every - Integer interval in milliseconds between logs (default: 1000).
|
80
|
+
#
|
81
|
+
# Returns a Boolean true if color is displayed before the timeout, otherwise false.
|
82
|
+
def displayed?(args={})
|
83
|
+
logger.info('Checking if color is displayed')
|
84
|
+
raise "Bad RGB: #{rgb}" unless rgb.all?
|
85
|
+
frame = args[:frame]
|
86
|
+
values = []
|
87
|
+
verify(args, values) do |sims|
|
88
|
+
if frame.nil?
|
89
|
+
json = get_json_for_compare
|
90
|
+
sim = test_case.send(:tmc_post, "/api/roi/color/actions/#{dut.id}", json: json)['value']
|
91
|
+
else
|
92
|
+
json = get_json_for_compare(frame: frame)
|
93
|
+
sim = test_case.send(:tmc_post, '/api/roi/color/actions', json: json)['value']
|
94
|
+
end
|
95
|
+
sim *= 100
|
96
|
+
sims << sim
|
97
|
+
result = sim >= @similarity
|
98
|
+
msg = "Color is#{result ? '' : ' not'} displayed #{frame.nil? ? 'on screen' : 'in frame'} " +
|
99
|
+
"(similarity: #{sim.round}%)"
|
100
|
+
logger.roi(self, args.merge(message: msg, use_last_image: frame.nil?, screenshot: frame.nil?))
|
101
|
+
result
|
102
|
+
end
|
103
|
+
end
|
104
|
+
special_method(:displayed?)
|
105
|
+
|
106
|
+
# Public: Gets the color of the region defined in the Roi.
|
107
|
+
# Corresponds to: api_read_color_from_screen
|
108
|
+
#
|
109
|
+
# Returns the color as a Hash with keys :red, :green, :blue, each being an Integer value (0 - 255).
|
110
|
+
def retrieve(args={})
|
111
|
+
logger.info('Retrieving color')
|
112
|
+
frame = args[:frame]
|
113
|
+
value(args) do
|
114
|
+
if frame.nil?
|
115
|
+
# Get the color from the screen
|
116
|
+
json = get_json_for_get
|
117
|
+
color = test_case.send(:tmc_post, "/api/roi/color/actions/#{dut.slot}", json: json)['value']
|
118
|
+
else
|
119
|
+
# Get the color from the frame
|
120
|
+
json = get_json_for_get(frame: frame)
|
121
|
+
color = test_case.send(:tmc_post, '/api/roi/color/actions', json: json)['value']
|
122
|
+
end
|
123
|
+
color = {red: color['red'], green: color['green'], blue: color['blue']}
|
124
|
+
logger.roi(self, args.merge(message: "Retrieved color #{color.inspect}", use_last_image: frame.nil?,
|
125
|
+
screenshot: frame.nil?))
|
126
|
+
color
|
127
|
+
end
|
128
|
+
end
|
129
|
+
special_method(:retrieve)
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
# Internal: Returns the ROI as a hash.
|
134
|
+
def to_json(ref_img: nil)
|
135
|
+
super(ref_img: ref_img).merge(threshold: @similarity, red: @red, green: @green, blue: @blue)
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require './lib/roi/roi'
|
2
|
+
require './lib/mixins/can_have_special_methods'
|
3
|
+
|
4
|
+
# The ImageRoi class defines an image Roi and its methods
|
5
|
+
|
6
|
+
class ImageRoi < Roi
|
7
|
+
include CanHaveSpecialMethods
|
8
|
+
|
9
|
+
attr_accessor(:img_x, :img_y, :img_width, :img_height, :similarity)
|
10
|
+
|
11
|
+
# Public: Initializes an image Roi.
|
12
|
+
#
|
13
|
+
# dut - Platform (or subclass) instance to which this Roi belongs.
|
14
|
+
# x - Integer x coordinate (default: nil).
|
15
|
+
# y - Integer y coordinate (default: nil).
|
16
|
+
# width - Integer width (default: nil).
|
17
|
+
# height - Integer height (default: nil).
|
18
|
+
# rectangle - Hash defining rectangle with keys :x, :y, :width, :height (default: nil).
|
19
|
+
# element - Hash same as rectangle (default: nil).
|
20
|
+
# img_x - Integer secondary Roi x coordinate (default: nil). Required.
|
21
|
+
# img_y - Integer secondary Roi y coordinate (default: nil). Required.
|
22
|
+
# img_width - Integer secondary Roi width (default: nil). Required.
|
23
|
+
# img_height - Integer secondary Roi height (default: nil). Required.
|
24
|
+
# ref_img - String path to reference image (default: nil). Required.
|
25
|
+
# similarity - Integer image similarity threshold 0 - 100 (default: 80).
|
26
|
+
#
|
27
|
+
# Returns nothing.
|
28
|
+
def initialize(dut, args={})
|
29
|
+
args.fetch(:ref_img) # required
|
30
|
+
super(dut, args)
|
31
|
+
@img_x = args.fetch(:img_x)
|
32
|
+
@img_y = args.fetch(:img_y)
|
33
|
+
@img_width = args.fetch(:img_width)
|
34
|
+
@img_height = args.fetch(:img_height)
|
35
|
+
@similarity = args.fetch(:similarity, 80)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Public: Gets image Roi info.
|
39
|
+
#
|
40
|
+
# Returns a tidy String with image Roi info.
|
41
|
+
def info
|
42
|
+
"#{super} Img.X=#{@img_x} Img.Y=#{@img_y} Img.Width=#{@img_width} Img.Height=#{@img_height} Similarity=#{@similarity}"
|
43
|
+
end
|
44
|
+
|
45
|
+
# Public: Checks if image is displayed as defined in the given ROI.
|
46
|
+
# Corresponds to: api_is_image_area_displayed??
|
47
|
+
#
|
48
|
+
# key - String name of key to press to trigger evaluation (default: nil).
|
49
|
+
# If default, no keys will be pressed.
|
50
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
51
|
+
# timeout - Integer total milliseconds to allow before timing out (default: 0).
|
52
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
53
|
+
# verifies_for - Integer total milliseconds for which the ROI must verify in order to succeed (default: 0).
|
54
|
+
# If default, the ROI must only verify once.
|
55
|
+
# priority - Symbol representing evaluation priority used to throttle CPU usage (default: :normal):
|
56
|
+
# :critical - Sleep 10 milliseconds between intensive tasks (should be used sparingly).
|
57
|
+
# :high - Sleep 100 milliseconds between intensive tasks.
|
58
|
+
# :normal - Sleep 1 second between intensive tasks (default).
|
59
|
+
# :low - Sleep 10 seconds between intensive tasks.
|
60
|
+
# :background - Sleep 1 minute between intensive tasks (should be used sparingly).
|
61
|
+
# log_every - Integer interval in milliseconds between logs (default: 1000).
|
62
|
+
# ref_img - String path to reference image to override the one in the Roi (default: nil).
|
63
|
+
#
|
64
|
+
# Returns a Boolean true if image is displayed before the timeout, otherwise false.
|
65
|
+
def displayed?(args={})
|
66
|
+
logger.info('Checking if image area is displayed')
|
67
|
+
scale = args.fetch(:scale, false)
|
68
|
+
frame = args[:frame]
|
69
|
+
ref_img_json = ref_img_roi_to_json(ref_img: args[:ref_img])
|
70
|
+
verify(args) do
|
71
|
+
if frame.nil?
|
72
|
+
right_roi = to_json
|
73
|
+
json = get_json_for_match_2(ref_img_json, right_roi, scale: scale)
|
74
|
+
result = test_case.send(:tmc_post, "/api/roi/image/actions/#{dut.slot}", json: json)['value']
|
75
|
+
logger.roi(self, args.merge(message: "Image is#{result ? '' : ' not'} displayed on screen",
|
76
|
+
use_last_image: true))
|
77
|
+
else
|
78
|
+
right_roi = to_json(ref_img: frame)
|
79
|
+
json = get_json_for_match_2(ref_img_json, right_roi, scale: scale)
|
80
|
+
result = test_case.send(:tmc_post, '/api/roi/image/actions', json: json)['value']
|
81
|
+
logger.roi(self, args.merge(message: "Image is#{result ? '' : ' not'} displayed in frame", screenshot: false))
|
82
|
+
end
|
83
|
+
result
|
84
|
+
end
|
85
|
+
end
|
86
|
+
special_method(:displayed?)
|
87
|
+
|
88
|
+
# TODO: come up with a use for this that makes sense in the context of a specific image Roi (area)
|
89
|
+
def retrieve(args={})
|
90
|
+
logger.info('Retrieving image area')
|
91
|
+
raise 'ImageRoi retrieve not implemented! Did you mean dut.capture_screen?'
|
92
|
+
end
|
93
|
+
#special_method(:retrieve)
|
94
|
+
|
95
|
+
# Public: Measures the approximate time for the given image Roi to change.
|
96
|
+
# Corresponds to: api_time_for_screen_to_change
|
97
|
+
#
|
98
|
+
# key - String key press to trigger evaluation (default: nil).
|
99
|
+
# If default, no key will be pressed.
|
100
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
101
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
102
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
103
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
104
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
105
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
106
|
+
# :high - Sleep 100 ms between intensive tasks
|
107
|
+
# :normal - Sleep 1 second between intensive tasks
|
108
|
+
# :low - Sleep 10 seconds between intensive tasks
|
109
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
110
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
111
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
112
|
+
#
|
113
|
+
# Returns the Float total milliseconds for the image Roi to change.
|
114
|
+
def time_to_change(args={})
|
115
|
+
logger.info('Measuring time for image to change')
|
116
|
+
scale = args.fetch(:scale, false)
|
117
|
+
next_img = dut.capture_screen
|
118
|
+
measure(args) do
|
119
|
+
roi = to_json(ref_img: next_img)
|
120
|
+
json = get_json_for_match_2(roi, roi, scale: scale)
|
121
|
+
resp = test_case.send(:tmc_post, "/api/roi/image/actions/#{dut.id}", json: json)
|
122
|
+
result = !resp['value']
|
123
|
+
logger.roi(self, args.merge(message: "Image #{result ? 'changed' : 'did not change'}", use_last_image: true))
|
124
|
+
result
|
125
|
+
end
|
126
|
+
end
|
127
|
+
special_method(:time_to_change)
|
128
|
+
|
129
|
+
# Public: Measures the precise time for the given image Roi to change.
|
130
|
+
# Corresponds to: api_hp_time_for_screen_to_change
|
131
|
+
#
|
132
|
+
# key - String key press to trigger evaluation (default: nil).
|
133
|
+
# If default, no key will be pressed.
|
134
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
135
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
136
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
137
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
138
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
139
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
140
|
+
# :high - Sleep 100 ms between intensive tasks
|
141
|
+
# :normal - Sleep 1 second between intensive tasks
|
142
|
+
# :low - Sleep 10 seconds between intensive tasks
|
143
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
144
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
145
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
146
|
+
#
|
147
|
+
# Returns the Float total milliseconds for the image Roi to change.
|
148
|
+
def precise_time_to_change(args={})
|
149
|
+
logger.info('Measuring precise time for image to change')
|
150
|
+
args[:precise] = true
|
151
|
+
scale = args.fetch(:scale, false)
|
152
|
+
values = []
|
153
|
+
measure(args, values) do |frame, frames|
|
154
|
+
roi = to_json(ref_img: frame)
|
155
|
+
if frames.empty?
|
156
|
+
frames << frame
|
157
|
+
result = false #TODO: do we need to implement this?
|
158
|
+
logger.roi(self, args.merge(message: "Image #{result ? 'changed' : 'did not change'} on screen",
|
159
|
+
use_last_image: true))
|
160
|
+
else
|
161
|
+
json = get_json_for_match_2(roi, roi, scale: scale)
|
162
|
+
resp = test_case.send(:tmc_post, '/api/roi/image/actions', json: json)
|
163
|
+
result = !resp['value']
|
164
|
+
logger.roi(self, args.merge(message: "Image #{result ? 'changed' : 'did not change'} in frame",
|
165
|
+
screenshot: false))
|
166
|
+
end
|
167
|
+
result
|
168
|
+
end
|
169
|
+
end
|
170
|
+
special_method(:precise_time_to_change)
|
171
|
+
|
172
|
+
#TODO: Corresponds to: api_time_for_screen_match_file
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
# Internal: Returns the ROI as a hash.
|
177
|
+
def to_json(ref_img: nil)
|
178
|
+
super(ref_img: ref_img).merge(threshold: @similarity)
|
179
|
+
end
|
180
|
+
|
181
|
+
# Internal: Returns the reference image ROI as a hash.
|
182
|
+
def ref_img_roi_to_json(ref_img: nil)
|
183
|
+
{x: @img_x, y: @img_y, width: @img_width, height: @img_height, referenceImage: ref_img || @ref_img,
|
184
|
+
threshold: @similarity}
|
185
|
+
end
|
186
|
+
|
187
|
+
end
|
data/lib/lib/roi/roi.rb
ADDED
@@ -0,0 +1,1064 @@
|
|
1
|
+
require 'delegate'
|
2
|
+
require './lib/helpers/tmc_helpers/tmc_helpers'
|
3
|
+
require './lib/mixins/can_have_special_methods'
|
4
|
+
|
5
|
+
class Roi
|
6
|
+
include CanHaveSpecialMethods
|
7
|
+
|
8
|
+
attr_accessor(:x, :y, :width, :height, :ref_img)
|
9
|
+
attr_reader(:name)
|
10
|
+
|
11
|
+
# Public: Initializes a base Roi.
|
12
|
+
#
|
13
|
+
# dut - Platform (or subclass) instance to which this Roi belongs.
|
14
|
+
# x - Integer x coordinate (default: nil).
|
15
|
+
# y - Integer y coordinate (default: nil).
|
16
|
+
# width - Integer width (default: nil).
|
17
|
+
# height - Integer height (default: nil).
|
18
|
+
# rectangle - Hash defining rectangle with keys :x, :y, :width, :height (default: nil).
|
19
|
+
# element - Hash same as rectangle (default: nil).
|
20
|
+
# ref_img - String path to reference image (default: nil).
|
21
|
+
#
|
22
|
+
# Returns nothing.
|
23
|
+
def initialize(dut, args={})
|
24
|
+
@name = nil
|
25
|
+
# Determine ROI name. This will be the first method that calls `new'.
|
26
|
+
stack = caller
|
27
|
+
last_end = stack.each_index.select do |i|
|
28
|
+
stack[i].end_with?("in `new'")
|
29
|
+
end.last
|
30
|
+
unless last_end.nil?
|
31
|
+
match = stack[last_end + 1].match(/`(\w+)'/)
|
32
|
+
unless match.nil?
|
33
|
+
@name = match[1] unless match[1] == 'run' # ignore dynamic ROIs
|
34
|
+
end
|
35
|
+
end
|
36
|
+
if args.include?(:element)
|
37
|
+
self.rectangle=args[:element]
|
38
|
+
else
|
39
|
+
self.rectangle=(args.fetch(:rectangle, args)) # Get x, y, width, and height from rectangle (if provided) or args
|
40
|
+
end
|
41
|
+
@ref_img = args.fetch(:ref_img, '')
|
42
|
+
@dut = dut
|
43
|
+
# These are declared without the convenience methods (TMC monkey patching) so as not to break syntax evaluation.
|
44
|
+
@priorities = {
|
45
|
+
:critical => 0.01,
|
46
|
+
:high => 0.1,
|
47
|
+
:normal => 1,
|
48
|
+
:low => 10,
|
49
|
+
:background => 60
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
# Public: Gets Roi rectangle.
|
54
|
+
#
|
55
|
+
# Returns Roi rectangle as a Hash with keys :x, :y, :width, :height.
|
56
|
+
def rectangle
|
57
|
+
{:x => @x, :y => @y, :width => @width, :height => @height}
|
58
|
+
end
|
59
|
+
|
60
|
+
# Public: Sets Roi rectangle.
|
61
|
+
#
|
62
|
+
# rectangle - Hash with keys :x, :y, :width, and :height from which to set Roi rectangle.
|
63
|
+
#
|
64
|
+
# Returns nothing.
|
65
|
+
def rectangle=(rectangle)
|
66
|
+
@x = rectangle[:x]
|
67
|
+
@y = rectangle[:y]
|
68
|
+
@width = rectangle[:width]
|
69
|
+
@height = rectangle[:height]
|
70
|
+
end
|
71
|
+
|
72
|
+
# Public: Gets Roi info.
|
73
|
+
#
|
74
|
+
# Returns a tidy String with Roi info.
|
75
|
+
def info
|
76
|
+
"#{self.class.name}: X=#{@x} Y=#{@y} Width=#{@width} Height=#{@height} Ref.Image=#{@ref_img}"
|
77
|
+
end
|
78
|
+
|
79
|
+
# Public: Placeholder for displayed?, which must be implemented by each Roi type.
|
80
|
+
def displayed?(*args)
|
81
|
+
raise "#{self.class.name} does not implement special method `displayed?'"
|
82
|
+
end
|
83
|
+
|
84
|
+
# Public: Placeholder for retrieve, which must be implemented by each Roi type.
|
85
|
+
def retrieve(*args)
|
86
|
+
raise "#{self.class.name} does not implement special method `retrieve'"
|
87
|
+
end
|
88
|
+
|
89
|
+
# Public: Waits until the given ROI is displayed.
|
90
|
+
# Corresponds to api_wait_till_<ROI TYPE>_displayed?
|
91
|
+
#
|
92
|
+
# timeout - Integer total milliseconds to allow before timing out.
|
93
|
+
# key - String name of key to press to trigger evaluation (default: nil).
|
94
|
+
# If default, no keys will be pressed.
|
95
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
96
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
97
|
+
# Applies to image ROIs only.
|
98
|
+
# verifies_for - Integer total milliseconds for which the ROI must verify in order to succeed (default: 0).
|
99
|
+
# If default, the ROI must only verify once.
|
100
|
+
# priority - Symbol representing evaluation priority used to throttle CPU usage (default: :normal):
|
101
|
+
# :critical - Sleep 10 milliseconds between intensive tasks (should be used sparingly).
|
102
|
+
# :high - Sleep 100 milliseconds between intensive tasks.
|
103
|
+
# :normal - Sleep 1 second between intensive tasks (default).
|
104
|
+
# :low - Sleep 10 seconds between intensive tasks.
|
105
|
+
# :background - Sleep 1 minute between intensive tasks (should be used sparingly).
|
106
|
+
# log_every - Integer interval in milliseconds between logs (default: 1000).
|
107
|
+
# message - String message to log instead of the default (default: nil).
|
108
|
+
# Default logs a tailored message.
|
109
|
+
#
|
110
|
+
# Returns Boolean true if displayed before the timeout, otherwise false.
|
111
|
+
def wait_until_displayed?(timeout, args={})
|
112
|
+
logger.info("Waiting #{timeout} ms until #{self.class.name} is displayed")
|
113
|
+
args[:timeout] = timeout
|
114
|
+
displayed?(args)
|
115
|
+
end
|
116
|
+
special_method(:wait_until_displayed?)
|
117
|
+
|
118
|
+
# Public: Presses a key until the given Roi is displayed.
|
119
|
+
# Corresponds to api_press_key_till_<ROI TYPE>_displayed?
|
120
|
+
#
|
121
|
+
# key - String name of key to press.
|
122
|
+
# presses - Integer maximum number of times to press the key (default: nil).
|
123
|
+
# timeout - Integer total milliseconds to allow before timing out (default: 30000).
|
124
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
125
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
126
|
+
# Applies to image ROIs only.
|
127
|
+
# try_every - Integer total milliseconds to delay between key presses (default: 3000).
|
128
|
+
# try_timeout - Integer total milliseconds to allow after each key press before timing out (default: nil).
|
129
|
+
# verifies_for - Integer total milliseconds for which the ROI must verify in order to succeed (default: 0).
|
130
|
+
# If default, the ROI must only verify once.
|
131
|
+
# priority - Symbol representing evaluation priority used to throttle CPU usage (default: :normal):
|
132
|
+
# :critical - Sleep 10 milliseconds between intensive tasks (should be used sparingly).
|
133
|
+
# :high - Sleep 100 milliseconds between intensive tasks.
|
134
|
+
# :normal - Sleep 1 second between intensive tasks (default).
|
135
|
+
# :low - Sleep 10 seconds between intensive tasks.
|
136
|
+
# :background - Sleep 1 minute between intensive tasks (should be used sparingly).
|
137
|
+
# log_every - Integer interval in milliseconds between logs (default: 1000).
|
138
|
+
# message - String message to log instead of the default (default: nil).
|
139
|
+
# Default logs a tailored message.
|
140
|
+
#
|
141
|
+
# Returns Boolean true if displayed before the timeout, otherwise false.
|
142
|
+
def press_key_until_displayed?(key, args={})
|
143
|
+
logger.info("Pressing key #{key.inspect} until #{self.class.name} is displayed")
|
144
|
+
timeout_s = args.fetch(:timeout, 30.sec) / 1.sec
|
145
|
+
args[:timeout] = args[:try_timeout]
|
146
|
+
key_delay = args.fetch(:try_every, 3.sec)
|
147
|
+
presses = args[:presses]
|
148
|
+
press_count = 0
|
149
|
+
start_time = Time.now
|
150
|
+
displayed = false
|
151
|
+
loop do
|
152
|
+
displayed = displayed?(args)
|
153
|
+
break if displayed
|
154
|
+
if presses.nil?
|
155
|
+
break if (Time.now - start_time) > timeout_s
|
156
|
+
elsif press_count == presses
|
157
|
+
break
|
158
|
+
end
|
159
|
+
@dut.press_key(key, :sleep_time => key_delay)
|
160
|
+
press_count += 1
|
161
|
+
end
|
162
|
+
displayed
|
163
|
+
end
|
164
|
+
special_method(:press_key_until_displayed?)
|
165
|
+
|
166
|
+
# Public: Measures the approximate time for the given Roi to be displayed.
|
167
|
+
# Corresponds to: api_time_to_display_<ROI TYPE>
|
168
|
+
#
|
169
|
+
# key - String key press to trigger evaluation (default: nil).
|
170
|
+
# If default, no key will be pressed.
|
171
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
172
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
173
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
174
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
175
|
+
# Applies to image ROIs only.
|
176
|
+
# expected - Boolean expected result of evaluation or Array of expected transition values (default: true).
|
177
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
178
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
179
|
+
# :high - Sleep 100 ms between intensive tasks
|
180
|
+
# :normal - Sleep 1 second between intensive tasks
|
181
|
+
# :low - Sleep 10 seconds between intensive tasks
|
182
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
183
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
184
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
185
|
+
#
|
186
|
+
# Returns the Float total milliseconds for the ROI to be displayed.
|
187
|
+
def time_to_display(args={})
|
188
|
+
logger.info("Measuring time to display #{self.class.name}")
|
189
|
+
measure(args) do
|
190
|
+
displayed?(:set_roi_options => args)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
special_method(:time_to_display)
|
194
|
+
|
195
|
+
# Public: Measures the precise time for the given Roi to be displayed.
|
196
|
+
# Corresponds to: api_hp_time_to_display_<ROI TYPE>
|
197
|
+
#
|
198
|
+
# key - String key press to trigger evaluation (default: nil).
|
199
|
+
# If default, no key will be pressed.
|
200
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
201
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
202
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
203
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
204
|
+
# Applies to image ROIs only.
|
205
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
206
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
207
|
+
# :high - Sleep 100 ms between intensive tasks
|
208
|
+
# :normal - Sleep 1 second between intensive tasks
|
209
|
+
# :low - Sleep 10 seconds between intensive tasks
|
210
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
211
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
212
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
213
|
+
#
|
214
|
+
# Returns the Float total milliseconds for the Roi to be displayed.
|
215
|
+
def precise_time_to_display(args={})
|
216
|
+
logger.info("Measuring precise time to display #{self.class.name}")
|
217
|
+
args[:precise] = true
|
218
|
+
args[:with_last_frame] = true
|
219
|
+
measure(args) do |frame, last_frame|
|
220
|
+
displayed?(:frame => frame, :last_frame => last_frame, :set_roi_options => args)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
special_method(:precise_time_to_display)
|
224
|
+
|
225
|
+
# Public: Measures the precise time for the given Roi to match on the specified DUT.
|
226
|
+
#
|
227
|
+
# other_dut - Platform (or subclass) instance of DUT to match.
|
228
|
+
# timeout - Integer total milliseconds to allow before timing out.
|
229
|
+
# key - String key press to trigger evaluation (default: nil).
|
230
|
+
# If default, no key will be pressed.
|
231
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
232
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true). NOT YET IMPLEMENTED.
|
233
|
+
#
|
234
|
+
# Returns the Float total milliseconds for the Roi to disappear.
|
235
|
+
def precise_time_to_match_dut(other_dut, timeout, args={})
|
236
|
+
#TODO: this probably needs some work for the new EE
|
237
|
+
msg = "Measuring precise time for #{info} to match DUT #{other_dut.model}:#{other_dut.slot}"
|
238
|
+
logger.roi(self, args.merge(:message => msg, :screenshot => false))
|
239
|
+
key = args[:key]
|
240
|
+
delay = args.fetch(:delay, 0)
|
241
|
+
other_roi = args[:other_roi]
|
242
|
+
left_frames = []
|
243
|
+
right_frames = []
|
244
|
+
test_case.add_teardown('Cleaning up captured frames') do
|
245
|
+
json = get_json_for_test.merge(files: (left_frames + right_frames).map {|frm| frm['path']})
|
246
|
+
test_case.send(:tmc_delete, '/api/images', json: json )
|
247
|
+
end
|
248
|
+
# Press key if specified
|
249
|
+
unless key.nil?
|
250
|
+
do_trigger(key, :duts => [dut, other_dut])
|
251
|
+
end
|
252
|
+
# Delay if specified
|
253
|
+
if delay > 0
|
254
|
+
sleep(delay / 1000.0) # this is native sleep
|
255
|
+
end
|
256
|
+
# Capture frames for the duration
|
257
|
+
json1 = get_json_for_iter.merge(durationMs: timeout)
|
258
|
+
threads = [
|
259
|
+
Thread.new do
|
260
|
+
resp = test_case.send(:tmc_post, "/api/images/record/#{dut.slot}", json: json1)
|
261
|
+
left_frames += resp.fetch('images')
|
262
|
+
end,
|
263
|
+
Thread.new do
|
264
|
+
resp = test_case.send(:tmc_post, "/api/images/record/#{other_dut.slot}", json: json1)
|
265
|
+
right_frames += resp.fetch('images')
|
266
|
+
end
|
267
|
+
]
|
268
|
+
threads.each { |thr| thr.join } # wait all threads
|
269
|
+
if left_frames.empty? || right_frames.empty?
|
270
|
+
raise 'Not enough images captured for analysis!'
|
271
|
+
end
|
272
|
+
# Send frames for processing
|
273
|
+
if other_roi.nil?
|
274
|
+
right_roi = rectangle
|
275
|
+
else
|
276
|
+
right_roi = other_roi.rectangle
|
277
|
+
end
|
278
|
+
right_roi.update(:threshold => threshold) unless right_roi.nil?
|
279
|
+
json2 = get_json_for_compare_2(rectangle, right_roi, left_frames: left_frames, right_frames: right_frames)
|
280
|
+
result = test_case.send(:tmc_post, '/api/roi/video/actions', json: json2)['value']
|
281
|
+
# TODO: figure out which frame(s) and display them
|
282
|
+
logger.roi(self, args.merge(message: "#{result.nil? ? 'no ' : ''}matching frames found".capitalize,
|
283
|
+
screenshot: false))
|
284
|
+
logger.duration(result, message: 'Time to match') unless result.nil?
|
285
|
+
result
|
286
|
+
end
|
287
|
+
special_method(:precise_time_to_display)
|
288
|
+
|
289
|
+
# Public: Returns true if the given Roi disappears within the given time.
|
290
|
+
# api_wait_till_<ROI TYPE>_not_displayed?
|
291
|
+
#
|
292
|
+
# timeout - Integer total milliseconds to allow before timing out.
|
293
|
+
# key - String key press to trigger evaluation (default: nil).
|
294
|
+
# If default, no key will be pressed.
|
295
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
296
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
297
|
+
# Applies to image ROIs only.
|
298
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
299
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
300
|
+
# :high - Sleep 100 ms between intensive tasks
|
301
|
+
# :normal - Sleep 1 second between intensive tasks
|
302
|
+
# :low - Sleep 10 seconds between intensive tasks
|
303
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
304
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
305
|
+
#
|
306
|
+
# Returns a Boolean true if the Roi disappears before the timeout, otherwise false.
|
307
|
+
def wait_until_not_displayed?(timeout, args={})
|
308
|
+
logger.info("Waiting #{timeout} ms until #{self.class.name} is not displayed")
|
309
|
+
args[:timeout] = timeout
|
310
|
+
args[:expected] = false
|
311
|
+
displayed?(args)
|
312
|
+
end
|
313
|
+
special_method(:wait_until_not_displayed?)
|
314
|
+
|
315
|
+
# Public: Measures the approximate time for the given Roi to disappear.
|
316
|
+
# Corresponds to: api_time_for_<ROI TYPE>_to_disappear
|
317
|
+
#
|
318
|
+
# key - String key press to trigger evaluation (default: nil).
|
319
|
+
# If default, no key will be pressed.
|
320
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
321
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
322
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
323
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
324
|
+
# Applies to image ROIs only.
|
325
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
326
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
327
|
+
# :high - Sleep 100 ms between intensive tasks
|
328
|
+
# :normal - Sleep 1 second between intensive tasks
|
329
|
+
# :low - Sleep 10 seconds between intensive tasks
|
330
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
331
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
332
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
333
|
+
#
|
334
|
+
# Returns the Float total milliseconds for the ROI to disappear.
|
335
|
+
def time_to_disappear(args={})
|
336
|
+
logger.info("Measuring time for #{self.class.name} to disappear")
|
337
|
+
measure(args) do
|
338
|
+
displayed?(:expected => false, :set_roi_options => args)
|
339
|
+
end
|
340
|
+
end
|
341
|
+
special_method(:time_to_disappear)
|
342
|
+
|
343
|
+
# Public: Measures the precise time for the given Roi to disappear.
|
344
|
+
# Corresponds to: api_hp_time_for_<ROI TYPE>_to_disappear
|
345
|
+
#
|
346
|
+
# key - String key press to trigger evaluation (default: nil).
|
347
|
+
# If default, no key will be pressed.
|
348
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
349
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
350
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
351
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
352
|
+
# Applies to image ROIs only.
|
353
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
354
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
355
|
+
# :high - Sleep 100 ms between intensive tasks
|
356
|
+
# :normal - Sleep 1 second between intensive tasks
|
357
|
+
# :low - Sleep 10 seconds between intensive tasks
|
358
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
359
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
360
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
361
|
+
#
|
362
|
+
# Returns the Float total milliseconds for the Roi to disappear.
|
363
|
+
def precise_time_to_disappear(args={})
|
364
|
+
logger.info("Measuring precise time for #{self.class.name} to disappear")
|
365
|
+
args[:precise] = true
|
366
|
+
args[:with_last_frame] = true
|
367
|
+
measure(args) do |frame, last_frame|
|
368
|
+
displayed?(:frame => frame, :last_frame => last_frame, :expected => false, :set_roi_options => args)
|
369
|
+
end
|
370
|
+
end
|
371
|
+
special_method(:precise_time_to_disappear)
|
372
|
+
|
373
|
+
# Public: Returns true if the given Roi transitions before the specified timeout from false to true to false.
|
374
|
+
# Corresponds to: api_wait_for_<ROI TYPE>_transition?
|
375
|
+
#
|
376
|
+
# timeout - Integer total milliseconds to allow before timing out.
|
377
|
+
# key - String key press to trigger evaluation (default: nil).
|
378
|
+
# If default, no key will be pressed.
|
379
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
380
|
+
# expected - Array of expected transition values (default: [true, false]).
|
381
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
382
|
+
# Applies to image ROIs only.
|
383
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
384
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
385
|
+
# :high - Sleep 100 ms between intensive tasks
|
386
|
+
# :normal - Sleep 1 second between intensive tasks
|
387
|
+
# :low - Sleep 10 seconds between intensive tasks
|
388
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
389
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
390
|
+
#
|
391
|
+
# Returns a Boolean true if the Roi transitioned before the timeout, otherwise false.
|
392
|
+
def wait_for_transition?(timeout, args={})
|
393
|
+
logger.info("Waiting #{timeout} ms for #{self.class.name} transition")
|
394
|
+
args[:timeout] = timeout
|
395
|
+
args[:expected] ||= [true, false]
|
396
|
+
displayed?(args)
|
397
|
+
end
|
398
|
+
special_method(:wait_for_transition?)
|
399
|
+
|
400
|
+
# Public: Measures the approximate time for the given Roi to transition from false to true to false.
|
401
|
+
# Corresponds to: api_time_for_<ROI TYPE>_transition
|
402
|
+
#
|
403
|
+
# key - String key press to trigger evaluation (default: nil).
|
404
|
+
# If default, no key will be pressed.
|
405
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
406
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
407
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
408
|
+
# expected - Array of expected transition values (default: [true, false]).
|
409
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
410
|
+
# Applies to image ROIs only.
|
411
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
412
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
413
|
+
# :high - Sleep 100 ms between intensive tasks
|
414
|
+
# :normal - Sleep 1 second between intensive tasks
|
415
|
+
# :low - Sleep 10 seconds between intensive tasks
|
416
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
417
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
418
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
419
|
+
#
|
420
|
+
# Returns the Float total milliseconds for the ROI to transition.
|
421
|
+
def time_to_transition(args={})
|
422
|
+
logger.info("Measuring time for #{self.class.name} to transition")
|
423
|
+
args[:expected] ||= [true, false]
|
424
|
+
measure(args) do
|
425
|
+
displayed?(:set_roi_options => args)
|
426
|
+
end
|
427
|
+
end
|
428
|
+
special_method(:time_to_transition)
|
429
|
+
|
430
|
+
# Public: Measures the precise time for the given Roi to transition from false to true to false.
|
431
|
+
# Corresponds to: api_hp_time_for_<ROI TYPE>_transition
|
432
|
+
#
|
433
|
+
# key - String key press to trigger evaluation (default: nil).
|
434
|
+
# If default, no key will be pressed.
|
435
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
436
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
437
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
438
|
+
# expected - Array of expected transition values (default: [true, false]).
|
439
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
440
|
+
# Applies to image ROIs only.
|
441
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
442
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
443
|
+
# :high - Sleep 100 ms between intensive tasks
|
444
|
+
# :normal - Sleep 1 second between intensive tasks
|
445
|
+
# :low - Sleep 10 seconds between intensive tasks
|
446
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
447
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
448
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
449
|
+
#
|
450
|
+
# Returns the Float total milliseconds for the Roi to transition.
|
451
|
+
def precise_time_to_transition(args={})
|
452
|
+
logger.info("Measuring precise time for #{self.class.name} to transition")
|
453
|
+
args[:expected] ||= [true, false]
|
454
|
+
args[:precise] = true
|
455
|
+
measure(args) do |frame|
|
456
|
+
displayed?(:frame => frame, :set_roi_options => args)
|
457
|
+
end
|
458
|
+
end
|
459
|
+
special_method(:precise_time_to_transition)
|
460
|
+
|
461
|
+
# Public: Returns true if the given Roi changes before the specified timeout.
|
462
|
+
#
|
463
|
+
# timeout - Integer total milliseconds to allow before timing out.
|
464
|
+
# key - String key press to trigger evaluation (default: nil).
|
465
|
+
# If default, no key will be pressed.
|
466
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
467
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
468
|
+
# Applies to image ROIs only.
|
469
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
470
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
471
|
+
# :high - Sleep 100 ms between intensive tasks
|
472
|
+
# :normal - Sleep 1 second between intensive tasks
|
473
|
+
# :low - Sleep 10 seconds between intensive tasks
|
474
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
475
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
476
|
+
#
|
477
|
+
# Returns a Boolean true if the Roi changed before the timeout, otherwise false.
|
478
|
+
def wait_for_change?(timeout, args={})
|
479
|
+
logger.info("Waiting #{timeout} ms for #{self.class.name} to change")
|
480
|
+
args[:timeout] = timeout
|
481
|
+
set_roi_options(args)
|
482
|
+
first = retrieve
|
483
|
+
verify(args) do
|
484
|
+
retrieve != first
|
485
|
+
end
|
486
|
+
end
|
487
|
+
special_method(:wait_for_change?)
|
488
|
+
|
489
|
+
# Public: Measures the approximate time for the given Roi to change.
|
490
|
+
# Corresponds to: api_time_to_<ROI TYPE>_change
|
491
|
+
#
|
492
|
+
# key - String key press to trigger evaluation (default: nil).
|
493
|
+
# If default, no key will be pressed.
|
494
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
495
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
496
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
497
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
498
|
+
# Applies to image ROIs only.
|
499
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
500
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
501
|
+
# :high - Sleep 100 ms between intensive tasks
|
502
|
+
# :normal - Sleep 1 second between intensive tasks
|
503
|
+
# :low - Sleep 10 seconds between intensive tasks
|
504
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
505
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
506
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
507
|
+
#
|
508
|
+
# Returns the Float total milliseconds for the Roi to change.
|
509
|
+
def time_to_change(args={})
|
510
|
+
logger.info("Measuring time for #{self.class.name} to change")
|
511
|
+
set_roi_options(args)
|
512
|
+
first = retrieve
|
513
|
+
measure(args) do
|
514
|
+
retrieve != first
|
515
|
+
end
|
516
|
+
end
|
517
|
+
special_method(:time_to_change)
|
518
|
+
|
519
|
+
# Public: Measures the precise time for the given Roi to change.
|
520
|
+
# Corresponds to: api_hp_time_to_<ROI TYPE>_change
|
521
|
+
#
|
522
|
+
# key - String key press to trigger evaluation (default: nil).
|
523
|
+
# If default, no key will be pressed.
|
524
|
+
# delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
525
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
526
|
+
# If default, timeout will be calculated as [ delay + 5000 ].
|
527
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
528
|
+
# Applies to image ROIs only.
|
529
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
530
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
531
|
+
# :high - Sleep 100 ms between intensive tasks
|
532
|
+
# :normal - Sleep 1 second between intensive tasks
|
533
|
+
# :low - Sleep 10 seconds between intensive tasks
|
534
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
535
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
536
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: true).
|
537
|
+
#
|
538
|
+
# Returns the Float total milliseconds for the Roi to change.
|
539
|
+
def precise_time_to_change(args={})
|
540
|
+
logger.info("Measuring precise time for #{self.class.name} to change")
|
541
|
+
args[:precise] = true
|
542
|
+
set_roi_options(args)
|
543
|
+
values = [retrieve]
|
544
|
+
measure(args, values) do |frame, vals|
|
545
|
+
value = retrieve(:frame => frame)
|
546
|
+
vals << value
|
547
|
+
value != vals.first
|
548
|
+
end
|
549
|
+
end
|
550
|
+
special_method(:precise_time_to_change)
|
551
|
+
|
552
|
+
# Public: Finds the frame in which the given Roi verifies.
|
553
|
+
# Corresponds to: api_find_<ROI TYPE>_frame
|
554
|
+
#
|
555
|
+
# frames - Array of frames to search, each being a Hash with the following keys:
|
556
|
+
# :filename - String full path to the frame on the server.
|
557
|
+
# :capturedAt - Time at which the frame was captured.
|
558
|
+
# :keep - Boolean indicating whether to keep the frame if cleanup is true. Initializes false.
|
559
|
+
# start_time - Time at which frame capture began.
|
560
|
+
# starting_frame - Integer index of frame at which to start evaluation (default: 0).
|
561
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
562
|
+
# If default, all frames will be searched.
|
563
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
564
|
+
# Applies to image ROIs only.
|
565
|
+
# verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be counted
|
566
|
+
# successful (default: 0).
|
567
|
+
# If default, the ROI must only verify once.
|
568
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
569
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
570
|
+
# :high - Sleep 100 ms between intensive tasks
|
571
|
+
# :normal - Sleep 1 second between intensive tasks
|
572
|
+
# :low - Sleep 10 seconds between intensive tasks
|
573
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
574
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
575
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: false).
|
576
|
+
#
|
577
|
+
# Returns the Integer index of the matching frame.
|
578
|
+
def find_frame_displayed(frames, start_time, args={})
|
579
|
+
logger.info("Finding frame where #{self.class.name} is displayed")
|
580
|
+
args[:with_last_frame] = true
|
581
|
+
args[:report] = false
|
582
|
+
if frames.count < 2
|
583
|
+
default_timeout = 30.sec
|
584
|
+
else
|
585
|
+
default_timeout = test_case.get_time_delta(frames.first[:capturedAt], frames.last[:capturedAt])
|
586
|
+
end
|
587
|
+
args[:timeout] ||= default_timeout
|
588
|
+
frame(frames, start_time, args) do |frame, last_frame|
|
589
|
+
displayed?(:frame => frame, :last_frame => last_frame, :set_roi_options => args)
|
590
|
+
end
|
591
|
+
end
|
592
|
+
special_method(:find_frame_displayed)
|
593
|
+
|
594
|
+
# Public: Finds the frame in which the given Roi does not verify.
|
595
|
+
# Corresponds to: api_find_non_<ROI TYPE>_frame
|
596
|
+
#
|
597
|
+
# frames - Array of frames to search, each being a Hash with the following keys:
|
598
|
+
# :filename - String full path to the frame on the server.
|
599
|
+
# :capturedAt - Time at which the frame was captured.
|
600
|
+
# :keep - Boolean indicating whether to keep the frame if cleanup is true. Initializes false.
|
601
|
+
# start_time - Time at which frame capture began.
|
602
|
+
# starting_frame - Integer index of frame at which to start evaluation (default: 0).
|
603
|
+
# timeout - Integer total milliseconds to allow before timing out (default: nil).
|
604
|
+
# If default, all frames will be searched.
|
605
|
+
# scale - Boolean if the larger image should be scaled to the size of the smaller image (default: false).
|
606
|
+
# Applies to image ROIs only.
|
607
|
+
# verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be counted
|
608
|
+
# successful (default: 0).
|
609
|
+
# If default, the ROI must only verify once.
|
610
|
+
# priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
611
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
612
|
+
# :high - Sleep 100 ms between intensive tasks
|
613
|
+
# :normal - Sleep 1 second between intensive tasks
|
614
|
+
# :low - Sleep 10 seconds between intensive tasks
|
615
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
616
|
+
# log_every - Integer total milliseconds between logs (default: 1000).
|
617
|
+
# report - Boolean indicating whether to report measurements to ITMS (default: false).
|
618
|
+
#
|
619
|
+
# Returns the Integer index of the matching frame.
|
620
|
+
def find_frame_not_displayed(frames, start_time, args={})
|
621
|
+
logger.info("Finding frame where #{self.class.name} is not displayed")
|
622
|
+
args[:with_last_frame] = true
|
623
|
+
args[:expected] = false
|
624
|
+
args[:report] = false
|
625
|
+
frame(frames, start_time, args) do |frame, last_frame|
|
626
|
+
displayed?(:frame => frame, :last_frame => last_frame, :set_roi_options => args)
|
627
|
+
end
|
628
|
+
end
|
629
|
+
special_method(:find_frame_not_displayed)
|
630
|
+
|
631
|
+
private
|
632
|
+
|
633
|
+
# Internal: Gets JSON for get.
|
634
|
+
def get_json_for_get(frame: nil, roi: nil)
|
635
|
+
get_json_for_action('get').merge(roi: roi || to_json(ref_img: frame))
|
636
|
+
end
|
637
|
+
|
638
|
+
# Internal: Gets JSON for match.
|
639
|
+
def get_json_for_match(frame: nil, roi: nil)
|
640
|
+
get_json_for_action('match').merge(roi: roi || to_json(ref_img: frame))
|
641
|
+
end
|
642
|
+
|
643
|
+
# Internal: Gets JSON for compare.
|
644
|
+
def get_json_for_compare(frame: nil, roi: nil)
|
645
|
+
get_json_for_action('compare').merge(roi: roi || to_json(ref_img: frame))
|
646
|
+
end
|
647
|
+
|
648
|
+
# Internal: Gets JSON for Left/Right match.
|
649
|
+
def get_json_for_match_2(left_roi, right_roi, scale: nil)
|
650
|
+
json = get_json_for_action('match').merge(leftRoi: left_roi, rightRoi: right_roi)
|
651
|
+
json.update(scale: scale) unless scale.nil?
|
652
|
+
json
|
653
|
+
end
|
654
|
+
|
655
|
+
# Internal: Gets JSON for Left/Right compare.
|
656
|
+
def get_json_for_compare_2(left_roi, right_roi, left_frames: nil, right_frames: nil, scale: nil)
|
657
|
+
json = get_json_for_action('compare').merge(leftRoi: left_roi, rightRoi: right_roi)
|
658
|
+
json.update(leftFrames: left_frames) unless left_frames.nil?
|
659
|
+
json.update(rightFrames: right_frames) unless right_frames.nil?
|
660
|
+
json.update(scale: scale) unless scale.nil?
|
661
|
+
json
|
662
|
+
end
|
663
|
+
|
664
|
+
# Internal: Gets JSON populated with job, test, and iteration for the specified action.
|
665
|
+
def get_json_for_action(action)
|
666
|
+
get_json_for_iter.merge(action: action)
|
667
|
+
end
|
668
|
+
|
669
|
+
# Internal: Gets JSON populated with job and test.
|
670
|
+
def get_json_for_test
|
671
|
+
{job: test_case.job, test: test_case.id}
|
672
|
+
end
|
673
|
+
|
674
|
+
# Internal: Gets JSON populated with job, test, and iteration.
|
675
|
+
def get_json_for_iter
|
676
|
+
get_json_for_test.merge(iteration: test_case.iteration)
|
677
|
+
end
|
678
|
+
|
679
|
+
# Internal: Returns the ROI as a hash.
|
680
|
+
def to_json(ref_img: nil)
|
681
|
+
rectangle.merge(referenceImage: ref_img || @ref_img)
|
682
|
+
end
|
683
|
+
|
684
|
+
# Internal: Returns the dut object.
|
685
|
+
def dut
|
686
|
+
@dut
|
687
|
+
end
|
688
|
+
|
689
|
+
# Internal: Returns the test case object.
|
690
|
+
def test_case
|
691
|
+
dut.send(:test_case)
|
692
|
+
end
|
693
|
+
|
694
|
+
# Internal: Returns the logger object.
|
695
|
+
def logger
|
696
|
+
test_case.send(:logger_for_device, @dut.id)
|
697
|
+
end
|
698
|
+
|
699
|
+
# Internal: Sets Roi options from the given arguments.
|
700
|
+
def set_roi_options(args)
|
701
|
+
# Individual Roi classes should use this as needed to set type-specific Roi options
|
702
|
+
end
|
703
|
+
|
704
|
+
# Internal: Returns true if the actual result verifies against the expected result.
|
705
|
+
def verifies?(expected, actual)
|
706
|
+
!actual.nil? && (expected.nil? || actual.eql?(expected) || (expected.is_a?(Regexp) && actual =~ expected))
|
707
|
+
end
|
708
|
+
|
709
|
+
# Internal: Returns true if the given Roi verifies for the specified duration, otherwise false.
|
710
|
+
# args - Hash of arguments:
|
711
|
+
# :key - String key press to trigger evaluation (default: nil).
|
712
|
+
# If default, no key will be pressed.
|
713
|
+
# :expected - Object expected value from yielding the given block (default: true).
|
714
|
+
# If an Array is provided, the measurement will expect a transition.
|
715
|
+
# :precise - Boolean indicating whether to evaluate with high precision (default: false).
|
716
|
+
# :delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
717
|
+
# :scale - Boolean if the larger image should be scaled to the size of the smaller image
|
718
|
+
# (default: false). Applies to image ROIs only.
|
719
|
+
# :verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be
|
720
|
+
# counted successful (default: 0). If default, the ROI must only verify once.
|
721
|
+
# :timeout - Integer total milliseconds to allow before timing out (default: nil).
|
722
|
+
# If default, timeout will be calculated as [ delay + verifies_for + 5000 ].
|
723
|
+
# :priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
724
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
725
|
+
# :high - Sleep 100 ms between intensive tasks
|
726
|
+
# :normal - Sleep 1 second between intensive tasks
|
727
|
+
# :low - Sleep 10 seconds between intensive tasks
|
728
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
729
|
+
# :log_every - Integer total milliseconds between logs (default: 1000).
|
730
|
+
# :with_last_frame - Boolean indicating whether to pass last frame to block (default: false).
|
731
|
+
# :message - String custom message to log (default: nil).
|
732
|
+
# block_args - Splat Array of arguments to pass to the given block.
|
733
|
+
# block - Block Reference for block to yield.
|
734
|
+
def verify(args, *block_args, &block)
|
735
|
+
args[:timeout] ||= 0.sec if args[:delay].nil? && args[:verifies_for].nil?
|
736
|
+
evaluate(:verify, args, *block_args, &block)
|
737
|
+
end
|
738
|
+
|
739
|
+
# Internal: Returns the time measured for the given Roi to verify for the specified duration, or nil.
|
740
|
+
# args - Hash of arguments:
|
741
|
+
# :key - String key press to trigger evaluation (default: nil).
|
742
|
+
# If default, no key will be pressed.
|
743
|
+
# :expected - Object expected value from yielding the given block (default: true).
|
744
|
+
# If an Array is provided, the measurement will expect a transition.
|
745
|
+
# :precise - Boolean indicating whether to evaluate with high precision (default: false).
|
746
|
+
# :delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
747
|
+
# :scale - Boolean if the larger image should be scaled to the size of the smaller image
|
748
|
+
# (default: false). Applies to image ROIs only.
|
749
|
+
# :verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be
|
750
|
+
# counted successful (default: 0). If default, the ROI must only verify once.
|
751
|
+
# :timeout - Integer total milliseconds to allow before timing out (default: nil).
|
752
|
+
# If default, timeout will be calculated as [ delay + verifies_for + 5000 ].
|
753
|
+
# :priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
754
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
755
|
+
# :high - Sleep 100 ms between intensive tasks
|
756
|
+
# :normal - Sleep 1 second between intensive tasks
|
757
|
+
# :low - Sleep 10 seconds between intensive tasks
|
758
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
759
|
+
# :log_every - Integer total milliseconds between logs (default: 1000).
|
760
|
+
# :report - Boolean indicating whether to report measurements to ITMS (default: true).
|
761
|
+
# :execution_metric - String name of execution metric to report (default: nil).
|
762
|
+
# :with_last_frame - Boolean indicating whether to pass last frame to block (default: false).
|
763
|
+
# :message - String custom message to log (default: nil).
|
764
|
+
# block_args - Splat Array of arguments to pass to the given block.
|
765
|
+
# block - Block Reference for block to yield.
|
766
|
+
def measure(args, *block_args, &block)
|
767
|
+
args[:priority] ||= :high # use a higher default priority
|
768
|
+
# Use a higher default timeout
|
769
|
+
if args[:delay].nil? && args[:verifies_for].nil?
|
770
|
+
args[:timeout] ||= args[:precise] ? 10.sec : 30.sec
|
771
|
+
end
|
772
|
+
evaluate(:measure, args, *block_args, &block)
|
773
|
+
end
|
774
|
+
|
775
|
+
# Internal: Returns the value of the given Roi.
|
776
|
+
# args - Hash of arguments:
|
777
|
+
# :key - String key press to trigger evaluation (default: nil).
|
778
|
+
# If default, no key will be pressed.
|
779
|
+
# :delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
780
|
+
# :message - String custom message to log (default: nil).
|
781
|
+
# block_args - Splat Array of arguments to pass to the given block.
|
782
|
+
# block - Block Reference for block to yield.
|
783
|
+
def value(args, *block_args, &block)
|
784
|
+
# Override timeout if we are just retrieving the value
|
785
|
+
args[:timeout] = 0.sec
|
786
|
+
args[:timeout] += args[:delay] unless args[:delay].nil?
|
787
|
+
evaluate(:value, args, *block_args, &block)
|
788
|
+
end
|
789
|
+
|
790
|
+
# Internal: Returns the index of the frame in which the given Roi verifies, or -1.
|
791
|
+
# frames - Array of frames, each being a Hash with the following keys:
|
792
|
+
# :filename - String full path to the frame on the server.
|
793
|
+
# :capturedAt - Time at which the frame was captured.
|
794
|
+
# :keep - Boolean indicating whether to keep the frame if cleanup is true. Initializes false.
|
795
|
+
# start_time - Time at which frame capture began.
|
796
|
+
# args - Hash of arguments:
|
797
|
+
# :starting_frame - Integer index of frame at which to start evaluation (default: 0).
|
798
|
+
# :expected - Object expected value from yielding the given block (default: true).
|
799
|
+
# If an Array is provided, the measurement will expect a transition.
|
800
|
+
# :verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be
|
801
|
+
# counted successful (default: 0). If default, the ROI must only verify once.
|
802
|
+
# :timeout - Integer total milliseconds to allow before timing out (default: nil).
|
803
|
+
# If default, all frames will be searched.
|
804
|
+
# :scale - Boolean if the larger image should be scaled to the size of the smaller image
|
805
|
+
# (default: false). Applies to image ROIs only.
|
806
|
+
# :priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
807
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
808
|
+
# :high - Sleep 100 ms between intensive tasks
|
809
|
+
# :normal - Sleep 1 second between intensive tasks
|
810
|
+
# :low - Sleep 10 seconds between intensive tasks
|
811
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
812
|
+
# :log_every - Integer total milliseconds between logs (default: 1000).
|
813
|
+
# :report - Boolean indicating whether to report measurements to ITMS (default: true).
|
814
|
+
# :execution_metric - String name of execution metric to report (default: nil).
|
815
|
+
# :with_last_frame - Boolean indicating whether to pass last frame to block (default: false).
|
816
|
+
# :message - String custom message to log (default: nil).
|
817
|
+
# block_args - Splat Array of arguments to pass to the given block.
|
818
|
+
# block - Block Reference for block to yield.
|
819
|
+
def frame(frames, start_time, args, *block_args, &block)
|
820
|
+
args[:precise] = true
|
821
|
+
args[:priority] ||= :high # use a higher default priority
|
822
|
+
# Use a higher default timeout
|
823
|
+
args[:timeout] ||= 5.min # should search all frames unless someone went nuts with the capture
|
824
|
+
args[:frames] = frames
|
825
|
+
args[:starting_frame] ||= 0
|
826
|
+
args[:start_time] = start_time
|
827
|
+
evaluate(:frame, args, *block_args, &block)
|
828
|
+
end
|
829
|
+
|
830
|
+
# Internal: Evaluates the given Roi for the specified duration, or times out.
|
831
|
+
# args - Hash of arguments:
|
832
|
+
# :type - Symbol type of evaluation:
|
833
|
+
# :verify - Return true if the Roi verifies, otherwise false.
|
834
|
+
# :measure - Return the time in ms for the Roi to verify, or nil.
|
835
|
+
# :value - Return the Roi value.
|
836
|
+
# :frame - Return the frame in which the Roi verifies.
|
837
|
+
# :key - String key press to trigger evaluation (default: nil).
|
838
|
+
# If default, no key will be pressed.
|
839
|
+
# :expected - Object expected value from yielding the given block (default: true).
|
840
|
+
# If an Array is provided, the measurement will expect a transition.
|
841
|
+
# :precise - Boolean indicating whether to evaluate with high precision (default: false).
|
842
|
+
# :delay - Integer total milliseconds to delay before starting evaluation (default: 0).
|
843
|
+
# :scale - Boolean if the larger image should be scaled to the size of the smaller image
|
844
|
+
# (default: false). Applies to image ROIs only.
|
845
|
+
# :verifies_for - Integer total milliseconds for which the ROI must continuously verify in order to be
|
846
|
+
# counted successful (default: 0). If default, the ROI must only verify once.
|
847
|
+
# :timeout - Integer total milliseconds to allow before timing out (default: nil).
|
848
|
+
# If default, timeout will be calculated as [ delay + verifies_for + 5000 ].
|
849
|
+
# :priority - Symbol evaluation priority used to throttle CPU usage (default: :normal):
|
850
|
+
# :critical - Sleep 10 ms between intensive tasks (USE SPARINGLY)
|
851
|
+
# :high - Sleep 100 ms between intensive tasks
|
852
|
+
# :normal - Sleep 1 second between intensive tasks
|
853
|
+
# :low - Sleep 10 seconds between intensive tasks
|
854
|
+
# :background - Sleep 1 minute between intensive tasks (USE SPARINGLY)
|
855
|
+
# :log_every - Integer total milliseconds between logs (default: 1000).
|
856
|
+
# :report - Boolean indicating whether to report measurements to ITMS (default: true).
|
857
|
+
# :execution_metric - String name of execution metric to report (default: nil).
|
858
|
+
# :with_last_frame - Boolean indicating whether to pass last frame to block (default: false).
|
859
|
+
# :message - String custom message to log (default: nil).
|
860
|
+
# :frames - Array of frames to use, each being a Hash with the following keys (default: nil):
|
861
|
+
# :filename - String full path to the frame on the server.
|
862
|
+
# :capturedAt - Time at which the frame was captured.
|
863
|
+
# :keep - Boolean indicating whether to keep the frame if cleanup is true.
|
864
|
+
# Initializes false.
|
865
|
+
# If default, frames will be captured as needed.
|
866
|
+
# :start_time - Time at which evaluation began (default: nil).
|
867
|
+
# If default, an appropriate start Time will be used.
|
868
|
+
# block_args - Splat Array of arguments to pass to the given block.
|
869
|
+
# block - Block Reference for block to yield.
|
870
|
+
def evaluate(type, args, *block_args, &block)
|
871
|
+
case type
|
872
|
+
when :verify
|
873
|
+
log_action = 'verifying'
|
874
|
+
log_state = 'verified'
|
875
|
+
when :measure
|
876
|
+
log_action = 'measuring'
|
877
|
+
log_state = 'measured'
|
878
|
+
when :value
|
879
|
+
log_action = 'retrieving'
|
880
|
+
log_state = 'retrieved'
|
881
|
+
when :frame
|
882
|
+
log_action = 'finding frame for'
|
883
|
+
log_state = 'found in frame'
|
884
|
+
end
|
885
|
+
# DO NOT MODIFY ARGS IN THIS FUNCTION
|
886
|
+
msg = "#{args[:message] || log_action.capitalize} #{info}"
|
887
|
+
logger.roi(self, args.merge(:message => msg, :screenshot => false))
|
888
|
+
# Get arguments
|
889
|
+
with_last_frame = args.fetch(:with_last_frame, false)
|
890
|
+
key = args[:key]
|
891
|
+
expected = args.fetch(:expected, true)
|
892
|
+
expected = [expected] unless expected.is_a?(Array)
|
893
|
+
precise = args.fetch(:precise, false)
|
894
|
+
delay = args.fetch(:delay, 0)
|
895
|
+
verifies_for = args.fetch(:verifies_for, 0)
|
896
|
+
timeout = args[:timeout] || delay + verifies_for + 5.sec
|
897
|
+
#TODO: put back?
|
898
|
+
#if precise && timeout > (delay + 5.sec)
|
899
|
+
# raise "Timeout (#{timeout} ms) cannot be greater than delay + 5 sec! Try increasing delay or using a non-precise method."
|
900
|
+
#end
|
901
|
+
if timeout < (delay + verifies_for)
|
902
|
+
raise "Timeout (#{timeout} ms) cannot be less than delay (#{delay} ms) + verifies_for (#{verifies_for} ms)!"
|
903
|
+
end
|
904
|
+
frames = args.fetch(:frames, [])
|
905
|
+
starting_frame = args.fetch(:starting_frame, 0)
|
906
|
+
priority = args.fetch(:priority, :normal)
|
907
|
+
report = args.fetch(:report, true)
|
908
|
+
execution_metric = args[:execution_metric]
|
909
|
+
log_every = args.fetch(:log_every, 1.sec)
|
910
|
+
min_log_every = (timeout / 100.0).round # log a max of 100 frames
|
911
|
+
if log_every < min_log_every
|
912
|
+
logger.warn("Using `log_every': #{min_log_every} ms.")
|
913
|
+
log_every = min_log_every
|
914
|
+
end
|
915
|
+
next_log = log_every
|
916
|
+
start_time = args.fetch(:start_time, nil)
|
917
|
+
result = nil
|
918
|
+
if precise
|
919
|
+
# For a high-precision (HP) measurement, capture frames if necessary
|
920
|
+
if frames.empty?
|
921
|
+
cap = dut.capture_frames(timeout, :key => key)
|
922
|
+
frames = cap[:frames]
|
923
|
+
start_time = cap[:start_time]
|
924
|
+
end
|
925
|
+
raise 'Not enough images captured for analysis!' if frames.empty?
|
926
|
+
else
|
927
|
+
# For a non-high-precision evaluation, we just trigger the evaluation and start the clock
|
928
|
+
unless key.nil?
|
929
|
+
do_trigger(key)
|
930
|
+
end
|
931
|
+
start_time = Time.now
|
932
|
+
if delay > 0
|
933
|
+
sleep(delay / 1000.0) # this is native sleep
|
934
|
+
end
|
935
|
+
end
|
936
|
+
i = starting_frame
|
937
|
+
i += 1 if with_last_frame # start on the second frame
|
938
|
+
expected_now = expected.shift
|
939
|
+
verified = false
|
940
|
+
while true
|
941
|
+
logger.debug("Expected result: #{expected_now}")
|
942
|
+
skip = false
|
943
|
+
if precise
|
944
|
+
# For HP measurement, look at the next frame
|
945
|
+
frame_info = frames[i]
|
946
|
+
skip = frame_info.nil?
|
947
|
+
unless skip
|
948
|
+
now = frame_info[:capturedAt]
|
949
|
+
frame = [frame_info[:filename]]
|
950
|
+
if with_last_frame
|
951
|
+
frame << frames[i - 1][:filename]
|
952
|
+
end
|
953
|
+
result = block.call(*(frame + block_args))
|
954
|
+
end
|
955
|
+
else
|
956
|
+
# For non-HP evaluation, use the current screen image (implicit)
|
957
|
+
frame_info = nil
|
958
|
+
# TODO: We use the time of the request, rather than the time after the response, because the processing
|
959
|
+
# TODO: overhead is potentially much less. However, this could result in measurements that are under by a
|
960
|
+
# TODO: number of milliseconds. Change this to use the timestamp, when available, from the server response.
|
961
|
+
now = Time.now
|
962
|
+
result = block.call(*block_args)
|
963
|
+
end
|
964
|
+
if skip
|
965
|
+
verified_this_time = false
|
966
|
+
else
|
967
|
+
elapsed = test_case.get_time_delta(start_time, now)
|
968
|
+
found_str = now.strftime('%H:%M:%S.%N')
|
969
|
+
verified_this_time = verifies?(expected_now, result)
|
970
|
+
end
|
971
|
+
if verified_this_time
|
972
|
+
# Roi verifies, check if remaining criteria are met
|
973
|
+
verified_for ||= 0
|
974
|
+
last_verified ||= now
|
975
|
+
found_in_frame ||= frame_info
|
976
|
+
verified_for += test_case.get_time_delta(last_verified, now) * 1.sec
|
977
|
+
last_verified = now
|
978
|
+
verified = verified_for >= verifies_for
|
979
|
+
elsif !verified
|
980
|
+
# Roi does not verify, reset state
|
981
|
+
verified_for = nil
|
982
|
+
last_verified = nil
|
983
|
+
found_in_frame = nil
|
984
|
+
end
|
985
|
+
if verified && verified_this_time
|
986
|
+
if expected.empty?
|
987
|
+
# Roi verifies for the required duration and all transitions
|
988
|
+
msg = "Roi #{log_state} in #{elapsed} ms, Time=#{found_str}, #{info}"
|
989
|
+
if precise
|
990
|
+
# For HP measurement, save found frame
|
991
|
+
found_in_frame[:keep] = true
|
992
|
+
# Recalculate elapsed from matching frame
|
993
|
+
found_time = found_in_frame[:capturedAt]
|
994
|
+
found_i = frames.index(found_in_frame)
|
995
|
+
elapsed = test_case.get_time_delta(start_time, found_time)
|
996
|
+
found_str = found_time.strftime('%H:%M:%S.%N')
|
997
|
+
filename = found_in_frame[:filename]
|
998
|
+
msg += ", Frame=#{found_i}"
|
999
|
+
logger.roi(self, args.merge(:message => msg, :screen_image => filename))
|
1000
|
+
if report
|
1001
|
+
test_case.report_result(:start_time => start_time.to_f, :stop_time => found_time.to_f,
|
1002
|
+
:execution_metric => execution_metric)
|
1003
|
+
end
|
1004
|
+
logger.duration(elapsed)
|
1005
|
+
else
|
1006
|
+
# Log result for evaluation
|
1007
|
+
logger.roi(self, args.merge(:message => msg, :use_last_image => true))
|
1008
|
+
end
|
1009
|
+
# For measurements, the result is the time elapsed
|
1010
|
+
if type == :measure
|
1011
|
+
result = elapsed
|
1012
|
+
elsif type == :verify
|
1013
|
+
result = true
|
1014
|
+
elsif type == :frame
|
1015
|
+
result = found_i
|
1016
|
+
end
|
1017
|
+
break
|
1018
|
+
end
|
1019
|
+
expected_now = expected.shift
|
1020
|
+
else
|
1021
|
+
# Roi does not yet verify for the required duration
|
1022
|
+
quit = precise ? i >= frames.size - 1 : elapsed >= timeout
|
1023
|
+
if quit
|
1024
|
+
# Set result for failure
|
1025
|
+
if type == :measure
|
1026
|
+
result = nil
|
1027
|
+
elsif type == :verify
|
1028
|
+
result = false
|
1029
|
+
elsif type == :frame
|
1030
|
+
result = -1
|
1031
|
+
end
|
1032
|
+
break
|
1033
|
+
elsif elapsed > next_log
|
1034
|
+
# Report screenshots at intervals
|
1035
|
+
msg = "Roi not yet #{log_state} after #{elapsed.to_s} ms, #{info}, Time=#{found_str}"
|
1036
|
+
if precise
|
1037
|
+
msg += ", Frame=#{i}"
|
1038
|
+
logger.roi(self, args.merge(:message => msg, :screen_image => frame_info[:filename]))
|
1039
|
+
frame_info[:keep] = true
|
1040
|
+
else
|
1041
|
+
logger.roi(self, args.merge(:message => msg, :use_last_image => true))
|
1042
|
+
end
|
1043
|
+
next_log = elapsed + log_every
|
1044
|
+
end
|
1045
|
+
end
|
1046
|
+
sleep(@priorities[priority]) # throttle CPU, this is native sleep
|
1047
|
+
i += 1
|
1048
|
+
end
|
1049
|
+
result
|
1050
|
+
end
|
1051
|
+
|
1052
|
+
# Internal: Triggers Roi evaluation.
|
1053
|
+
def do_trigger(key, args={})
|
1054
|
+
if args[:duts].nil?
|
1055
|
+
dut.press_key(key.to_s, args.merge(:sleep_time => 0.ms))
|
1056
|
+
else
|
1057
|
+
threads = args[:duts].map do |d|
|
1058
|
+
Thread.new { d.press_key(key.to_s, args.merge(:sleep_time => 0.ms)) }
|
1059
|
+
end
|
1060
|
+
threads.each { |thr| thr.join }
|
1061
|
+
end
|
1062
|
+
end
|
1063
|
+
|
1064
|
+
end
|