angular-gem 1.1.4 → 1.1.5

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 (619) hide show
  1. data/CHANGELOG.md +4 -0
  2. data/README.md +4 -0
  3. data/Rakefile +2 -83
  4. data/lib/angular-gem/version.rb +1 -1
  5. data/lib/tasks/copy.rake +76 -0
  6. data/lib/tasks/tag.rake +42 -0
  7. data/test/dummy/log/test.log +1 -0
  8. data/test/dummy/tmp/cache/assets/D65/250/sprockets%2F54a960d46bb0b354e8bd46fa03f5e0e4 +0 -0
  9. data/test/dummy/tmp/cache/assets/D6A/FB0/sprockets%2F92721e9941b77adcfdfba3d060622de2 +0 -0
  10. data/test/dummy/tmp/cache/assets/E07/040/sprockets%2Ff55b8ce9d0f28ce36b768a1c7aeb2ef3 +0 -0
  11. data/vendor/assets/javascripts/1.0.7/angular-1.0.7.js +14847 -0
  12. data/vendor/assets/javascripts/1.0.7/angular-bootstrap-1.0.7.js +175 -0
  13. data/vendor/assets/javascripts/1.0.7/angular-bootstrap-prettify-1.0.7.js +1835 -0
  14. data/vendor/assets/javascripts/1.0.7/angular-cookies-1.0.7.js +185 -0
  15. data/vendor/assets/javascripts/1.0.7/angular-loader-1.0.7.js +277 -0
  16. data/vendor/assets/javascripts/1.0.7/angular-mocks-1.0.7.js +1788 -0
  17. data/vendor/assets/javascripts/1.0.7/angular-resource-1.0.7.js +457 -0
  18. data/vendor/assets/javascripts/1.0.7/angular-sanitize-1.0.7.js +537 -0
  19. data/vendor/assets/javascripts/1.0.7/angular-scenario-1.0.7.js +26310 -0
  20. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_af-na.js +98 -0
  21. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_af-za.js +98 -0
  22. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_af.js +98 -0
  23. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_am-et.js +98 -0
  24. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_am.js +98 -0
  25. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-001.js +98 -0
  26. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-ae.js +98 -0
  27. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-bh.js +98 -0
  28. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-dz.js +98 -0
  29. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-eg.js +98 -0
  30. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-iq.js +98 -0
  31. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-jo.js +98 -0
  32. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-kw.js +98 -0
  33. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-lb.js +98 -0
  34. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-ly.js +98 -0
  35. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-ma.js +98 -0
  36. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-om.js +98 -0
  37. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-qa.js +98 -0
  38. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-sa.js +98 -0
  39. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-sd.js +98 -0
  40. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-sy.js +98 -0
  41. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-tn.js +98 -0
  42. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar-ye.js +98 -0
  43. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ar.js +98 -0
  44. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_bg-bg.js +98 -0
  45. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_bg.js +98 -0
  46. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_bn-bd.js +98 -0
  47. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_bn-in.js +98 -0
  48. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_bn.js +98 -0
  49. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ca-ad.js +98 -0
  50. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ca-es.js +98 -0
  51. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ca.js +98 -0
  52. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_chr.js +4 -0
  53. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_cs-cz.js +98 -0
  54. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_cs.js +98 -0
  55. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_cy.js +4 -0
  56. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_da-dk.js +98 -0
  57. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_da.js +98 -0
  58. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-at.js +98 -0
  59. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-be.js +98 -0
  60. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-ch.js +98 -0
  61. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-de.js +98 -0
  62. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-li.js +98 -0
  63. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de-lu.js +98 -0
  64. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_de.js +98 -0
  65. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_el-cy.js +98 -0
  66. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_el-gr.js +98 -0
  67. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_el-polyton.js +4 -0
  68. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_el.js +98 -0
  69. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-as.js +98 -0
  70. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-au.js +98 -0
  71. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-bb.js +98 -0
  72. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-be.js +98 -0
  73. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-bm.js +98 -0
  74. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-bw.js +98 -0
  75. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-bz.js +98 -0
  76. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-ca.js +98 -0
  77. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-dsrt-us.js +98 -0
  78. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-dsrt.js +98 -0
  79. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-fm.js +98 -0
  80. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-gb.js +98 -0
  81. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-gu.js +98 -0
  82. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-gy.js +98 -0
  83. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-hk.js +98 -0
  84. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-ie.js +98 -0
  85. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-in.js +98 -0
  86. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-iso.js +98 -0
  87. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-jm.js +98 -0
  88. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-mh.js +98 -0
  89. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-mp.js +98 -0
  90. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-mt.js +98 -0
  91. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-mu.js +98 -0
  92. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-na.js +98 -0
  93. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-nz.js +98 -0
  94. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-ph.js +98 -0
  95. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-pk.js +98 -0
  96. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-pr.js +98 -0
  97. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-pw.js +98 -0
  98. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-sg.js +98 -0
  99. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-tc.js +98 -0
  100. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-tt.js +98 -0
  101. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-um.js +98 -0
  102. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-us.js +98 -0
  103. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-vg.js +98 -0
  104. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-vi.js +98 -0
  105. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-za.js +98 -0
  106. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-zw.js +98 -0
  107. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en-zz.js +4 -0
  108. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_en.js +98 -0
  109. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-419.js +98 -0
  110. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ar.js +98 -0
  111. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-bo.js +98 -0
  112. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-cl.js +98 -0
  113. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-co.js +98 -0
  114. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-cr.js +98 -0
  115. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-do.js +98 -0
  116. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ea.js +98 -0
  117. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ec.js +98 -0
  118. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-es.js +98 -0
  119. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-gq.js +98 -0
  120. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-gt.js +98 -0
  121. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-hn.js +98 -0
  122. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ic.js +98 -0
  123. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-mx.js +98 -0
  124. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ni.js +98 -0
  125. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-pa.js +98 -0
  126. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-pe.js +98 -0
  127. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-pr.js +98 -0
  128. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-py.js +98 -0
  129. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-sv.js +98 -0
  130. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-us.js +98 -0
  131. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-uy.js +98 -0
  132. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es-ve.js +98 -0
  133. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_es.js +98 -0
  134. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_et-ee.js +98 -0
  135. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_et.js +98 -0
  136. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_eu-es.js +98 -0
  137. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_eu.js +98 -0
  138. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fa-af.js +98 -0
  139. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fa-ir.js +98 -0
  140. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fa.js +98 -0
  141. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fi-fi.js +98 -0
  142. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fi.js +98 -0
  143. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fil-ph.js +98 -0
  144. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fil.js +98 -0
  145. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-be.js +98 -0
  146. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-bf.js +98 -0
  147. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-bi.js +98 -0
  148. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-bj.js +98 -0
  149. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-bl.js +98 -0
  150. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ca.js +98 -0
  151. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-cd.js +98 -0
  152. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-cf.js +98 -0
  153. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-cg.js +98 -0
  154. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ch.js +98 -0
  155. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ci.js +98 -0
  156. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-cm.js +98 -0
  157. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-dj.js +98 -0
  158. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-fr.js +98 -0
  159. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ga.js +98 -0
  160. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-gf.js +98 -0
  161. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-gn.js +98 -0
  162. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-gp.js +98 -0
  163. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-gq.js +98 -0
  164. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-km.js +98 -0
  165. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-lu.js +98 -0
  166. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-mc.js +98 -0
  167. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-mf.js +98 -0
  168. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-mg.js +98 -0
  169. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ml.js +98 -0
  170. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-mq.js +98 -0
  171. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-ne.js +98 -0
  172. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-re.js +98 -0
  173. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-rw.js +98 -0
  174. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-sn.js +98 -0
  175. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-td.js +98 -0
  176. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-tg.js +98 -0
  177. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr-yt.js +98 -0
  178. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_fr.js +98 -0
  179. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gl-es.js +98 -0
  180. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gl.js +98 -0
  181. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gsw-ch.js +98 -0
  182. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gsw.js +98 -0
  183. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gu-in.js +98 -0
  184. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_gu.js +98 -0
  185. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_haw.js +4 -0
  186. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_he-il.js +98 -0
  187. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_he.js +98 -0
  188. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hi-in.js +98 -0
  189. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hi.js +98 -0
  190. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hr-hr.js +98 -0
  191. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hr.js +98 -0
  192. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hu-hu.js +98 -0
  193. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_hu.js +98 -0
  194. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_id-id.js +98 -0
  195. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_id.js +98 -0
  196. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_in.js +98 -0
  197. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_is-is.js +98 -0
  198. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_is.js +98 -0
  199. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_it-ch.js +98 -0
  200. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_it-it.js +98 -0
  201. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_it-sm.js +98 -0
  202. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_it.js +98 -0
  203. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_iw.js +98 -0
  204. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ja-jp.js +98 -0
  205. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ja.js +98 -0
  206. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_kn-in.js +98 -0
  207. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_kn.js +98 -0
  208. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ko-kr.js +98 -0
  209. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ko.js +98 -0
  210. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ln-cd.js +98 -0
  211. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ln-cg.js +98 -0
  212. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ln.js +98 -0
  213. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_lt-lt.js +98 -0
  214. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_lt.js +98 -0
  215. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_lv-lv.js +98 -0
  216. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_lv.js +98 -0
  217. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ml-in.js +98 -0
  218. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ml.js +98 -0
  219. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_mo.js +4 -0
  220. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_mr-in.js +98 -0
  221. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_mr.js +98 -0
  222. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ms-bn.js +98 -0
  223. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ms-my.js +98 -0
  224. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ms.js +98 -0
  225. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_mt-mt.js +98 -0
  226. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_mt.js +98 -0
  227. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl-aw.js +98 -0
  228. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl-be.js +98 -0
  229. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl-cw.js +98 -0
  230. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl-nl.js +98 -0
  231. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl-sx.js +98 -0
  232. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_nl.js +98 -0
  233. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_no.js +98 -0
  234. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_or-in.js +98 -0
  235. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_or.js +98 -0
  236. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pl-pl.js +98 -0
  237. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pl.js +98 -0
  238. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-ao.js +98 -0
  239. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-br.js +98 -0
  240. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-gw.js +98 -0
  241. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-mz.js +98 -0
  242. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-pt.js +98 -0
  243. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt-st.js +98 -0
  244. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_pt.js +98 -0
  245. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ro-md.js +98 -0
  246. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ro-ro.js +98 -0
  247. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ro.js +98 -0
  248. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ru-md.js +98 -0
  249. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ru-ru.js +98 -0
  250. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ru-ua.js +98 -0
  251. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ru.js +98 -0
  252. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sk-sk.js +98 -0
  253. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sk.js +98 -0
  254. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sl-si.js +98 -0
  255. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sl.js +98 -0
  256. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sq-al.js +98 -0
  257. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sq.js +98 -0
  258. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-cyrl-ba.js +98 -0
  259. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-cyrl-me.js +98 -0
  260. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-cyrl-rs.js +98 -0
  261. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-cyrl.js +98 -0
  262. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-latn-ba.js +98 -0
  263. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-latn-me.js +98 -0
  264. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-latn-rs.js +98 -0
  265. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-latn.js +98 -0
  266. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr-rs.js +4 -0
  267. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sr.js +98 -0
  268. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sv-fi.js +98 -0
  269. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sv-se.js +98 -0
  270. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sv.js +98 -0
  271. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sw-ke.js +98 -0
  272. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sw-tz.js +98 -0
  273. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_sw.js +98 -0
  274. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ta-in.js +98 -0
  275. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ta-lk.js +98 -0
  276. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ta.js +98 -0
  277. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_te-in.js +98 -0
  278. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_te.js +98 -0
  279. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_th-th.js +98 -0
  280. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_th.js +98 -0
  281. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_tl-ph.js +4 -0
  282. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_tl.js +98 -0
  283. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_tr-tr.js +98 -0
  284. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_tr.js +98 -0
  285. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_uk-ua.js +98 -0
  286. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_uk.js +98 -0
  287. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ur-in.js +98 -0
  288. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ur-pk.js +98 -0
  289. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_ur.js +98 -0
  290. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_vi-vn.js +98 -0
  291. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_vi.js +98 -0
  292. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-cn.js +98 -0
  293. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hans-cn.js +98 -0
  294. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hans-hk.js +98 -0
  295. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hans-mo.js +98 -0
  296. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hans-sg.js +98 -0
  297. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hans.js +98 -0
  298. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hant-hk.js +98 -0
  299. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hant-mo.js +98 -0
  300. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hant-tw.js +98 -0
  301. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hant.js +98 -0
  302. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-hk.js +98 -0
  303. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh-tw.js +98 -0
  304. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zh.js +98 -0
  305. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zu-za.js +98 -0
  306. data/vendor/assets/javascripts/1.0.7/i18n/angular-locale_zu.js +98 -0
  307. data/vendor/assets/javascripts/1.1.5/angular-1.1.5.js +16876 -0
  308. data/vendor/assets/javascripts/1.1.5/angular-cookies-1.1.5.js +185 -0
  309. data/vendor/assets/javascripts/1.1.5/angular-loader-1.1.5.js +304 -0
  310. data/vendor/assets/javascripts/1.1.5/angular-mobile-1.1.5.js +460 -0
  311. data/vendor/assets/javascripts/1.1.5/angular-mocks-1.1.5.js +1886 -0
  312. data/vendor/assets/javascripts/1.1.5/angular-resource-1.1.5.js +537 -0
  313. data/vendor/assets/javascripts/1.1.5/angular-sanitize-1.1.5.js +558 -0
  314. data/vendor/assets/javascripts/1.1.5/angular-scenario-1.1.5.js +28463 -0
  315. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_af-na.js +98 -0
  316. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_af-za.js +98 -0
  317. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_af.js +98 -0
  318. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_am-et.js +98 -0
  319. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_am.js +98 -0
  320. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-001.js +98 -0
  321. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-ae.js +98 -0
  322. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-bh.js +98 -0
  323. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-dz.js +98 -0
  324. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-eg.js +98 -0
  325. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-iq.js +98 -0
  326. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-jo.js +98 -0
  327. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-kw.js +98 -0
  328. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-lb.js +98 -0
  329. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-ly.js +98 -0
  330. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-ma.js +98 -0
  331. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-om.js +98 -0
  332. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-qa.js +98 -0
  333. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-sa.js +98 -0
  334. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-sd.js +98 -0
  335. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-sy.js +98 -0
  336. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-tn.js +98 -0
  337. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar-ye.js +98 -0
  338. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ar.js +98 -0
  339. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_bg-bg.js +98 -0
  340. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_bg.js +98 -0
  341. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_bn-bd.js +98 -0
  342. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_bn-in.js +98 -0
  343. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_bn.js +98 -0
  344. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ca-ad.js +98 -0
  345. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ca-es.js +98 -0
  346. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ca.js +98 -0
  347. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_chr.js +4 -0
  348. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_cs-cz.js +98 -0
  349. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_cs.js +98 -0
  350. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_cy.js +4 -0
  351. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_da-dk.js +98 -0
  352. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_da.js +98 -0
  353. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-at.js +98 -0
  354. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-be.js +98 -0
  355. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-ch.js +98 -0
  356. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-de.js +98 -0
  357. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-li.js +98 -0
  358. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de-lu.js +98 -0
  359. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_de.js +98 -0
  360. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_el-cy.js +98 -0
  361. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_el-gr.js +98 -0
  362. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_el-polyton.js +4 -0
  363. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_el.js +98 -0
  364. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-as.js +98 -0
  365. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-au.js +98 -0
  366. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-bb.js +98 -0
  367. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-be.js +98 -0
  368. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-bm.js +98 -0
  369. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-bw.js +98 -0
  370. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-bz.js +98 -0
  371. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-ca.js +98 -0
  372. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-dsrt-us.js +98 -0
  373. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-dsrt.js +98 -0
  374. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-fm.js +98 -0
  375. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-gb.js +98 -0
  376. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-gu.js +98 -0
  377. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-gy.js +98 -0
  378. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-hk.js +98 -0
  379. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-ie.js +98 -0
  380. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-in.js +98 -0
  381. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-iso.js +98 -0
  382. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-jm.js +98 -0
  383. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-mh.js +98 -0
  384. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-mp.js +98 -0
  385. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-mt.js +98 -0
  386. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-mu.js +98 -0
  387. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-na.js +98 -0
  388. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-nz.js +98 -0
  389. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-ph.js +98 -0
  390. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-pk.js +98 -0
  391. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-pr.js +98 -0
  392. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-pw.js +98 -0
  393. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-sg.js +98 -0
  394. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-tc.js +98 -0
  395. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-tt.js +98 -0
  396. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-um.js +98 -0
  397. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-us.js +98 -0
  398. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-vg.js +98 -0
  399. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-vi.js +98 -0
  400. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-za.js +98 -0
  401. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-zw.js +98 -0
  402. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en-zz.js +4 -0
  403. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_en.js +98 -0
  404. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-419.js +98 -0
  405. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ar.js +98 -0
  406. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-bo.js +98 -0
  407. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-cl.js +98 -0
  408. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-co.js +98 -0
  409. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-cr.js +98 -0
  410. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-do.js +98 -0
  411. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ea.js +98 -0
  412. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ec.js +98 -0
  413. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-es.js +98 -0
  414. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-gq.js +98 -0
  415. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-gt.js +98 -0
  416. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-hn.js +98 -0
  417. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ic.js +98 -0
  418. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-mx.js +98 -0
  419. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ni.js +98 -0
  420. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-pa.js +98 -0
  421. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-pe.js +98 -0
  422. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-pr.js +98 -0
  423. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-py.js +98 -0
  424. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-sv.js +98 -0
  425. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-us.js +98 -0
  426. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-uy.js +98 -0
  427. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es-ve.js +98 -0
  428. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_es.js +98 -0
  429. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_et-ee.js +98 -0
  430. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_et.js +98 -0
  431. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_eu-es.js +98 -0
  432. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_eu.js +98 -0
  433. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fa-af.js +98 -0
  434. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fa-ir.js +98 -0
  435. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fa.js +98 -0
  436. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fi-fi.js +98 -0
  437. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fi.js +98 -0
  438. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fil-ph.js +98 -0
  439. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fil.js +98 -0
  440. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-be.js +98 -0
  441. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-bf.js +98 -0
  442. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-bi.js +98 -0
  443. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-bj.js +98 -0
  444. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-bl.js +98 -0
  445. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ca.js +98 -0
  446. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-cd.js +98 -0
  447. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-cf.js +98 -0
  448. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-cg.js +98 -0
  449. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ch.js +98 -0
  450. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ci.js +98 -0
  451. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-cm.js +98 -0
  452. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-dj.js +98 -0
  453. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-fr.js +98 -0
  454. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ga.js +98 -0
  455. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-gf.js +98 -0
  456. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-gn.js +98 -0
  457. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-gp.js +98 -0
  458. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-gq.js +98 -0
  459. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-km.js +98 -0
  460. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-lu.js +98 -0
  461. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-mc.js +98 -0
  462. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-mf.js +98 -0
  463. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-mg.js +98 -0
  464. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ml.js +98 -0
  465. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-mq.js +98 -0
  466. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-ne.js +98 -0
  467. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-re.js +98 -0
  468. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-rw.js +98 -0
  469. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-sn.js +98 -0
  470. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-td.js +98 -0
  471. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-tg.js +98 -0
  472. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr-yt.js +98 -0
  473. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_fr.js +98 -0
  474. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gl-es.js +98 -0
  475. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gl.js +98 -0
  476. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gsw-ch.js +98 -0
  477. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gsw.js +98 -0
  478. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gu-in.js +98 -0
  479. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_gu.js +98 -0
  480. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_haw.js +4 -0
  481. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_he-il.js +98 -0
  482. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_he.js +98 -0
  483. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hi-in.js +98 -0
  484. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hi.js +98 -0
  485. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hr-hr.js +98 -0
  486. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hr.js +98 -0
  487. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hu-hu.js +98 -0
  488. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_hu.js +98 -0
  489. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_id-id.js +98 -0
  490. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_id.js +98 -0
  491. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_in.js +98 -0
  492. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_is-is.js +98 -0
  493. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_is.js +98 -0
  494. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_it-ch.js +98 -0
  495. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_it-it.js +98 -0
  496. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_it-sm.js +98 -0
  497. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_it.js +98 -0
  498. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_iw.js +98 -0
  499. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ja-jp.js +98 -0
  500. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ja.js +98 -0
  501. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_kn-in.js +98 -0
  502. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_kn.js +98 -0
  503. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ko-kr.js +98 -0
  504. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ko.js +98 -0
  505. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ln-cd.js +98 -0
  506. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ln-cg.js +98 -0
  507. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ln.js +98 -0
  508. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_lt-lt.js +98 -0
  509. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_lt.js +98 -0
  510. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_lv-lv.js +98 -0
  511. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_lv.js +98 -0
  512. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ml-in.js +98 -0
  513. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ml.js +98 -0
  514. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_mo.js +4 -0
  515. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_mr-in.js +98 -0
  516. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_mr.js +98 -0
  517. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ms-bn.js +98 -0
  518. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ms-my.js +98 -0
  519. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ms.js +98 -0
  520. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_mt-mt.js +98 -0
  521. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_mt.js +98 -0
  522. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl-aw.js +98 -0
  523. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl-be.js +98 -0
  524. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl-cw.js +98 -0
  525. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl-nl.js +98 -0
  526. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl-sx.js +98 -0
  527. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_nl.js +98 -0
  528. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_no.js +98 -0
  529. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_or-in.js +98 -0
  530. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_or.js +98 -0
  531. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pl-pl.js +98 -0
  532. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pl.js +98 -0
  533. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-ao.js +98 -0
  534. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-br.js +98 -0
  535. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-gw.js +98 -0
  536. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-mz.js +98 -0
  537. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-pt.js +98 -0
  538. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt-st.js +98 -0
  539. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_pt.js +98 -0
  540. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ro-md.js +98 -0
  541. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ro-ro.js +98 -0
  542. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ro.js +98 -0
  543. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ru-md.js +98 -0
  544. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ru-ru.js +98 -0
  545. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ru-ua.js +98 -0
  546. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ru.js +98 -0
  547. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sk-sk.js +98 -0
  548. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sk.js +98 -0
  549. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sl-si.js +98 -0
  550. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sl.js +98 -0
  551. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sq-al.js +98 -0
  552. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sq.js +98 -0
  553. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-cyrl-ba.js +98 -0
  554. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-cyrl-me.js +98 -0
  555. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-cyrl-rs.js +98 -0
  556. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-cyrl.js +98 -0
  557. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-latn-ba.js +98 -0
  558. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-latn-me.js +98 -0
  559. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-latn-rs.js +98 -0
  560. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-latn.js +98 -0
  561. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr-rs.js +4 -0
  562. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sr.js +98 -0
  563. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sv-fi.js +98 -0
  564. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sv-se.js +98 -0
  565. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sv.js +98 -0
  566. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sw-ke.js +98 -0
  567. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sw-tz.js +98 -0
  568. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_sw.js +98 -0
  569. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ta-in.js +98 -0
  570. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ta-lk.js +98 -0
  571. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ta.js +98 -0
  572. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_te-in.js +98 -0
  573. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_te.js +98 -0
  574. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_th-th.js +98 -0
  575. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_th.js +98 -0
  576. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_tl-ph.js +4 -0
  577. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_tl.js +98 -0
  578. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_tr-tr.js +98 -0
  579. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_tr.js +98 -0
  580. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_uk-ua.js +98 -0
  581. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_uk.js +98 -0
  582. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ur-in.js +98 -0
  583. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ur-pk.js +98 -0
  584. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_ur.js +98 -0
  585. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_vi-vn.js +98 -0
  586. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_vi.js +98 -0
  587. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-cn.js +98 -0
  588. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hans-cn.js +98 -0
  589. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hans-hk.js +98 -0
  590. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hans-mo.js +98 -0
  591. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hans-sg.js +98 -0
  592. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hans.js +98 -0
  593. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hant-hk.js +98 -0
  594. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hant-mo.js +98 -0
  595. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hant-tw.js +98 -0
  596. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hant.js +98 -0
  597. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-hk.js +98 -0
  598. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh-tw.js +98 -0
  599. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zh.js +98 -0
  600. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zu-za.js +98 -0
  601. data/vendor/assets/javascripts/1.1.5/i18n/angular-locale_zu.js +98 -0
  602. data/vendor/assets/javascripts/angular-bootstrap-prettify.js +1835 -0
  603. data/vendor/assets/javascripts/angular-bootstrap.js +175 -0
  604. data/vendor/assets/javascripts/angular-cookies-unstable.js +185 -0
  605. data/vendor/assets/javascripts/angular-cookies.js +185 -0
  606. data/vendor/assets/javascripts/angular-loader-unstable.js +304 -0
  607. data/vendor/assets/javascripts/angular-loader.js +277 -0
  608. data/vendor/assets/javascripts/angular-mobile-unstable.js +460 -0
  609. data/vendor/assets/javascripts/angular-mocks-unstable.js +1886 -0
  610. data/vendor/assets/javascripts/angular-mocks.js +1788 -0
  611. data/vendor/assets/javascripts/angular-resource-unstable.js +25 -9
  612. data/vendor/assets/javascripts/angular-resource.js +1 -1
  613. data/vendor/assets/javascripts/angular-sanitize-unstable.js +1 -1
  614. data/vendor/assets/javascripts/angular-sanitize.js +1 -1
  615. data/vendor/assets/javascripts/angular-scenario-unstable.js +28463 -0
  616. data/vendor/assets/javascripts/angular-scenario.js +26310 -0
  617. data/vendor/assets/javascripts/angular-unstable.js +1229 -667
  618. data/vendor/assets/javascripts/angular.js +276 -189
  619. metadata +606 -2
@@ -0,0 +1,1886 @@
1
+ /**
2
+ * @license AngularJS v1.1.5
3
+ * (c) 2010-2012 Google, Inc. http://angularjs.org
4
+ * License: MIT
5
+ *
6
+ * TODO(vojta): wrap whole file into closure during build
7
+ */
8
+
9
+ /**
10
+ * @ngdoc overview
11
+ * @name angular.mock
12
+ * @description
13
+ *
14
+ * Namespace from 'angular-mocks.js' which contains testing related code.
15
+ */
16
+ angular.mock = {};
17
+
18
+ /**
19
+ * ! This is a private undocumented service !
20
+ *
21
+ * @name ngMock.$browser
22
+ *
23
+ * @description
24
+ * This service is a mock implementation of {@link ng.$browser}. It provides fake
25
+ * implementation for commonly used browser apis that are hard to test, e.g. setTimeout, xhr,
26
+ * cookies, etc...
27
+ *
28
+ * The api of this service is the same as that of the real {@link ng.$browser $browser}, except
29
+ * that there are several helper methods available which can be used in tests.
30
+ */
31
+ angular.mock.$BrowserProvider = function() {
32
+ this.$get = function(){
33
+ return new angular.mock.$Browser();
34
+ };
35
+ };
36
+
37
+ angular.mock.$Browser = function() {
38
+ var self = this;
39
+
40
+ this.isMock = true;
41
+ self.$$url = "http://server/";
42
+ self.$$lastUrl = self.$$url; // used by url polling fn
43
+ self.pollFns = [];
44
+
45
+ // TODO(vojta): remove this temporary api
46
+ self.$$completeOutstandingRequest = angular.noop;
47
+ self.$$incOutstandingRequestCount = angular.noop;
48
+
49
+
50
+ // register url polling fn
51
+
52
+ self.onUrlChange = function(listener) {
53
+ self.pollFns.push(
54
+ function() {
55
+ if (self.$$lastUrl != self.$$url) {
56
+ self.$$lastUrl = self.$$url;
57
+ listener(self.$$url);
58
+ }
59
+ }
60
+ );
61
+
62
+ return listener;
63
+ };
64
+
65
+ self.cookieHash = {};
66
+ self.lastCookieHash = {};
67
+ self.deferredFns = [];
68
+ self.deferredNextId = 0;
69
+
70
+ self.defer = function(fn, delay) {
71
+ delay = delay || 0;
72
+ self.deferredFns.push({time:(self.defer.now + delay), fn:fn, id: self.deferredNextId});
73
+ self.deferredFns.sort(function(a,b){ return a.time - b.time;});
74
+ return self.deferredNextId++;
75
+ };
76
+
77
+
78
+ self.defer.now = 0;
79
+
80
+
81
+ self.defer.cancel = function(deferId) {
82
+ var fnIndex;
83
+
84
+ angular.forEach(self.deferredFns, function(fn, index) {
85
+ if (fn.id === deferId) fnIndex = index;
86
+ });
87
+
88
+ if (fnIndex !== undefined) {
89
+ self.deferredFns.splice(fnIndex, 1);
90
+ return true;
91
+ }
92
+
93
+ return false;
94
+ };
95
+
96
+
97
+ /**
98
+ * @name ngMock.$browser#defer.flush
99
+ * @methodOf ngMock.$browser
100
+ *
101
+ * @description
102
+ * Flushes all pending requests and executes the defer callbacks.
103
+ *
104
+ * @param {number=} number of milliseconds to flush. See {@link #defer.now}
105
+ */
106
+ self.defer.flush = function(delay) {
107
+ if (angular.isDefined(delay)) {
108
+ self.defer.now += delay;
109
+ } else {
110
+ if (self.deferredFns.length) {
111
+ self.defer.now = self.deferredFns[self.deferredFns.length-1].time;
112
+ } else {
113
+ throw Error('No deferred tasks to be flushed');
114
+ }
115
+ }
116
+
117
+ while (self.deferredFns.length && self.deferredFns[0].time <= self.defer.now) {
118
+ self.deferredFns.shift().fn();
119
+ }
120
+ };
121
+ /**
122
+ * @name ngMock.$browser#defer.now
123
+ * @propertyOf ngMock.$browser
124
+ *
125
+ * @description
126
+ * Current milliseconds mock time.
127
+ */
128
+
129
+ self.$$baseHref = '';
130
+ self.baseHref = function() {
131
+ return this.$$baseHref;
132
+ };
133
+ };
134
+ angular.mock.$Browser.prototype = {
135
+
136
+ /**
137
+ * @name ngMock.$browser#poll
138
+ * @methodOf ngMock.$browser
139
+ *
140
+ * @description
141
+ * run all fns in pollFns
142
+ */
143
+ poll: function poll() {
144
+ angular.forEach(this.pollFns, function(pollFn){
145
+ pollFn();
146
+ });
147
+ },
148
+
149
+ addPollFn: function(pollFn) {
150
+ this.pollFns.push(pollFn);
151
+ return pollFn;
152
+ },
153
+
154
+ url: function(url, replace) {
155
+ if (url) {
156
+ this.$$url = url;
157
+ return this;
158
+ }
159
+
160
+ return this.$$url;
161
+ },
162
+
163
+ cookies: function(name, value) {
164
+ if (name) {
165
+ if (value == undefined) {
166
+ delete this.cookieHash[name];
167
+ } else {
168
+ if (angular.isString(value) && //strings only
169
+ value.length <= 4096) { //strict cookie storage limits
170
+ this.cookieHash[name] = value;
171
+ }
172
+ }
173
+ } else {
174
+ if (!angular.equals(this.cookieHash, this.lastCookieHash)) {
175
+ this.lastCookieHash = angular.copy(this.cookieHash);
176
+ this.cookieHash = angular.copy(this.cookieHash);
177
+ }
178
+ return this.cookieHash;
179
+ }
180
+ },
181
+
182
+ notifyWhenNoOutstandingRequests: function(fn) {
183
+ fn();
184
+ }
185
+ };
186
+
187
+
188
+ /**
189
+ * @ngdoc object
190
+ * @name ngMock.$exceptionHandlerProvider
191
+ *
192
+ * @description
193
+ * Configures the mock implementation of {@link ng.$exceptionHandler} to rethrow or to log errors passed
194
+ * into the `$exceptionHandler`.
195
+ */
196
+
197
+ /**
198
+ * @ngdoc object
199
+ * @name ngMock.$exceptionHandler
200
+ *
201
+ * @description
202
+ * Mock implementation of {@link ng.$exceptionHandler} that rethrows or logs errors passed
203
+ * into it. See {@link ngMock.$exceptionHandlerProvider $exceptionHandlerProvider} for configuration
204
+ * information.
205
+ *
206
+ *
207
+ * <pre>
208
+ * describe('$exceptionHandlerProvider', function() {
209
+ *
210
+ * it('should capture log messages and exceptions', function() {
211
+ *
212
+ * module(function($exceptionHandlerProvider) {
213
+ * $exceptionHandlerProvider.mode('log');
214
+ * });
215
+ *
216
+ * inject(function($log, $exceptionHandler, $timeout) {
217
+ * $timeout(function() { $log.log(1); });
218
+ * $timeout(function() { $log.log(2); throw 'banana peel'; });
219
+ * $timeout(function() { $log.log(3); });
220
+ * expect($exceptionHandler.errors).toEqual([]);
221
+ * expect($log.assertEmpty());
222
+ * $timeout.flush();
223
+ * expect($exceptionHandler.errors).toEqual(['banana peel']);
224
+ * expect($log.log.logs).toEqual([[1], [2], [3]]);
225
+ * });
226
+ * });
227
+ * });
228
+ * </pre>
229
+ */
230
+
231
+ angular.mock.$ExceptionHandlerProvider = function() {
232
+ var handler;
233
+
234
+ /**
235
+ * @ngdoc method
236
+ * @name ngMock.$exceptionHandlerProvider#mode
237
+ * @methodOf ngMock.$exceptionHandlerProvider
238
+ *
239
+ * @description
240
+ * Sets the logging mode.
241
+ *
242
+ * @param {string} mode Mode of operation, defaults to `rethrow`.
243
+ *
244
+ * - `rethrow`: If any errors are passed into the handler in tests, it typically
245
+ * means that there is a bug in the application or test, so this mock will
246
+ * make these tests fail.
247
+ * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` mode stores an
248
+ * array of errors in `$exceptionHandler.errors`, to allow later assertion of them.
249
+ * See {@link ngMock.$log#assertEmpty assertEmpty()} and
250
+ * {@link ngMock.$log#reset reset()}
251
+ */
252
+ this.mode = function(mode) {
253
+ switch(mode) {
254
+ case 'rethrow':
255
+ handler = function(e) {
256
+ throw e;
257
+ };
258
+ break;
259
+ case 'log':
260
+ var errors = [];
261
+
262
+ handler = function(e) {
263
+ if (arguments.length == 1) {
264
+ errors.push(e);
265
+ } else {
266
+ errors.push([].slice.call(arguments, 0));
267
+ }
268
+ };
269
+
270
+ handler.errors = errors;
271
+ break;
272
+ default:
273
+ throw Error("Unknown mode '" + mode + "', only 'log'/'rethrow' modes are allowed!");
274
+ }
275
+ };
276
+
277
+ this.$get = function() {
278
+ return handler;
279
+ };
280
+
281
+ this.mode('rethrow');
282
+ };
283
+
284
+
285
+ /**
286
+ * @ngdoc service
287
+ * @name ngMock.$log
288
+ *
289
+ * @description
290
+ * Mock implementation of {@link ng.$log} that gathers all logged messages in arrays
291
+ * (one array per logging level). These arrays are exposed as `logs` property of each of the
292
+ * level-specific log function, e.g. for level `error` the array is exposed as `$log.error.logs`.
293
+ *
294
+ */
295
+ angular.mock.$LogProvider = function() {
296
+
297
+ function concat(array1, array2, index) {
298
+ return array1.concat(Array.prototype.slice.call(array2, index));
299
+ }
300
+
301
+
302
+ this.$get = function () {
303
+ var $log = {
304
+ log: function() { $log.log.logs.push(concat([], arguments, 0)); },
305
+ warn: function() { $log.warn.logs.push(concat([], arguments, 0)); },
306
+ info: function() { $log.info.logs.push(concat([], arguments, 0)); },
307
+ error: function() { $log.error.logs.push(concat([], arguments, 0)); }
308
+ };
309
+
310
+ /**
311
+ * @ngdoc method
312
+ * @name ngMock.$log#reset
313
+ * @methodOf ngMock.$log
314
+ *
315
+ * @description
316
+ * Reset all of the logging arrays to empty.
317
+ */
318
+ $log.reset = function () {
319
+ /**
320
+ * @ngdoc property
321
+ * @name ngMock.$log#log.logs
322
+ * @propertyOf ngMock.$log
323
+ *
324
+ * @description
325
+ * Array of messages logged using {@link ngMock.$log#log}.
326
+ *
327
+ * @example
328
+ * <pre>
329
+ * $log.log('Some Log');
330
+ * var first = $log.log.logs.unshift();
331
+ * </pre>
332
+ */
333
+ $log.log.logs = [];
334
+ /**
335
+ * @ngdoc property
336
+ * @name ngMock.$log#warn.logs
337
+ * @propertyOf ngMock.$log
338
+ *
339
+ * @description
340
+ * Array of messages logged using {@link ngMock.$log#warn}.
341
+ *
342
+ * @example
343
+ * <pre>
344
+ * $log.warn('Some Warning');
345
+ * var first = $log.warn.logs.unshift();
346
+ * </pre>
347
+ */
348
+ $log.warn.logs = [];
349
+ /**
350
+ * @ngdoc property
351
+ * @name ngMock.$log#info.logs
352
+ * @propertyOf ngMock.$log
353
+ *
354
+ * @description
355
+ * Array of messages logged using {@link ngMock.$log#info}.
356
+ *
357
+ * @example
358
+ * <pre>
359
+ * $log.info('Some Info');
360
+ * var first = $log.info.logs.unshift();
361
+ * </pre>
362
+ */
363
+ $log.info.logs = [];
364
+ /**
365
+ * @ngdoc property
366
+ * @name ngMock.$log#error.logs
367
+ * @propertyOf ngMock.$log
368
+ *
369
+ * @description
370
+ * Array of messages logged using {@link ngMock.$log#error}.
371
+ *
372
+ * @example
373
+ * <pre>
374
+ * $log.log('Some Error');
375
+ * var first = $log.error.logs.unshift();
376
+ * </pre>
377
+ */
378
+ $log.error.logs = [];
379
+ };
380
+
381
+ /**
382
+ * @ngdoc method
383
+ * @name ngMock.$log#assertEmpty
384
+ * @methodOf ngMock.$log
385
+ *
386
+ * @description
387
+ * Assert that the all of the logging methods have no logged messages. If messages present, an exception is thrown.
388
+ */
389
+ $log.assertEmpty = function() {
390
+ var errors = [];
391
+ angular.forEach(['error', 'warn', 'info', 'log'], function(logLevel) {
392
+ angular.forEach($log[logLevel].logs, function(log) {
393
+ angular.forEach(log, function (logItem) {
394
+ errors.push('MOCK $log (' + logLevel + '): ' + String(logItem) + '\n' + (logItem.stack || ''));
395
+ });
396
+ });
397
+ });
398
+ if (errors.length) {
399
+ errors.unshift("Expected $log to be empty! Either a message was logged unexpectedly, or an expected " +
400
+ "log message was not checked and removed:");
401
+ errors.push('');
402
+ throw new Error(errors.join('\n---------\n'));
403
+ }
404
+ };
405
+
406
+ $log.reset();
407
+ return $log;
408
+ };
409
+ };
410
+
411
+
412
+ (function() {
413
+ var R_ISO8061_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?:\:?(\d\d)(?:\:?(\d\d)(?:\.(\d{3}))?)?)?(Z|([+-])(\d\d):?(\d\d)))?$/;
414
+
415
+ function jsonStringToDate(string){
416
+ var match;
417
+ if (match = string.match(R_ISO8061_STR)) {
418
+ var date = new Date(0),
419
+ tzHour = 0,
420
+ tzMin = 0;
421
+ if (match[9]) {
422
+ tzHour = int(match[9] + match[10]);
423
+ tzMin = int(match[9] + match[11]);
424
+ }
425
+ date.setUTCFullYear(int(match[1]), int(match[2]) - 1, int(match[3]));
426
+ date.setUTCHours(int(match[4]||0) - tzHour, int(match[5]||0) - tzMin, int(match[6]||0), int(match[7]||0));
427
+ return date;
428
+ }
429
+ return string;
430
+ }
431
+
432
+ function int(str) {
433
+ return parseInt(str, 10);
434
+ }
435
+
436
+ function padNumber(num, digits, trim) {
437
+ var neg = '';
438
+ if (num < 0) {
439
+ neg = '-';
440
+ num = -num;
441
+ }
442
+ num = '' + num;
443
+ while(num.length < digits) num = '0' + num;
444
+ if (trim)
445
+ num = num.substr(num.length - digits);
446
+ return neg + num;
447
+ }
448
+
449
+
450
+ /**
451
+ * @ngdoc object
452
+ * @name angular.mock.TzDate
453
+ * @description
454
+ *
455
+ * *NOTE*: this is not an injectable instance, just a globally available mock class of `Date`.
456
+ *
457
+ * Mock of the Date type which has its timezone specified via constructor arg.
458
+ *
459
+ * The main purpose is to create Date-like instances with timezone fixed to the specified timezone
460
+ * offset, so that we can test code that depends on local timezone settings without dependency on
461
+ * the time zone settings of the machine where the code is running.
462
+ *
463
+ * @param {number} offset Offset of the *desired* timezone in hours (fractions will be honored)
464
+ * @param {(number|string)} timestamp Timestamp representing the desired time in *UTC*
465
+ *
466
+ * @example
467
+ * !!!! WARNING !!!!!
468
+ * This is not a complete Date object so only methods that were implemented can be called safely.
469
+ * To make matters worse, TzDate instances inherit stuff from Date via a prototype.
470
+ *
471
+ * We do our best to intercept calls to "unimplemented" methods, but since the list of methods is
472
+ * incomplete we might be missing some non-standard methods. This can result in errors like:
473
+ * "Date.prototype.foo called on incompatible Object".
474
+ *
475
+ * <pre>
476
+ * var newYearInBratislava = new TzDate(-1, '2009-12-31T23:00:00Z');
477
+ * newYearInBratislava.getTimezoneOffset() => -60;
478
+ * newYearInBratislava.getFullYear() => 2010;
479
+ * newYearInBratislava.getMonth() => 0;
480
+ * newYearInBratislava.getDate() => 1;
481
+ * newYearInBratislava.getHours() => 0;
482
+ * newYearInBratislava.getMinutes() => 0;
483
+ * newYearInBratislava.getSeconds() => 0;
484
+ * </pre>
485
+ *
486
+ */
487
+ angular.mock.TzDate = function (offset, timestamp) {
488
+ var self = new Date(0);
489
+ if (angular.isString(timestamp)) {
490
+ var tsStr = timestamp;
491
+
492
+ self.origDate = jsonStringToDate(timestamp);
493
+
494
+ timestamp = self.origDate.getTime();
495
+ if (isNaN(timestamp))
496
+ throw {
497
+ name: "Illegal Argument",
498
+ message: "Arg '" + tsStr + "' passed into TzDate constructor is not a valid date string"
499
+ };
500
+ } else {
501
+ self.origDate = new Date(timestamp);
502
+ }
503
+
504
+ var localOffset = new Date(timestamp).getTimezoneOffset();
505
+ self.offsetDiff = localOffset*60*1000 - offset*1000*60*60;
506
+ self.date = new Date(timestamp + self.offsetDiff);
507
+
508
+ self.getTime = function() {
509
+ return self.date.getTime() - self.offsetDiff;
510
+ };
511
+
512
+ self.toLocaleDateString = function() {
513
+ return self.date.toLocaleDateString();
514
+ };
515
+
516
+ self.getFullYear = function() {
517
+ return self.date.getFullYear();
518
+ };
519
+
520
+ self.getMonth = function() {
521
+ return self.date.getMonth();
522
+ };
523
+
524
+ self.getDate = function() {
525
+ return self.date.getDate();
526
+ };
527
+
528
+ self.getHours = function() {
529
+ return self.date.getHours();
530
+ };
531
+
532
+ self.getMinutes = function() {
533
+ return self.date.getMinutes();
534
+ };
535
+
536
+ self.getSeconds = function() {
537
+ return self.date.getSeconds();
538
+ };
539
+
540
+ self.getMilliseconds = function() {
541
+ return self.date.getMilliseconds();
542
+ };
543
+
544
+ self.getTimezoneOffset = function() {
545
+ return offset * 60;
546
+ };
547
+
548
+ self.getUTCFullYear = function() {
549
+ return self.origDate.getUTCFullYear();
550
+ };
551
+
552
+ self.getUTCMonth = function() {
553
+ return self.origDate.getUTCMonth();
554
+ };
555
+
556
+ self.getUTCDate = function() {
557
+ return self.origDate.getUTCDate();
558
+ };
559
+
560
+ self.getUTCHours = function() {
561
+ return self.origDate.getUTCHours();
562
+ };
563
+
564
+ self.getUTCMinutes = function() {
565
+ return self.origDate.getUTCMinutes();
566
+ };
567
+
568
+ self.getUTCSeconds = function() {
569
+ return self.origDate.getUTCSeconds();
570
+ };
571
+
572
+ self.getUTCMilliseconds = function() {
573
+ return self.origDate.getUTCMilliseconds();
574
+ };
575
+
576
+ self.getDay = function() {
577
+ return self.date.getDay();
578
+ };
579
+
580
+ // provide this method only on browsers that already have it
581
+ if (self.toISOString) {
582
+ self.toISOString = function() {
583
+ return padNumber(self.origDate.getUTCFullYear(), 4) + '-' +
584
+ padNumber(self.origDate.getUTCMonth() + 1, 2) + '-' +
585
+ padNumber(self.origDate.getUTCDate(), 2) + 'T' +
586
+ padNumber(self.origDate.getUTCHours(), 2) + ':' +
587
+ padNumber(self.origDate.getUTCMinutes(), 2) + ':' +
588
+ padNumber(self.origDate.getUTCSeconds(), 2) + '.' +
589
+ padNumber(self.origDate.getUTCMilliseconds(), 3) + 'Z'
590
+ }
591
+ }
592
+
593
+ //hide all methods not implemented in this mock that the Date prototype exposes
594
+ var unimplementedMethods = ['getUTCDay',
595
+ 'getYear', 'setDate', 'setFullYear', 'setHours', 'setMilliseconds',
596
+ 'setMinutes', 'setMonth', 'setSeconds', 'setTime', 'setUTCDate', 'setUTCFullYear',
597
+ 'setUTCHours', 'setUTCMilliseconds', 'setUTCMinutes', 'setUTCMonth', 'setUTCSeconds',
598
+ 'setYear', 'toDateString', 'toGMTString', 'toJSON', 'toLocaleFormat', 'toLocaleString',
599
+ 'toLocaleTimeString', 'toSource', 'toString', 'toTimeString', 'toUTCString', 'valueOf'];
600
+
601
+ angular.forEach(unimplementedMethods, function(methodName) {
602
+ self[methodName] = function() {
603
+ throw Error("Method '" + methodName + "' is not implemented in the TzDate mock");
604
+ };
605
+ });
606
+
607
+ return self;
608
+ };
609
+
610
+ //make "tzDateInstance instanceof Date" return true
611
+ angular.mock.TzDate.prototype = Date.prototype;
612
+ })();
613
+
614
+ /**
615
+ * @ngdoc function
616
+ * @name angular.mock.createMockWindow
617
+ * @description
618
+ *
619
+ * This function creates a mock window object useful for controlling access ot setTimeout, but mocking out
620
+ * sufficient window's properties to allow Angular to execute.
621
+ *
622
+ * @example
623
+ *
624
+ * <pre>
625
+ beforeEach(module(function($provide) {
626
+ $provide.value('$window', window = angular.mock.createMockWindow());
627
+ }));
628
+
629
+ it('should do something', inject(function($window) {
630
+ var val = null;
631
+ $window.setTimeout(function() { val = 123; }, 10);
632
+ expect(val).toEqual(null);
633
+ window.setTimeout.expect(10).process();
634
+ expect(val).toEqual(123);
635
+ });
636
+ * </pre>
637
+ *
638
+ */
639
+ angular.mock.createMockWindow = function() {
640
+ var mockWindow = {};
641
+ var setTimeoutQueue = [];
642
+
643
+ mockWindow.document = window.document;
644
+ mockWindow.getComputedStyle = angular.bind(window, window.getComputedStyle);
645
+ mockWindow.scrollTo = angular.bind(window, window.scrollTo);
646
+ mockWindow.navigator = window.navigator;
647
+ mockWindow.setTimeout = function(fn, delay) {
648
+ setTimeoutQueue.push({fn: fn, delay: delay});
649
+ };
650
+ mockWindow.setTimeout.queue = setTimeoutQueue;
651
+ mockWindow.setTimeout.expect = function(delay) {
652
+ if (setTimeoutQueue.length > 0) {
653
+ return {
654
+ process: function() {
655
+ var tick = setTimeoutQueue.shift();
656
+ expect(tick.delay).toEqual(delay);
657
+ tick.fn();
658
+ }
659
+ };
660
+ } else {
661
+ expect('SetTimoutQueue empty. Expecting delay of ').toEqual(delay);
662
+ }
663
+ };
664
+
665
+ return mockWindow;
666
+ };
667
+
668
+ /**
669
+ * @ngdoc function
670
+ * @name angular.mock.dump
671
+ * @description
672
+ *
673
+ * *NOTE*: this is not an injectable instance, just a globally available function.
674
+ *
675
+ * Method for serializing common angular objects (scope, elements, etc..) into strings, useful for debugging.
676
+ *
677
+ * This method is also available on window, where it can be used to display objects on debug console.
678
+ *
679
+ * @param {*} object - any object to turn into string.
680
+ * @return {string} a serialized string of the argument
681
+ */
682
+ angular.mock.dump = function(object) {
683
+ return serialize(object);
684
+
685
+ function serialize(object) {
686
+ var out;
687
+
688
+ if (angular.isElement(object)) {
689
+ object = angular.element(object);
690
+ out = angular.element('<div></div>');
691
+ angular.forEach(object, function(element) {
692
+ out.append(angular.element(element).clone());
693
+ });
694
+ out = out.html();
695
+ } else if (angular.isArray(object)) {
696
+ out = [];
697
+ angular.forEach(object, function(o) {
698
+ out.push(serialize(o));
699
+ });
700
+ out = '[ ' + out.join(', ') + ' ]';
701
+ } else if (angular.isObject(object)) {
702
+ if (angular.isFunction(object.$eval) && angular.isFunction(object.$apply)) {
703
+ out = serializeScope(object);
704
+ } else if (object instanceof Error) {
705
+ out = object.stack || ('' + object.name + ': ' + object.message);
706
+ } else {
707
+ out = angular.toJson(object, true);
708
+ }
709
+ } else {
710
+ out = String(object);
711
+ }
712
+
713
+ return out;
714
+ }
715
+
716
+ function serializeScope(scope, offset) {
717
+ offset = offset || ' ';
718
+ var log = [offset + 'Scope(' + scope.$id + '): {'];
719
+ for ( var key in scope ) {
720
+ if (scope.hasOwnProperty(key) && !key.match(/^(\$|this)/)) {
721
+ log.push(' ' + key + ': ' + angular.toJson(scope[key]));
722
+ }
723
+ }
724
+ var child = scope.$$childHead;
725
+ while(child) {
726
+ log.push(serializeScope(child, offset + ' '));
727
+ child = child.$$nextSibling;
728
+ }
729
+ log.push('}');
730
+ return log.join('\n' + offset);
731
+ }
732
+ };
733
+
734
+ /**
735
+ * @ngdoc object
736
+ * @name ngMock.$httpBackend
737
+ * @description
738
+ * Fake HTTP backend implementation suitable for unit testing applications that use the
739
+ * {@link ng.$http $http service}.
740
+ *
741
+ * *Note*: For fake HTTP backend implementation suitable for end-to-end testing or backend-less
742
+ * development please see {@link ngMockE2E.$httpBackend e2e $httpBackend mock}.
743
+ *
744
+ * During unit testing, we want our unit tests to run quickly and have no external dependencies so
745
+ * we don’t want to send {@link https://developer.mozilla.org/en/xmlhttprequest XHR} or
746
+ * {@link http://en.wikipedia.org/wiki/JSONP JSONP} requests to a real server. All we really need is
747
+ * to verify whether a certain request has been sent or not, or alternatively just let the
748
+ * application make requests, respond with pre-trained responses and assert that the end result is
749
+ * what we expect it to be.
750
+ *
751
+ * This mock implementation can be used to respond with static or dynamic responses via the
752
+ * `expect` and `when` apis and their shortcuts (`expectGET`, `whenPOST`, etc).
753
+ *
754
+ * When an Angular application needs some data from a server, it calls the $http service, which
755
+ * sends the request to a real server using $httpBackend service. With dependency injection, it is
756
+ * easy to inject $httpBackend mock (which has the same API as $httpBackend) and use it to verify
757
+ * the requests and respond with some testing data without sending a request to real server.
758
+ *
759
+ * There are two ways to specify what test data should be returned as http responses by the mock
760
+ * backend when the code under test makes http requests:
761
+ *
762
+ * - `$httpBackend.expect` - specifies a request expectation
763
+ * - `$httpBackend.when` - specifies a backend definition
764
+ *
765
+ *
766
+ * # Request Expectations vs Backend Definitions
767
+ *
768
+ * Request expectations provide a way to make assertions about requests made by the application and
769
+ * to define responses for those requests. The test will fail if the expected requests are not made
770
+ * or they are made in the wrong order.
771
+ *
772
+ * Backend definitions allow you to define a fake backend for your application which doesn't assert
773
+ * if a particular request was made or not, it just returns a trained response if a request is made.
774
+ * The test will pass whether or not the request gets made during testing.
775
+ *
776
+ *
777
+ * <table class="table">
778
+ * <tr><th width="220px"></th><th>Request expectations</th><th>Backend definitions</th></tr>
779
+ * <tr>
780
+ * <th>Syntax</th>
781
+ * <td>.expect(...).respond(...)</td>
782
+ * <td>.when(...).respond(...)</td>
783
+ * </tr>
784
+ * <tr>
785
+ * <th>Typical usage</th>
786
+ * <td>strict unit tests</td>
787
+ * <td>loose (black-box) unit testing</td>
788
+ * </tr>
789
+ * <tr>
790
+ * <th>Fulfills multiple requests</th>
791
+ * <td>NO</td>
792
+ * <td>YES</td>
793
+ * </tr>
794
+ * <tr>
795
+ * <th>Order of requests matters</th>
796
+ * <td>YES</td>
797
+ * <td>NO</td>
798
+ * </tr>
799
+ * <tr>
800
+ * <th>Request required</th>
801
+ * <td>YES</td>
802
+ * <td>NO</td>
803
+ * </tr>
804
+ * <tr>
805
+ * <th>Response required</th>
806
+ * <td>optional (see below)</td>
807
+ * <td>YES</td>
808
+ * </tr>
809
+ * </table>
810
+ *
811
+ * In cases where both backend definitions and request expectations are specified during unit
812
+ * testing, the request expectations are evaluated first.
813
+ *
814
+ * If a request expectation has no response specified, the algorithm will search your backend
815
+ * definitions for an appropriate response.
816
+ *
817
+ * If a request didn't match any expectation or if the expectation doesn't have the response
818
+ * defined, the backend definitions are evaluated in sequential order to see if any of them match
819
+ * the request. The response from the first matched definition is returned.
820
+ *
821
+ *
822
+ * # Flushing HTTP requests
823
+ *
824
+ * The $httpBackend used in production, always responds to requests with responses asynchronously.
825
+ * If we preserved this behavior in unit testing, we'd have to create async unit tests, which are
826
+ * hard to write, follow and maintain. At the same time the testing mock, can't respond
827
+ * synchronously because that would change the execution of the code under test. For this reason the
828
+ * mock $httpBackend has a `flush()` method, which allows the test to explicitly flush pending
829
+ * requests and thus preserving the async api of the backend, while allowing the test to execute
830
+ * synchronously.
831
+ *
832
+ *
833
+ * # Unit testing with mock $httpBackend
834
+ *
835
+ * <pre>
836
+ // controller
837
+ function MyController($scope, $http) {
838
+ $http.get('/auth.py').success(function(data) {
839
+ $scope.user = data;
840
+ });
841
+
842
+ this.saveMessage = function(message) {
843
+ $scope.status = 'Saving...';
844
+ $http.post('/add-msg.py', message).success(function(response) {
845
+ $scope.status = '';
846
+ }).error(function() {
847
+ $scope.status = 'ERROR!';
848
+ });
849
+ };
850
+ }
851
+
852
+ // testing controller
853
+ var $httpBackend;
854
+
855
+ beforeEach(inject(function($injector) {
856
+ $httpBackend = $injector.get('$httpBackend');
857
+
858
+ // backend definition common for all tests
859
+ $httpBackend.when('GET', '/auth.py').respond({userId: 'userX'}, {'A-Token': 'xxx'});
860
+ }));
861
+
862
+
863
+ afterEach(function() {
864
+ $httpBackend.verifyNoOutstandingExpectation();
865
+ $httpBackend.verifyNoOutstandingRequest();
866
+ });
867
+
868
+
869
+ it('should fetch authentication token', function() {
870
+ $httpBackend.expectGET('/auth.py');
871
+ var controller = scope.$new(MyController);
872
+ $httpBackend.flush();
873
+ });
874
+
875
+
876
+ it('should send msg to server', function() {
877
+ // now you don’t care about the authentication, but
878
+ // the controller will still send the request and
879
+ // $httpBackend will respond without you having to
880
+ // specify the expectation and response for this request
881
+ $httpBackend.expectPOST('/add-msg.py', 'message content').respond(201, '');
882
+
883
+ var controller = scope.$new(MyController);
884
+ $httpBackend.flush();
885
+ controller.saveMessage('message content');
886
+ expect(controller.status).toBe('Saving...');
887
+ $httpBackend.flush();
888
+ expect(controller.status).toBe('');
889
+ });
890
+
891
+
892
+ it('should send auth header', function() {
893
+ $httpBackend.expectPOST('/add-msg.py', undefined, function(headers) {
894
+ // check if the header was send, if it wasn't the expectation won't
895
+ // match the request and the test will fail
896
+ return headers['Authorization'] == 'xxx';
897
+ }).respond(201, '');
898
+
899
+ var controller = scope.$new(MyController);
900
+ controller.saveMessage('whatever');
901
+ $httpBackend.flush();
902
+ });
903
+ </pre>
904
+ */
905
+ angular.mock.$HttpBackendProvider = function() {
906
+ this.$get = ['$rootScope', createHttpBackendMock];
907
+ };
908
+
909
+ /**
910
+ * General factory function for $httpBackend mock.
911
+ * Returns instance for unit testing (when no arguments specified):
912
+ * - passing through is disabled
913
+ * - auto flushing is disabled
914
+ *
915
+ * Returns instance for e2e testing (when `$delegate` and `$browser` specified):
916
+ * - passing through (delegating request to real backend) is enabled
917
+ * - auto flushing is enabled
918
+ *
919
+ * @param {Object=} $delegate Real $httpBackend instance (allow passing through if specified)
920
+ * @param {Object=} $browser Auto-flushing enabled if specified
921
+ * @return {Object} Instance of $httpBackend mock
922
+ */
923
+ function createHttpBackendMock($rootScope, $delegate, $browser) {
924
+ var definitions = [],
925
+ expectations = [],
926
+ responses = [],
927
+ responsesPush = angular.bind(responses, responses.push);
928
+
929
+ function createResponse(status, data, headers) {
930
+ if (angular.isFunction(status)) return status;
931
+
932
+ return function() {
933
+ return angular.isNumber(status)
934
+ ? [status, data, headers]
935
+ : [200, status, data];
936
+ };
937
+ }
938
+
939
+ // TODO(vojta): change params to: method, url, data, headers, callback
940
+ function $httpBackend(method, url, data, callback, headers, timeout) {
941
+ var xhr = new MockXhr(),
942
+ expectation = expectations[0],
943
+ wasExpected = false;
944
+
945
+ function prettyPrint(data) {
946
+ return (angular.isString(data) || angular.isFunction(data) || data instanceof RegExp)
947
+ ? data
948
+ : angular.toJson(data);
949
+ }
950
+
951
+ function wrapResponse(wrapped) {
952
+ if (!$browser && timeout && timeout.then) timeout.then(handleTimeout);
953
+
954
+ return handleResponse;
955
+
956
+ function handleResponse() {
957
+ var response = wrapped.response(method, url, data, headers);
958
+ xhr.$$respHeaders = response[2];
959
+ callback(response[0], response[1], xhr.getAllResponseHeaders());
960
+ }
961
+
962
+ function handleTimeout() {
963
+ for (var i = 0, ii = responses.length; i < ii; i++) {
964
+ if (responses[i] === handleResponse) {
965
+ responses.splice(i, 1);
966
+ callback(-1, undefined, '');
967
+ break;
968
+ }
969
+ }
970
+ }
971
+ }
972
+
973
+ if (expectation && expectation.match(method, url)) {
974
+ if (!expectation.matchData(data))
975
+ throw Error('Expected ' + expectation + ' with different data\n' +
976
+ 'EXPECTED: ' + prettyPrint(expectation.data) + '\nGOT: ' + data);
977
+
978
+ if (!expectation.matchHeaders(headers))
979
+ throw Error('Expected ' + expectation + ' with different headers\n' +
980
+ 'EXPECTED: ' + prettyPrint(expectation.headers) + '\nGOT: ' +
981
+ prettyPrint(headers));
982
+
983
+ expectations.shift();
984
+
985
+ if (expectation.response) {
986
+ responses.push(wrapResponse(expectation));
987
+ return;
988
+ }
989
+ wasExpected = true;
990
+ }
991
+
992
+ var i = -1, definition;
993
+ while ((definition = definitions[++i])) {
994
+ if (definition.match(method, url, data, headers || {})) {
995
+ if (definition.response) {
996
+ // if $browser specified, we do auto flush all requests
997
+ ($browser ? $browser.defer : responsesPush)(wrapResponse(definition));
998
+ } else if (definition.passThrough) {
999
+ $delegate(method, url, data, callback, headers, timeout);
1000
+ } else throw Error('No response defined !');
1001
+ return;
1002
+ }
1003
+ }
1004
+ throw wasExpected ?
1005
+ Error('No response defined !') :
1006
+ Error('Unexpected request: ' + method + ' ' + url + '\n' +
1007
+ (expectation ? 'Expected ' + expectation : 'No more request expected'));
1008
+ }
1009
+
1010
+ /**
1011
+ * @ngdoc method
1012
+ * @name ngMock.$httpBackend#when
1013
+ * @methodOf ngMock.$httpBackend
1014
+ * @description
1015
+ * Creates a new backend definition.
1016
+ *
1017
+ * @param {string} method HTTP method.
1018
+ * @param {string|RegExp} url HTTP url.
1019
+ * @param {(string|RegExp)=} data HTTP request body.
1020
+ * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1021
+ * object and returns true if the headers match the current definition.
1022
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1023
+ * request is handled.
1024
+ *
1025
+ * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1026
+ * – The respond method takes a set of static data to be returned or a function that can return
1027
+ * an array containing response status (number), response data (string) and response headers
1028
+ * (Object).
1029
+ */
1030
+ $httpBackend.when = function(method, url, data, headers) {
1031
+ var definition = new MockHttpExpectation(method, url, data, headers),
1032
+ chain = {
1033
+ respond: function(status, data, headers) {
1034
+ definition.response = createResponse(status, data, headers);
1035
+ }
1036
+ };
1037
+
1038
+ if ($browser) {
1039
+ chain.passThrough = function() {
1040
+ definition.passThrough = true;
1041
+ };
1042
+ }
1043
+
1044
+ definitions.push(definition);
1045
+ return chain;
1046
+ };
1047
+
1048
+ /**
1049
+ * @ngdoc method
1050
+ * @name ngMock.$httpBackend#whenGET
1051
+ * @methodOf ngMock.$httpBackend
1052
+ * @description
1053
+ * Creates a new backend definition for GET requests. For more info see `when()`.
1054
+ *
1055
+ * @param {string|RegExp} url HTTP url.
1056
+ * @param {(Object|function(Object))=} headers HTTP headers.
1057
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1058
+ * request is handled.
1059
+ */
1060
+
1061
+ /**
1062
+ * @ngdoc method
1063
+ * @name ngMock.$httpBackend#whenHEAD
1064
+ * @methodOf ngMock.$httpBackend
1065
+ * @description
1066
+ * Creates a new backend definition for HEAD requests. For more info see `when()`.
1067
+ *
1068
+ * @param {string|RegExp} url HTTP url.
1069
+ * @param {(Object|function(Object))=} headers HTTP headers.
1070
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1071
+ * request is handled.
1072
+ */
1073
+
1074
+ /**
1075
+ * @ngdoc method
1076
+ * @name ngMock.$httpBackend#whenDELETE
1077
+ * @methodOf ngMock.$httpBackend
1078
+ * @description
1079
+ * Creates a new backend definition for DELETE requests. For more info see `when()`.
1080
+ *
1081
+ * @param {string|RegExp} url HTTP url.
1082
+ * @param {(Object|function(Object))=} headers HTTP headers.
1083
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1084
+ * request is handled.
1085
+ */
1086
+
1087
+ /**
1088
+ * @ngdoc method
1089
+ * @name ngMock.$httpBackend#whenPOST
1090
+ * @methodOf ngMock.$httpBackend
1091
+ * @description
1092
+ * Creates a new backend definition for POST requests. For more info see `when()`.
1093
+ *
1094
+ * @param {string|RegExp} url HTTP url.
1095
+ * @param {(string|RegExp)=} data HTTP request body.
1096
+ * @param {(Object|function(Object))=} headers HTTP headers.
1097
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1098
+ * request is handled.
1099
+ */
1100
+
1101
+ /**
1102
+ * @ngdoc method
1103
+ * @name ngMock.$httpBackend#whenPUT
1104
+ * @methodOf ngMock.$httpBackend
1105
+ * @description
1106
+ * Creates a new backend definition for PUT requests. For more info see `when()`.
1107
+ *
1108
+ * @param {string|RegExp} url HTTP url.
1109
+ * @param {(string|RegExp)=} data HTTP request body.
1110
+ * @param {(Object|function(Object))=} headers HTTP headers.
1111
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1112
+ * request is handled.
1113
+ */
1114
+
1115
+ /**
1116
+ * @ngdoc method
1117
+ * @name ngMock.$httpBackend#whenJSONP
1118
+ * @methodOf ngMock.$httpBackend
1119
+ * @description
1120
+ * Creates a new backend definition for JSONP requests. For more info see `when()`.
1121
+ *
1122
+ * @param {string|RegExp} url HTTP url.
1123
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1124
+ * request is handled.
1125
+ */
1126
+ createShortMethods('when');
1127
+
1128
+
1129
+ /**
1130
+ * @ngdoc method
1131
+ * @name ngMock.$httpBackend#expect
1132
+ * @methodOf ngMock.$httpBackend
1133
+ * @description
1134
+ * Creates a new request expectation.
1135
+ *
1136
+ * @param {string} method HTTP method.
1137
+ * @param {string|RegExp} url HTTP url.
1138
+ * @param {(string|RegExp)=} data HTTP request body.
1139
+ * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1140
+ * object and returns true if the headers match the current expectation.
1141
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1142
+ * request is handled.
1143
+ *
1144
+ * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1145
+ * – The respond method takes a set of static data to be returned or a function that can return
1146
+ * an array containing response status (number), response data (string) and response headers
1147
+ * (Object).
1148
+ */
1149
+ $httpBackend.expect = function(method, url, data, headers) {
1150
+ var expectation = new MockHttpExpectation(method, url, data, headers);
1151
+ expectations.push(expectation);
1152
+ return {
1153
+ respond: function(status, data, headers) {
1154
+ expectation.response = createResponse(status, data, headers);
1155
+ }
1156
+ };
1157
+ };
1158
+
1159
+
1160
+ /**
1161
+ * @ngdoc method
1162
+ * @name ngMock.$httpBackend#expectGET
1163
+ * @methodOf ngMock.$httpBackend
1164
+ * @description
1165
+ * Creates a new request expectation for GET requests. For more info see `expect()`.
1166
+ *
1167
+ * @param {string|RegExp} url HTTP url.
1168
+ * @param {Object=} headers HTTP headers.
1169
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1170
+ * request is handled. See #expect for more info.
1171
+ */
1172
+
1173
+ /**
1174
+ * @ngdoc method
1175
+ * @name ngMock.$httpBackend#expectHEAD
1176
+ * @methodOf ngMock.$httpBackend
1177
+ * @description
1178
+ * Creates a new request expectation for HEAD requests. For more info see `expect()`.
1179
+ *
1180
+ * @param {string|RegExp} url HTTP url.
1181
+ * @param {Object=} headers HTTP headers.
1182
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1183
+ * request is handled.
1184
+ */
1185
+
1186
+ /**
1187
+ * @ngdoc method
1188
+ * @name ngMock.$httpBackend#expectDELETE
1189
+ * @methodOf ngMock.$httpBackend
1190
+ * @description
1191
+ * Creates a new request expectation for DELETE requests. For more info see `expect()`.
1192
+ *
1193
+ * @param {string|RegExp} url HTTP url.
1194
+ * @param {Object=} headers HTTP headers.
1195
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1196
+ * request is handled.
1197
+ */
1198
+
1199
+ /**
1200
+ * @ngdoc method
1201
+ * @name ngMock.$httpBackend#expectPOST
1202
+ * @methodOf ngMock.$httpBackend
1203
+ * @description
1204
+ * Creates a new request expectation for POST requests. For more info see `expect()`.
1205
+ *
1206
+ * @param {string|RegExp} url HTTP url.
1207
+ * @param {(string|RegExp)=} data HTTP request body.
1208
+ * @param {Object=} headers HTTP headers.
1209
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1210
+ * request is handled.
1211
+ */
1212
+
1213
+ /**
1214
+ * @ngdoc method
1215
+ * @name ngMock.$httpBackend#expectPUT
1216
+ * @methodOf ngMock.$httpBackend
1217
+ * @description
1218
+ * Creates a new request expectation for PUT requests. For more info see `expect()`.
1219
+ *
1220
+ * @param {string|RegExp} url HTTP url.
1221
+ * @param {(string|RegExp)=} data HTTP request body.
1222
+ * @param {Object=} headers HTTP headers.
1223
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1224
+ * request is handled.
1225
+ */
1226
+
1227
+ /**
1228
+ * @ngdoc method
1229
+ * @name ngMock.$httpBackend#expectPATCH
1230
+ * @methodOf ngMock.$httpBackend
1231
+ * @description
1232
+ * Creates a new request expectation for PATCH requests. For more info see `expect()`.
1233
+ *
1234
+ * @param {string|RegExp} url HTTP url.
1235
+ * @param {(string|RegExp)=} data HTTP request body.
1236
+ * @param {Object=} headers HTTP headers.
1237
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1238
+ * request is handled.
1239
+ */
1240
+
1241
+ /**
1242
+ * @ngdoc method
1243
+ * @name ngMock.$httpBackend#expectJSONP
1244
+ * @methodOf ngMock.$httpBackend
1245
+ * @description
1246
+ * Creates a new request expectation for JSONP requests. For more info see `expect()`.
1247
+ *
1248
+ * @param {string|RegExp} url HTTP url.
1249
+ * @returns {requestHandler} Returns an object with `respond` method that control how a matched
1250
+ * request is handled.
1251
+ */
1252
+ createShortMethods('expect');
1253
+
1254
+
1255
+ /**
1256
+ * @ngdoc method
1257
+ * @name ngMock.$httpBackend#flush
1258
+ * @methodOf ngMock.$httpBackend
1259
+ * @description
1260
+ * Flushes all pending requests using the trained responses.
1261
+ *
1262
+ * @param {number=} count Number of responses to flush (in the order they arrived). If undefined,
1263
+ * all pending requests will be flushed. If there are no pending requests when the flush method
1264
+ * is called an exception is thrown (as this typically a sign of programming error).
1265
+ */
1266
+ $httpBackend.flush = function(count) {
1267
+ $rootScope.$digest();
1268
+ if (!responses.length) throw Error('No pending request to flush !');
1269
+
1270
+ if (angular.isDefined(count)) {
1271
+ while (count--) {
1272
+ if (!responses.length) throw Error('No more pending request to flush !');
1273
+ responses.shift()();
1274
+ }
1275
+ } else {
1276
+ while (responses.length) {
1277
+ responses.shift()();
1278
+ }
1279
+ }
1280
+ $httpBackend.verifyNoOutstandingExpectation();
1281
+ };
1282
+
1283
+
1284
+ /**
1285
+ * @ngdoc method
1286
+ * @name ngMock.$httpBackend#verifyNoOutstandingExpectation
1287
+ * @methodOf ngMock.$httpBackend
1288
+ * @description
1289
+ * Verifies that all of the requests defined via the `expect` api were made. If any of the
1290
+ * requests were not made, verifyNoOutstandingExpectation throws an exception.
1291
+ *
1292
+ * Typically, you would call this method following each test case that asserts requests using an
1293
+ * "afterEach" clause.
1294
+ *
1295
+ * <pre>
1296
+ * afterEach($httpBackend.verifyExpectations);
1297
+ * </pre>
1298
+ */
1299
+ $httpBackend.verifyNoOutstandingExpectation = function() {
1300
+ $rootScope.$digest();
1301
+ if (expectations.length) {
1302
+ throw Error('Unsatisfied requests: ' + expectations.join(', '));
1303
+ }
1304
+ };
1305
+
1306
+
1307
+ /**
1308
+ * @ngdoc method
1309
+ * @name ngMock.$httpBackend#verifyNoOutstandingRequest
1310
+ * @methodOf ngMock.$httpBackend
1311
+ * @description
1312
+ * Verifies that there are no outstanding requests that need to be flushed.
1313
+ *
1314
+ * Typically, you would call this method following each test case that asserts requests using an
1315
+ * "afterEach" clause.
1316
+ *
1317
+ * <pre>
1318
+ * afterEach($httpBackend.verifyNoOutstandingRequest);
1319
+ * </pre>
1320
+ */
1321
+ $httpBackend.verifyNoOutstandingRequest = function() {
1322
+ if (responses.length) {
1323
+ throw Error('Unflushed requests: ' + responses.length);
1324
+ }
1325
+ };
1326
+
1327
+
1328
+ /**
1329
+ * @ngdoc method
1330
+ * @name ngMock.$httpBackend#resetExpectations
1331
+ * @methodOf ngMock.$httpBackend
1332
+ * @description
1333
+ * Resets all request expectations, but preserves all backend definitions. Typically, you would
1334
+ * call resetExpectations during a multiple-phase test when you want to reuse the same instance of
1335
+ * $httpBackend mock.
1336
+ */
1337
+ $httpBackend.resetExpectations = function() {
1338
+ expectations.length = 0;
1339
+ responses.length = 0;
1340
+ };
1341
+
1342
+ return $httpBackend;
1343
+
1344
+
1345
+ function createShortMethods(prefix) {
1346
+ angular.forEach(['GET', 'DELETE', 'JSONP'], function(method) {
1347
+ $httpBackend[prefix + method] = function(url, headers) {
1348
+ return $httpBackend[prefix](method, url, undefined, headers)
1349
+ }
1350
+ });
1351
+
1352
+ angular.forEach(['PUT', 'POST', 'PATCH'], function(method) {
1353
+ $httpBackend[prefix + method] = function(url, data, headers) {
1354
+ return $httpBackend[prefix](method, url, data, headers)
1355
+ }
1356
+ });
1357
+ }
1358
+ }
1359
+
1360
+ function MockHttpExpectation(method, url, data, headers) {
1361
+
1362
+ this.data = data;
1363
+ this.headers = headers;
1364
+
1365
+ this.match = function(m, u, d, h) {
1366
+ if (method != m) return false;
1367
+ if (!this.matchUrl(u)) return false;
1368
+ if (angular.isDefined(d) && !this.matchData(d)) return false;
1369
+ if (angular.isDefined(h) && !this.matchHeaders(h)) return false;
1370
+ return true;
1371
+ };
1372
+
1373
+ this.matchUrl = function(u) {
1374
+ if (!url) return true;
1375
+ if (angular.isFunction(url.test)) return url.test(u);
1376
+ return url == u;
1377
+ };
1378
+
1379
+ this.matchHeaders = function(h) {
1380
+ if (angular.isUndefined(headers)) return true;
1381
+ if (angular.isFunction(headers)) return headers(h);
1382
+ return angular.equals(headers, h);
1383
+ };
1384
+
1385
+ this.matchData = function(d) {
1386
+ if (angular.isUndefined(data)) return true;
1387
+ if (data && angular.isFunction(data.test)) return data.test(d);
1388
+ if (data && !angular.isString(data)) return angular.toJson(data) == d;
1389
+ return data == d;
1390
+ };
1391
+
1392
+ this.toString = function() {
1393
+ return method + ' ' + url;
1394
+ };
1395
+ }
1396
+
1397
+ function MockXhr() {
1398
+
1399
+ // hack for testing $http, $httpBackend
1400
+ MockXhr.$$lastInstance = this;
1401
+
1402
+ this.open = function(method, url, async) {
1403
+ this.$$method = method;
1404
+ this.$$url = url;
1405
+ this.$$async = async;
1406
+ this.$$reqHeaders = {};
1407
+ this.$$respHeaders = {};
1408
+ };
1409
+
1410
+ this.send = function(data) {
1411
+ this.$$data = data;
1412
+ };
1413
+
1414
+ this.setRequestHeader = function(key, value) {
1415
+ this.$$reqHeaders[key] = value;
1416
+ };
1417
+
1418
+ this.getResponseHeader = function(name) {
1419
+ // the lookup must be case insensitive, that's why we try two quick lookups and full scan at last
1420
+ var header = this.$$respHeaders[name];
1421
+ if (header) return header;
1422
+
1423
+ name = angular.lowercase(name);
1424
+ header = this.$$respHeaders[name];
1425
+ if (header) return header;
1426
+
1427
+ header = undefined;
1428
+ angular.forEach(this.$$respHeaders, function(headerVal, headerName) {
1429
+ if (!header && angular.lowercase(headerName) == name) header = headerVal;
1430
+ });
1431
+ return header;
1432
+ };
1433
+
1434
+ this.getAllResponseHeaders = function() {
1435
+ var lines = [];
1436
+
1437
+ angular.forEach(this.$$respHeaders, function(value, key) {
1438
+ lines.push(key + ': ' + value);
1439
+ });
1440
+ return lines.join('\n');
1441
+ };
1442
+
1443
+ this.abort = angular.noop;
1444
+ }
1445
+
1446
+
1447
+ /**
1448
+ * @ngdoc function
1449
+ * @name ngMock.$timeout
1450
+ * @description
1451
+ *
1452
+ * This service is just a simple decorator for {@link ng.$timeout $timeout} service
1453
+ * that adds a "flush" and "verifyNoPendingTasks" methods.
1454
+ */
1455
+
1456
+ angular.mock.$TimeoutDecorator = function($delegate, $browser) {
1457
+
1458
+ /**
1459
+ * @ngdoc method
1460
+ * @name ngMock.$timeout#flush
1461
+ * @methodOf ngMock.$timeout
1462
+ * @description
1463
+ *
1464
+ * Flushes the queue of pending tasks.
1465
+ */
1466
+ $delegate.flush = function() {
1467
+ $browser.defer.flush();
1468
+ };
1469
+
1470
+ /**
1471
+ * @ngdoc method
1472
+ * @name ngMock.$timeout#verifyNoPendingTasks
1473
+ * @methodOf ngMock.$timeout
1474
+ * @description
1475
+ *
1476
+ * Verifies that there are no pending tasks that need to be flushed.
1477
+ */
1478
+ $delegate.verifyNoPendingTasks = function() {
1479
+ if ($browser.deferredFns.length) {
1480
+ throw Error('Deferred tasks to flush (' + $browser.deferredFns.length + '): ' +
1481
+ formatPendingTasksAsString($browser.deferredFns));
1482
+ }
1483
+ };
1484
+
1485
+ function formatPendingTasksAsString(tasks) {
1486
+ var result = [];
1487
+ angular.forEach(tasks, function(task) {
1488
+ result.push('{id: ' + task.id + ', ' + 'time: ' + task.time + '}');
1489
+ });
1490
+
1491
+ return result.join(', ');
1492
+ }
1493
+
1494
+ return $delegate;
1495
+ };
1496
+
1497
+ /**
1498
+ *
1499
+ */
1500
+ angular.mock.$RootElementProvider = function() {
1501
+ this.$get = function() {
1502
+ return angular.element('<div ng-app></div>');
1503
+ }
1504
+ };
1505
+
1506
+ /**
1507
+ * @ngdoc overview
1508
+ * @name ngMock
1509
+ * @description
1510
+ *
1511
+ * The `ngMock` is an angular module which is used with `ng` module and adds unit-test configuration as well as useful
1512
+ * mocks to the {@link AUTO.$injector $injector}.
1513
+ */
1514
+ angular.module('ngMock', ['ng']).provider({
1515
+ $browser: angular.mock.$BrowserProvider,
1516
+ $exceptionHandler: angular.mock.$ExceptionHandlerProvider,
1517
+ $log: angular.mock.$LogProvider,
1518
+ $httpBackend: angular.mock.$HttpBackendProvider,
1519
+ $rootElement: angular.mock.$RootElementProvider
1520
+ }).config(function($provide) {
1521
+ $provide.decorator('$timeout', angular.mock.$TimeoutDecorator);
1522
+ });
1523
+
1524
+ /**
1525
+ * @ngdoc overview
1526
+ * @name ngMockE2E
1527
+ * @description
1528
+ *
1529
+ * The `ngMockE2E` is an angular module which contains mocks suitable for end-to-end testing.
1530
+ * Currently there is only one mock present in this module -
1531
+ * the {@link ngMockE2E.$httpBackend e2e $httpBackend} mock.
1532
+ */
1533
+ angular.module('ngMockE2E', ['ng']).config(function($provide) {
1534
+ $provide.decorator('$httpBackend', angular.mock.e2e.$httpBackendDecorator);
1535
+ });
1536
+
1537
+ /**
1538
+ * @ngdoc object
1539
+ * @name ngMockE2E.$httpBackend
1540
+ * @description
1541
+ * Fake HTTP backend implementation suitable for end-to-end testing or backend-less development of
1542
+ * applications that use the {@link ng.$http $http service}.
1543
+ *
1544
+ * *Note*: For fake http backend implementation suitable for unit testing please see
1545
+ * {@link ngMock.$httpBackend unit-testing $httpBackend mock}.
1546
+ *
1547
+ * This implementation can be used to respond with static or dynamic responses via the `when` api
1548
+ * and its shortcuts (`whenGET`, `whenPOST`, etc) and optionally pass through requests to the
1549
+ * real $httpBackend for specific requests (e.g. to interact with certain remote apis or to fetch
1550
+ * templates from a webserver).
1551
+ *
1552
+ * As opposed to unit-testing, in an end-to-end testing scenario or in scenario when an application
1553
+ * is being developed with the real backend api replaced with a mock, it is often desirable for
1554
+ * certain category of requests to bypass the mock and issue a real http request (e.g. to fetch
1555
+ * templates or static files from the webserver). To configure the backend with this behavior
1556
+ * use the `passThrough` request handler of `when` instead of `respond`.
1557
+ *
1558
+ * Additionally, we don't want to manually have to flush mocked out requests like we do during unit
1559
+ * testing. For this reason the e2e $httpBackend automatically flushes mocked out requests
1560
+ * automatically, closely simulating the behavior of the XMLHttpRequest object.
1561
+ *
1562
+ * To setup the application to run with this http backend, you have to create a module that depends
1563
+ * on the `ngMockE2E` and your application modules and defines the fake backend:
1564
+ *
1565
+ * <pre>
1566
+ * myAppDev = angular.module('myAppDev', ['myApp', 'ngMockE2E']);
1567
+ * myAppDev.run(function($httpBackend) {
1568
+ * phones = [{name: 'phone1'}, {name: 'phone2'}];
1569
+ *
1570
+ * // returns the current list of phones
1571
+ * $httpBackend.whenGET('/phones').respond(phones);
1572
+ *
1573
+ * // adds a new phone to the phones array
1574
+ * $httpBackend.whenPOST('/phones').respond(function(method, url, data) {
1575
+ * phones.push(angular.fromJSON(data));
1576
+ * });
1577
+ * $httpBackend.whenGET(/^\/templates\//).passThrough();
1578
+ * //...
1579
+ * });
1580
+ * </pre>
1581
+ *
1582
+ * Afterwards, bootstrap your app with this new module.
1583
+ */
1584
+
1585
+ /**
1586
+ * @ngdoc method
1587
+ * @name ngMockE2E.$httpBackend#when
1588
+ * @methodOf ngMockE2E.$httpBackend
1589
+ * @description
1590
+ * Creates a new backend definition.
1591
+ *
1592
+ * @param {string} method HTTP method.
1593
+ * @param {string|RegExp} url HTTP url.
1594
+ * @param {(string|RegExp)=} data HTTP request body.
1595
+ * @param {(Object|function(Object))=} headers HTTP headers or function that receives http header
1596
+ * object and returns true if the headers match the current definition.
1597
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1598
+ * control how a matched request is handled.
1599
+ *
1600
+ * - respond – `{function([status,] data[, headers])|function(function(method, url, data, headers)}`
1601
+ * – The respond method takes a set of static data to be returned or a function that can return
1602
+ * an array containing response status (number), response data (string) and response headers
1603
+ * (Object).
1604
+ * - passThrough – `{function()}` – Any request matching a backend definition with `passThrough`
1605
+ * handler, will be pass through to the real backend (an XHR request will be made to the
1606
+ * server.
1607
+ */
1608
+
1609
+ /**
1610
+ * @ngdoc method
1611
+ * @name ngMockE2E.$httpBackend#whenGET
1612
+ * @methodOf ngMockE2E.$httpBackend
1613
+ * @description
1614
+ * Creates a new backend definition for GET requests. For more info see `when()`.
1615
+ *
1616
+ * @param {string|RegExp} url HTTP url.
1617
+ * @param {(Object|function(Object))=} headers HTTP headers.
1618
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1619
+ * control how a matched request is handled.
1620
+ */
1621
+
1622
+ /**
1623
+ * @ngdoc method
1624
+ * @name ngMockE2E.$httpBackend#whenHEAD
1625
+ * @methodOf ngMockE2E.$httpBackend
1626
+ * @description
1627
+ * Creates a new backend definition for HEAD requests. For more info see `when()`.
1628
+ *
1629
+ * @param {string|RegExp} url HTTP url.
1630
+ * @param {(Object|function(Object))=} headers HTTP headers.
1631
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1632
+ * control how a matched request is handled.
1633
+ */
1634
+
1635
+ /**
1636
+ * @ngdoc method
1637
+ * @name ngMockE2E.$httpBackend#whenDELETE
1638
+ * @methodOf ngMockE2E.$httpBackend
1639
+ * @description
1640
+ * Creates a new backend definition for DELETE requests. For more info see `when()`.
1641
+ *
1642
+ * @param {string|RegExp} url HTTP url.
1643
+ * @param {(Object|function(Object))=} headers HTTP headers.
1644
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1645
+ * control how a matched request is handled.
1646
+ */
1647
+
1648
+ /**
1649
+ * @ngdoc method
1650
+ * @name ngMockE2E.$httpBackend#whenPOST
1651
+ * @methodOf ngMockE2E.$httpBackend
1652
+ * @description
1653
+ * Creates a new backend definition for POST requests. For more info see `when()`.
1654
+ *
1655
+ * @param {string|RegExp} url HTTP url.
1656
+ * @param {(string|RegExp)=} data HTTP request body.
1657
+ * @param {(Object|function(Object))=} headers HTTP headers.
1658
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1659
+ * control how a matched request is handled.
1660
+ */
1661
+
1662
+ /**
1663
+ * @ngdoc method
1664
+ * @name ngMockE2E.$httpBackend#whenPUT
1665
+ * @methodOf ngMockE2E.$httpBackend
1666
+ * @description
1667
+ * Creates a new backend definition for PUT requests. For more info see `when()`.
1668
+ *
1669
+ * @param {string|RegExp} url HTTP url.
1670
+ * @param {(string|RegExp)=} data HTTP request body.
1671
+ * @param {(Object|function(Object))=} headers HTTP headers.
1672
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1673
+ * control how a matched request is handled.
1674
+ */
1675
+
1676
+ /**
1677
+ * @ngdoc method
1678
+ * @name ngMockE2E.$httpBackend#whenPATCH
1679
+ * @methodOf ngMockE2E.$httpBackend
1680
+ * @description
1681
+ * Creates a new backend definition for PATCH requests. For more info see `when()`.
1682
+ *
1683
+ * @param {string|RegExp} url HTTP url.
1684
+ * @param {(string|RegExp)=} data HTTP request body.
1685
+ * @param {(Object|function(Object))=} headers HTTP headers.
1686
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1687
+ * control how a matched request is handled.
1688
+ */
1689
+
1690
+ /**
1691
+ * @ngdoc method
1692
+ * @name ngMockE2E.$httpBackend#whenJSONP
1693
+ * @methodOf ngMockE2E.$httpBackend
1694
+ * @description
1695
+ * Creates a new backend definition for JSONP requests. For more info see `when()`.
1696
+ *
1697
+ * @param {string|RegExp} url HTTP url.
1698
+ * @returns {requestHandler} Returns an object with `respond` and `passThrough` methods that
1699
+ * control how a matched request is handled.
1700
+ */
1701
+ angular.mock.e2e = {};
1702
+ angular.mock.e2e.$httpBackendDecorator = ['$rootScope', '$delegate', '$browser', createHttpBackendMock];
1703
+
1704
+
1705
+ angular.mock.clearDataCache = function() {
1706
+ var key,
1707
+ cache = angular.element.cache;
1708
+
1709
+ for(key in cache) {
1710
+ if (cache.hasOwnProperty(key)) {
1711
+ var handle = cache[key].handle;
1712
+
1713
+ handle && angular.element(handle.elem).unbind();
1714
+ delete cache[key];
1715
+ }
1716
+ }
1717
+ };
1718
+
1719
+
1720
+ window.jstestdriver && (function(window) {
1721
+ /**
1722
+ * Global method to output any number of objects into JSTD console. Useful for debugging.
1723
+ */
1724
+ window.dump = function() {
1725
+ var args = [];
1726
+ angular.forEach(arguments, function(arg) {
1727
+ args.push(angular.mock.dump(arg));
1728
+ });
1729
+ jstestdriver.console.log.apply(jstestdriver.console, args);
1730
+ if (window.console) {
1731
+ window.console.log.apply(window.console, args);
1732
+ }
1733
+ };
1734
+ })(window);
1735
+
1736
+
1737
+ (window.jasmine || window.mocha) && (function(window) {
1738
+
1739
+ var currentSpec = null;
1740
+
1741
+ beforeEach(function() {
1742
+ currentSpec = this;
1743
+ });
1744
+
1745
+ afterEach(function() {
1746
+ var injector = currentSpec.$injector;
1747
+
1748
+ currentSpec.$injector = null;
1749
+ currentSpec.$modules = null;
1750
+ currentSpec = null;
1751
+
1752
+ if (injector) {
1753
+ injector.get('$rootElement').unbind();
1754
+ injector.get('$browser').pollFns.length = 0;
1755
+ }
1756
+
1757
+ angular.mock.clearDataCache();
1758
+
1759
+ // clean up jquery's fragment cache
1760
+ angular.forEach(angular.element.fragments, function(val, key) {
1761
+ delete angular.element.fragments[key];
1762
+ });
1763
+
1764
+ MockXhr.$$lastInstance = null;
1765
+
1766
+ angular.forEach(angular.callbacks, function(val, key) {
1767
+ delete angular.callbacks[key];
1768
+ });
1769
+ angular.callbacks.counter = 0;
1770
+ });
1771
+
1772
+ function isSpecRunning() {
1773
+ return currentSpec && (window.mocha || currentSpec.queue.running);
1774
+ }
1775
+
1776
+ /**
1777
+ * @ngdoc function
1778
+ * @name angular.mock.module
1779
+ * @description
1780
+ *
1781
+ * *NOTE*: This function is also published on window for easy access.<br>
1782
+ *
1783
+ * This function registers a module configuration code. It collects the configuration information
1784
+ * which will be used when the injector is created by {@link angular.mock.inject inject}.
1785
+ *
1786
+ * See {@link angular.mock.inject inject} for usage example
1787
+ *
1788
+ * @param {...(string|Function)} fns any number of modules which are represented as string
1789
+ * aliases or as anonymous module initialization functions. The modules are used to
1790
+ * configure the injector. The 'ng' and 'ngMock' modules are automatically loaded.
1791
+ */
1792
+ window.module = angular.mock.module = function() {
1793
+ var moduleFns = Array.prototype.slice.call(arguments, 0);
1794
+ return isSpecRunning() ? workFn() : workFn;
1795
+ /////////////////////
1796
+ function workFn() {
1797
+ if (currentSpec.$injector) {
1798
+ throw Error('Injector already created, can not register a module!');
1799
+ } else {
1800
+ var modules = currentSpec.$modules || (currentSpec.$modules = []);
1801
+ angular.forEach(moduleFns, function(module) {
1802
+ modules.push(module);
1803
+ });
1804
+ }
1805
+ }
1806
+ };
1807
+
1808
+ /**
1809
+ * @ngdoc function
1810
+ * @name angular.mock.inject
1811
+ * @description
1812
+ *
1813
+ * *NOTE*: This function is also published on window for easy access.<br>
1814
+ *
1815
+ * The inject function wraps a function into an injectable function. The inject() creates new
1816
+ * instance of {@link AUTO.$injector $injector} per test, which is then used for
1817
+ * resolving references.
1818
+ *
1819
+ * See also {@link angular.mock.module module}
1820
+ *
1821
+ * Example of what a typical jasmine tests looks like with the inject method.
1822
+ * <pre>
1823
+ *
1824
+ * angular.module('myApplicationModule', [])
1825
+ * .value('mode', 'app')
1826
+ * .value('version', 'v1.0.1');
1827
+ *
1828
+ *
1829
+ * describe('MyApp', function() {
1830
+ *
1831
+ * // You need to load modules that you want to test,
1832
+ * // it loads only the "ng" module by default.
1833
+ * beforeEach(module('myApplicationModule'));
1834
+ *
1835
+ *
1836
+ * // inject() is used to inject arguments of all given functions
1837
+ * it('should provide a version', inject(function(mode, version) {
1838
+ * expect(version).toEqual('v1.0.1');
1839
+ * expect(mode).toEqual('app');
1840
+ * }));
1841
+ *
1842
+ *
1843
+ * // The inject and module method can also be used inside of the it or beforeEach
1844
+ * it('should override a version and test the new version is injected', function() {
1845
+ * // module() takes functions or strings (module aliases)
1846
+ * module(function($provide) {
1847
+ * $provide.value('version', 'overridden'); // override version here
1848
+ * });
1849
+ *
1850
+ * inject(function(version) {
1851
+ * expect(version).toEqual('overridden');
1852
+ * });
1853
+ * ));
1854
+ * });
1855
+ *
1856
+ * </pre>
1857
+ *
1858
+ * @param {...Function} fns any number of functions which will be injected using the injector.
1859
+ */
1860
+ window.inject = angular.mock.inject = function() {
1861
+ var blockFns = Array.prototype.slice.call(arguments, 0);
1862
+ var errorForStack = new Error('Declaration Location');
1863
+ return isSpecRunning() ? workFn() : workFn;
1864
+ /////////////////////
1865
+ function workFn() {
1866
+ var modules = currentSpec.$modules || [];
1867
+
1868
+ modules.unshift('ngMock');
1869
+ modules.unshift('ng');
1870
+ var injector = currentSpec.$injector;
1871
+ if (!injector) {
1872
+ injector = currentSpec.$injector = angular.injector(modules);
1873
+ }
1874
+ for(var i = 0, ii = blockFns.length; i < ii; i++) {
1875
+ try {
1876
+ injector.invoke(blockFns[i] || angular.noop, this);
1877
+ } catch (e) {
1878
+ if(e.stack && errorForStack) e.stack += '\n' + errorForStack.stack;
1879
+ throw e;
1880
+ } finally {
1881
+ errorForStack = null;
1882
+ }
1883
+ }
1884
+ }
1885
+ };
1886
+ })(window);