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