polymer-core-rails 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (856) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/components/context-free-parser/README.md +4 -0
  3. data/app/assets/components/context-free-parser/bower.json +5 -0
  4. data/app/assets/components/context-free-parser/context-free-parser.html +49 -0
  5. data/app/assets/components/context-free-parser/context-free-parser.js +130 -0
  6. data/app/assets/components/context-free-parser/demo.html +34 -0
  7. data/app/assets/components/context-free-parser/index.html +22 -0
  8. data/app/assets/components/core-ajax/README.md +4 -0
  9. data/app/assets/components/core-ajax/bower.json +7 -0
  10. data/app/assets/components/core-ajax/{core-ajax.html.erb → core-ajax.html} +29 -23
  11. data/app/assets/components/core-ajax/{core-xhr.html.erb → core-xhr.html} +6 -3
  12. data/app/assets/components/core-ajax/demo.html +43 -0
  13. data/app/assets/components/core-ajax/index.html +22 -0
  14. data/app/assets/components/core-ajax/metadata.html +23 -0
  15. data/app/assets/components/core-animated-pages/README.md +4 -0
  16. data/app/assets/components/core-animated-pages/bower.json +10 -0
  17. data/app/assets/components/core-animated-pages/core-animated-pages.css +10 -0
  18. data/app/assets/components/core-animated-pages/{core-animated-pages.html.erb → core-animated-pages.html} +32 -9
  19. data/app/assets/components/core-animated-pages/demo.html +23 -0
  20. data/app/assets/components/core-animated-pages/demos/grid.html +113 -0
  21. data/app/assets/components/core-animated-pages/demos/list.html +126 -0
  22. data/app/assets/components/core-animated-pages/demos/music.html +182 -0
  23. data/app/assets/components/core-animated-pages/demos/nested-animated-pages.html +113 -0
  24. data/app/assets/components/core-animated-pages/demos/nested.html +112 -0
  25. data/app/assets/components/core-animated-pages/demos/news.html +255 -0
  26. data/app/assets/components/core-animated-pages/demos/quiz1-intro.png +0 -0
  27. data/app/assets/components/core-animated-pages/demos/quiz1.html +263 -0
  28. data/app/assets/components/core-animated-pages/demos/shadow.html +142 -0
  29. data/app/assets/components/core-animated-pages/demos/simple.html +98 -0
  30. data/app/assets/components/core-animated-pages/index.html +22 -0
  31. data/app/assets/components/core-animated-pages/metadata.html +38 -0
  32. data/app/assets/components/core-animated-pages/transitions/{core-transition-pages.html.erb → core-transition-pages.html} +5 -3
  33. data/app/assets/components/core-animated-pages/transitions/{cross-fade.html.erb → cross-fade.html} +1 -1
  34. data/app/assets/components/core-animated-pages/transitions/hero-transition.css +10 -0
  35. data/app/assets/components/core-animated-pages/transitions/{hero-transition.html.erb → hero-transition.html} +7 -7
  36. data/app/assets/components/core-animated-pages/transitions/slide-from-bottom.html +8 -1
  37. data/app/assets/components/core-animated-pages/transitions/slide-from-right.html +8 -0
  38. data/app/assets/components/core-animation/README.md +4 -0
  39. data/app/assets/components/core-animation/bower.json +8 -0
  40. data/app/assets/components/core-animation/{core-animation-group.html.erb → core-animation-group.html} +2 -1
  41. data/app/assets/components/core-animation/{core-animation.html.erb → core-animation.html} +4 -3
  42. data/app/assets/components/core-animation/demo.html +149 -0
  43. data/app/assets/components/core-animation/index.html +22 -0
  44. data/app/assets/components/core-animation/web-animations.html +10 -0
  45. data/app/assets/components/core-collapse/README.md +4 -0
  46. data/app/assets/components/core-collapse/bower.json +7 -0
  47. data/app/assets/components/core-collapse/{core-collapse.html.erb → core-collapse.html} +24 -9
  48. data/app/assets/components/core-collapse/demo.html +93 -0
  49. data/app/assets/components/core-collapse/index.html +22 -0
  50. data/app/assets/components/core-component-page/README.md +6 -0
  51. data/app/assets/components/core-component-page/bowager-logo.png +0 -0
  52. data/app/assets/components/core-component-page/bower.json +8 -0
  53. data/app/assets/components/core-component-page/core-component-page.html +37 -0
  54. data/app/assets/components/core-component-page/demo.html +23 -0
  55. data/app/assets/components/core-component-page/index.html +22 -0
  56. data/app/assets/components/core-doc-viewer/README.md +4 -0
  57. data/app/assets/components/core-doc-viewer/bower.json +16 -0
  58. data/app/assets/components/core-doc-viewer/core-doc-viewer.html +186 -0
  59. data/app/assets/components/core-doc-viewer/demo.html +46 -0
  60. data/app/assets/components/core-doc-viewer/elements/core-doc-page.css +139 -0
  61. data/app/assets/components/core-doc-viewer/elements/core-doc-page.html +175 -0
  62. data/app/assets/components/core-doc-viewer/elements/core-doc-toc.css +27 -0
  63. data/app/assets/components/core-doc-viewer/elements/core-doc-toc.html +67 -0
  64. data/app/assets/components/core-doc-viewer/index.html +22 -0
  65. data/app/assets/components/core-docs/README.md +4 -0
  66. data/app/assets/components/core-docs/bower.json +7 -0
  67. data/app/assets/components/core-docs/index.html +71 -0
  68. data/app/assets/components/core-drag-drop/core-drag-drop.html +12 -7
  69. data/app/assets/components/core-drag-drop/demo.html +102 -0
  70. data/app/assets/components/core-drag-drop/index.html +22 -0
  71. data/app/assets/components/core-drawer-panel/README.md +4 -0
  72. data/app/assets/components/core-drawer-panel/bower.json +8 -0
  73. data/app/assets/components/core-drawer-panel/core-drawer-panel.css +18 -33
  74. data/app/assets/components/core-drawer-panel/core-drawer-panel.html +339 -0
  75. data/app/assets/components/core-drawer-panel/demo.html +73 -0
  76. data/app/assets/components/core-drawer-panel/index.html +22 -0
  77. data/app/assets/components/core-drawer-panel/metadata.html +37 -0
  78. data/app/assets/components/core-dropdown/README.md +6 -0
  79. data/app/assets/components/core-dropdown/bower.json +11 -0
  80. data/app/assets/components/core-dropdown/core-dropdown.css +35 -0
  81. data/app/assets/components/core-dropdown/core-dropdown.html +182 -0
  82. data/app/assets/components/core-dropdown/demo.html +349 -0
  83. data/app/assets/components/core-dropdown/index.html +22 -0
  84. data/app/assets/components/core-elements/README.md +4 -0
  85. data/app/assets/components/core-elements/bower.json +47 -0
  86. data/app/assets/components/core-elements/core-elements.html +56 -0
  87. data/app/assets/components/core-elements/demo.html +107 -0
  88. data/app/assets/components/core-elements/index.html +22 -0
  89. data/app/assets/components/core-elements/metadata.html +30 -0
  90. data/app/assets/components/core-field/README.md +4 -0
  91. data/app/assets/components/core-field/bower.json +7 -0
  92. data/app/assets/components/core-field/{core-field.html.erb → core-field.html} +5 -2
  93. data/app/assets/components/core-field/demo.html +67 -0
  94. data/app/assets/components/core-field/index.html +22 -0
  95. data/app/assets/components/core-field/metadata.html +26 -0
  96. data/app/assets/components/core-header-panel/README.md +4 -0
  97. data/app/assets/components/core-header-panel/bower.json +7 -0
  98. data/app/assets/components/core-header-panel/{core-header-panel.html.erb → core-header-panel.html} +54 -25
  99. data/app/assets/components/core-header-panel/demo.html +100 -0
  100. data/app/assets/components/core-header-panel/index.html +23 -0
  101. data/app/assets/components/core-header-panel/metadata.html +37 -0
  102. data/app/assets/components/core-icon/README.md +4 -0
  103. data/app/assets/components/core-icon/bower.json +8 -0
  104. data/app/assets/components/core-icon/core-icon.css +3 -12
  105. data/app/assets/components/core-icon/core-icon.html +189 -0
  106. data/app/assets/components/core-icon/demo.html +44 -0
  107. data/app/assets/components/core-icon/index.html +22 -0
  108. data/app/assets/components/core-icon/metadata.html +21 -0
  109. data/app/assets/components/core-icon-button/README.md +4 -0
  110. data/app/assets/components/core-icon-button/bower.json +7 -0
  111. data/app/assets/components/core-icon-button/core-icon-button.css +8 -3
  112. data/app/assets/components/core-icon-button/{core-icon-button.html.erb → core-icon-button.html} +6 -8
  113. data/app/assets/components/core-icon-button/demo.html +35 -0
  114. data/app/assets/components/core-icon-button/index.html +22 -0
  115. data/app/assets/components/core-icon-button/metadata.html +20 -0
  116. data/app/assets/components/core-icons/README.md +4 -0
  117. data/app/assets/components/core-icons/av-icons.html +46 -0
  118. data/app/assets/components/core-icons/bower.json +9 -0
  119. data/app/assets/components/core-icons/communication-icons.html +59 -0
  120. data/app/assets/components/core-icons/core-icons.html +270 -6
  121. data/app/assets/components/core-icons/demo.html +96 -0
  122. data/app/assets/components/core-icons/device-icons.html +59 -0
  123. data/app/assets/components/core-icons/editor-icons.html +67 -0
  124. data/app/assets/components/core-icons/hardware-icons.html +58 -0
  125. data/app/assets/components/core-icons/iconsets/av-icons.html +45 -0
  126. data/app/assets/components/core-icons/iconsets/communication-icons.html +38 -0
  127. data/app/assets/components/core-icons/iconsets/device-icons.html +54 -0
  128. data/app/assets/components/core-icons/iconsets/hardware-icons.html +45 -0
  129. data/app/assets/components/core-icons/iconsets/icons.html +192 -0
  130. data/app/assets/components/core-icons/iconsets/image-icons.html +51 -0
  131. data/app/assets/components/core-icons/iconsets/maps-icons.html +33 -0
  132. data/app/assets/components/core-icons/iconsets/notification-icons.html +53 -0
  133. data/app/assets/components/core-icons/iconsets/png-icons.html +18 -0
  134. data/app/assets/components/core-icons/iconsets/social-icons.html +50 -0
  135. data/app/assets/components/core-icons/image-icons.html +146 -0
  136. data/app/assets/components/core-icons/index.html +22 -0
  137. data/app/assets/components/core-icons/maps-icons.html +69 -0
  138. data/app/assets/components/core-icons/notification-icons.html +50 -0
  139. data/app/assets/components/core-icons/png-icons.html +19 -0
  140. data/app/assets/components/core-icons/social-icons.html +52 -0
  141. data/app/assets/components/core-iconset/README.md +4 -0
  142. data/app/assets/components/core-iconset/bower.json +9 -0
  143. data/app/assets/components/core-iconset/{core-iconset.html.erb → core-iconset.html} +29 -24
  144. data/app/assets/components/core-iconset/demo.html +62 -0
  145. data/app/assets/components/core-iconset/index.html +22 -0
  146. data/app/assets/components/core-iconset/my-icons-big.png +0 -0
  147. data/app/assets/components/core-iconset/my-icons.png +0 -0
  148. data/app/assets/components/core-iconset-svg/README.md +4 -0
  149. data/app/assets/components/core-iconset-svg/bower.json +8 -0
  150. data/app/assets/components/core-iconset-svg/core-iconset-svg.html +14 -16
  151. data/app/assets/components/core-iconset-svg/demo.html +66 -0
  152. data/app/assets/components/core-iconset-svg/index.html +22 -0
  153. data/app/assets/components/core-iconset-svg/svg-sample-icons.html +68 -0
  154. data/app/assets/components/core-input/README.md +2 -0
  155. data/app/assets/components/core-input/bower.json +6 -0
  156. data/app/assets/components/core-input/core-input.css +10 -0
  157. data/app/assets/components/core-input/core-input.html +454 -0
  158. data/app/assets/components/core-input/demo.html +142 -0
  159. data/app/assets/components/core-input/index.html +22 -0
  160. data/app/assets/components/core-input/metadata.html +20 -0
  161. data/app/assets/components/core-item/README.md +4 -0
  162. data/app/assets/components/core-item/bower.json +8 -0
  163. data/app/assets/components/core-item/core-item.css +13 -0
  164. data/app/assets/components/core-item/{core-item.html.erb → core-item.html} +10 -16
  165. data/app/assets/components/core-item/demo.html +92 -0
  166. data/app/assets/components/core-item/index.html +22 -0
  167. data/app/assets/components/core-item/metadata.html +24 -0
  168. data/app/assets/components/core-layout-grid/README.md +4 -0
  169. data/app/assets/components/core-layout-grid/bower.json +7 -0
  170. data/app/assets/components/core-layout-grid/core-layout-grid.html +350 -0
  171. data/app/assets/components/core-layout-grid/demo.html +116 -0
  172. data/app/assets/components/core-layout-grid/index.html +22 -0
  173. data/app/assets/components/core-layout-grid/metadata.html +22 -0
  174. data/app/assets/components/core-layout-trbl/README.md +4 -0
  175. data/app/assets/components/core-layout-trbl/bower.json +7 -0
  176. data/app/assets/components/core-layout-trbl/core-layout-trbl.html +269 -0
  177. data/app/assets/components/core-layout-trbl/core-slide.html +181 -0
  178. data/app/assets/components/core-layout-trbl/demo.html +58 -0
  179. data/app/assets/components/core-layout-trbl/index.html +22 -0
  180. data/app/assets/components/core-list/README.md +4 -0
  181. data/app/assets/components/core-list/bower.json +8 -0
  182. data/app/assets/components/core-list/core-list.css +18 -4
  183. data/app/assets/components/core-list/{core-list.html.erb → core-list.html} +27 -27
  184. data/app/assets/components/core-list/demo-divider.html +178 -0
  185. data/app/assets/components/core-list/demo.html +154 -0
  186. data/app/assets/components/core-list/images/0.png +0 -0
  187. data/app/assets/components/core-list/images/1.png +0 -0
  188. data/app/assets/components/core-list/images/2.png +0 -0
  189. data/app/assets/components/core-list/images/3.png +0 -0
  190. data/app/assets/components/core-list/index.html +22 -0
  191. data/app/assets/components/core-localstorage/README.md +4 -0
  192. data/app/assets/components/core-localstorage/bower.json +7 -0
  193. data/app/assets/components/core-localstorage/core-localstorage.html +13 -11
  194. data/app/assets/components/core-localstorage/demo.html +50 -0
  195. data/app/assets/components/core-localstorage/index.html +22 -0
  196. data/app/assets/components/core-media-query/README.md +4 -0
  197. data/app/assets/components/core-media-query/bower.json +7 -0
  198. data/app/assets/components/core-media-query/core-media-query.html +1 -0
  199. data/app/assets/components/core-media-query/demo.html +44 -0
  200. data/app/assets/components/core-media-query/index.html +22 -0
  201. data/app/assets/components/core-menu/README.md +4 -0
  202. data/app/assets/components/core-menu/bower.json +9 -0
  203. data/app/assets/components/core-menu/{core-menu.html.erb → core-menu.html} +3 -3
  204. data/app/assets/components/core-menu/{core-submenu.html.erb → core-submenu.html} +10 -10
  205. data/app/assets/components/core-menu/demo.html +101 -0
  206. data/app/assets/components/core-menu/index.html +22 -0
  207. data/app/assets/components/core-menu/metadata.html +62 -0
  208. data/app/assets/components/core-menu-button/README.md +2 -0
  209. data/app/assets/components/core-menu-button/bower.json +11 -0
  210. data/app/assets/components/core-menu-button/core-menu-button.html +118 -0
  211. data/app/assets/components/core-menu-button/demo.html +98 -0
  212. data/app/assets/components/core-menu-button/index.html +22 -0
  213. data/app/assets/components/core-menu-button/metadata.html +26 -0
  214. data/app/assets/components/core-meta/README.md +4 -0
  215. data/app/assets/components/core-meta/bower.json +7 -0
  216. data/app/assets/components/core-meta/core-meta.html +24 -22
  217. data/app/assets/components/core-meta/demo.html +58 -0
  218. data/app/assets/components/core-meta/index.html +22 -0
  219. data/app/assets/components/core-overlay/README.md +4 -0
  220. data/app/assets/components/core-overlay/bower.json +8 -0
  221. data/app/assets/components/core-overlay/core-key-helper.html +2 -0
  222. data/app/assets/components/core-overlay/{core-overlay.html.erb → core-overlay.html} +77 -51
  223. data/app/assets/components/core-overlay/demo.html +155 -0
  224. data/app/assets/components/core-overlay/index.html +22 -0
  225. data/app/assets/components/core-pages/README.md +4 -0
  226. data/app/assets/components/core-pages/bower.json +7 -0
  227. data/app/assets/components/core-pages/{core-pages.html.erb → core-pages.html} +5 -4
  228. data/app/assets/components/core-pages/demo.html +136 -0
  229. data/app/assets/components/core-pages/index.html +22 -0
  230. data/app/assets/components/core-pages/metadata.html +25 -0
  231. data/app/assets/components/core-popup-menu/README.md +6 -0
  232. data/app/assets/components/core-popup-menu/bower.json +13 -0
  233. data/app/assets/components/core-popup-menu/core-popup-menu.css +28 -0
  234. data/app/assets/components/core-popup-menu/core-popup-menu.html +198 -0
  235. data/app/assets/components/core-popup-menu/core-popup-overlay.html +111 -0
  236. data/app/assets/components/core-popup-menu/demo.html +542 -0
  237. data/app/assets/components/core-popup-menu/index.html +22 -0
  238. data/app/assets/components/core-popup-menu/metadata.html +62 -0
  239. data/app/assets/components/core-range/README.md +2 -0
  240. data/app/assets/components/core-range/bower.json +7 -0
  241. data/app/assets/components/core-range/core-range.html +16 -15
  242. data/app/assets/components/core-range/demo.html +64 -0
  243. data/app/assets/components/core-range/index.html +22 -0
  244. data/app/assets/components/core-scaffold/README.md +4 -0
  245. data/app/assets/components/core-scaffold/bower.json +10 -0
  246. data/app/assets/components/core-scaffold/{core-scaffold.html.erb → core-scaffold.html} +35 -25
  247. data/app/assets/components/core-scaffold/demo.html +82 -0
  248. data/app/assets/components/core-scaffold/index.html +22 -0
  249. data/app/assets/components/core-scaffold/metadata.html +52 -0
  250. data/app/assets/components/core-scroll-header-panel/README.md +4 -0
  251. data/app/assets/components/core-scroll-header-panel/bower.json +11 -0
  252. data/app/assets/components/core-scroll-header-panel/core-scroll-header-panel.css +1 -0
  253. data/app/assets/components/core-scroll-header-panel/{core-scroll-header-panel.html.erb → core-scroll-header-panel.html} +132 -76
  254. data/app/assets/components/core-scroll-header-panel/demo.html +111 -0
  255. data/app/assets/components/core-scroll-header-panel/demos/demo1.html +80 -0
  256. data/app/assets/components/core-scroll-header-panel/demos/demo2.html +82 -0
  257. data/app/assets/components/core-scroll-header-panel/demos/demo3.html +81 -0
  258. data/app/assets/components/core-scroll-header-panel/demos/demo4.html +109 -0
  259. data/app/assets/components/core-scroll-header-panel/demos/demo5.html +109 -0
  260. data/app/assets/components/core-scroll-header-panel/demos/demo6.html +113 -0
  261. data/app/assets/components/core-scroll-header-panel/demos/demo7.html +120 -0
  262. data/app/assets/components/core-scroll-header-panel/demos/demo8.html +122 -0
  263. data/app/assets/components/core-scroll-header-panel/demos/demo9.html +100 -0
  264. data/app/assets/components/core-scroll-header-panel/demos/images/bg2.jpg +0 -0
  265. data/app/assets/components/core-scroll-header-panel/demos/images/bg3.jpg +0 -0
  266. data/app/assets/components/core-scroll-header-panel/demos/images/bg5.jpg +0 -0
  267. data/app/assets/components/core-scroll-header-panel/demos/images/bg6.jpg +0 -0
  268. data/app/assets/components/core-scroll-header-panel/demos/images/bg9.jpg +0 -0
  269. data/app/assets/components/core-scroll-header-panel/demos/lorem-ipsum.html +42 -0
  270. data/app/assets/components/core-scroll-header-panel/index.html +22 -0
  271. data/app/assets/components/core-scroll-header-panel/metadata.html +41 -0
  272. data/app/assets/components/core-selection/README.md +4 -0
  273. data/app/assets/components/core-selection/bower.json +7 -0
  274. data/app/assets/components/core-selection/core-selection.html +6 -5
  275. data/app/assets/components/core-selection/demo.html +59 -0
  276. data/app/assets/components/core-selection/index.html +22 -0
  277. data/app/assets/components/core-selector/README.md +4 -0
  278. data/app/assets/components/core-selector/bower.json +8 -0
  279. data/app/assets/components/core-selector/{core-selector.html.erb → core-selector.html} +53 -16
  280. data/app/assets/components/core-selector/demo.html +106 -0
  281. data/app/assets/components/core-selector/index.html +22 -0
  282. data/app/assets/components/core-selector/metadata.html +20 -0
  283. data/app/assets/components/core-shared-lib/README.md +4 -0
  284. data/app/assets/components/core-shared-lib/bower.json +7 -0
  285. data/app/assets/components/core-shared-lib/core-shared-lib.html +21 -20
  286. data/app/assets/components/core-shared-lib/demo.html +33 -0
  287. data/app/assets/components/core-shared-lib/index.html +22 -0
  288. data/app/assets/components/core-signals/README.md +4 -0
  289. data/app/assets/components/core-signals/bower.json +7 -0
  290. data/app/assets/components/core-signals/core-signals.html +7 -6
  291. data/app/assets/components/core-signals/demo.html +53 -0
  292. data/app/assets/components/core-signals/index.html +22 -0
  293. data/app/assets/components/core-splitter/README.md +4 -0
  294. data/app/assets/components/core-splitter/bower.json +7 -0
  295. data/app/assets/components/core-splitter/{core-splitter.css.erb → core-splitter.css} +2 -2
  296. data/app/assets/components/core-splitter/{core-splitter.html.erb → core-splitter.html} +13 -25
  297. data/app/assets/components/core-splitter/demo.html +80 -0
  298. data/app/assets/components/core-splitter/index.html +22 -0
  299. data/app/assets/components/core-style/README.md +4 -0
  300. data/app/assets/components/core-style/bower.json +7 -0
  301. data/app/assets/components/core-style/core-style.html +19 -17
  302. data/app/assets/components/core-style/demo.html +58 -0
  303. data/app/assets/components/core-style/elements.html +55 -0
  304. data/app/assets/components/core-style/index.html +22 -0
  305. data/app/assets/components/core-style/my-theme.html +73 -0
  306. data/app/assets/components/core-tests/README.md +4 -0
  307. data/app/assets/components/core-tests/bower.json +7 -0
  308. data/app/assets/components/core-tests/runner.html +29 -0
  309. data/app/assets/components/core-tests/tests/core-ajax.html +49 -0
  310. data/app/assets/components/core-tests/tests/core-collapse.html +68 -0
  311. data/app/assets/components/core-tests/tests/core-localstorage.html +38 -0
  312. data/app/assets/components/core-tests/tests/core-selection-multi.html +55 -0
  313. data/app/assets/components/core-tests/tests/core-selection.html +54 -0
  314. data/app/assets/components/core-tests/tests/core-selector-activate-event.html +50 -0
  315. data/app/assets/components/core-tests/tests/core-selector-basic.html +105 -0
  316. data/app/assets/components/core-tests/tests/core-selector-multi.html +86 -0
  317. data/app/assets/components/core-tests/tests/core-shared-lib.html +48 -0
  318. data/app/assets/components/core-tests/tests/tests.html +46 -0
  319. data/app/assets/components/core-toolbar/README.md +4 -0
  320. data/app/assets/components/core-toolbar/bower.json +7 -0
  321. data/app/assets/components/core-toolbar/core-toolbar.css +1 -17
  322. data/app/assets/components/core-toolbar/{core-toolbar.html.erb → core-toolbar.html} +6 -5
  323. data/app/assets/components/core-toolbar/demo.html +107 -0
  324. data/app/assets/components/core-toolbar/index.html +22 -0
  325. data/app/assets/components/core-toolbar/metadata.html +28 -0
  326. data/app/assets/components/core-tooltip/README.md +4 -0
  327. data/app/assets/components/core-tooltip/bower.json +7 -0
  328. data/app/assets/components/core-tooltip/core-tooltip.css +2 -2
  329. data/app/assets/components/core-tooltip/{core-tooltip.html.erb → core-tooltip.html} +3 -3
  330. data/app/assets/components/core-tooltip/demo.html +176 -0
  331. data/app/assets/components/core-tooltip/index.html +23 -0
  332. data/app/assets/components/core-tooltip/metadata.html +18 -0
  333. data/app/assets/components/core-transition/README.md +2 -0
  334. data/app/assets/components/core-transition/bower.json +8 -0
  335. data/app/assets/components/core-transition/core-transition-css.html +221 -0
  336. data/app/assets/components/core-transition/core-transition.html +140 -0
  337. data/app/assets/components/core-transition/demo.html +87 -0
  338. data/app/assets/components/core-transition/index.html +22 -0
  339. data/app/assets/components/google-code-prettify/CHANGES.html +172 -0
  340. data/app/assets/components/google-code-prettify/COPYING +191 -0
  341. data/app/assets/components/google-code-prettify/README-zh-Hans.html +143 -0
  342. data/app/assets/components/google-code-prettify/README.html +233 -0
  343. data/app/assets/components/google-code-prettify/README.md +54 -0
  344. data/app/assets/components/google-code-prettify/bin/prettify.min.css +1 -0
  345. data/app/assets/components/google-code-prettify/bin/prettify.min.js +30 -0
  346. data/app/assets/components/google-code-prettify/bin/run_prettify.min.js +34 -0
  347. data/app/assets/components/google-code-prettify/bower.json +16 -0
  348. data/app/assets/components/google-code-prettify/examples/quine.html +55 -0
  349. data/app/assets/components/google-code-prettify/src/lang-apollo.js +51 -0
  350. data/app/assets/components/google-code-prettify/src/lang-basic.js +32 -0
  351. data/app/assets/components/google-code-prettify/src/lang-clj.js +64 -0
  352. data/app/assets/components/google-code-prettify/src/lang-css.js +159 -0
  353. data/app/assets/components/google-code-prettify/src/lang-dart.js +88 -0
  354. data/app/assets/components/google-code-prettify/src/lang-erlang.js +92 -0
  355. data/app/assets/components/google-code-prettify/src/lang-go.js +58 -0
  356. data/app/assets/components/google-code-prettify/src/lang-hs.js +101 -0
  357. data/app/assets/components/google-code-prettify/src/lang-lisp.js +94 -0
  358. data/app/assets/components/google-code-prettify/src/lang-llvm.js +61 -0
  359. data/app/assets/components/google-code-prettify/src/lang-lua.js +59 -0
  360. data/app/assets/components/google-code-prettify/src/lang-matlab.js +180 -0
  361. data/app/assets/components/google-code-prettify/src/lang-ml.js +56 -0
  362. data/app/assets/components/google-code-prettify/src/lang-mumps.js +139 -0
  363. data/app/assets/components/google-code-prettify/src/lang-n.js +65 -0
  364. data/app/assets/components/google-code-prettify/src/lang-pascal.js +32 -0
  365. data/app/assets/components/google-code-prettify/src/lang-proto.js +35 -0
  366. data/app/assets/components/google-code-prettify/src/lang-r.js +57 -0
  367. data/app/assets/components/google-code-prettify/src/lang-rd.js +47 -0
  368. data/app/assets/components/google-code-prettify/src/lang-scala.js +54 -0
  369. data/app/assets/components/google-code-prettify/src/lang-sql.js +58 -0
  370. data/app/assets/components/google-code-prettify/src/lang-tcl.js +62 -0
  371. data/app/assets/components/google-code-prettify/src/lang-tex.js +46 -0
  372. data/app/assets/components/google-code-prettify/src/lang-vb.js +66 -0
  373. data/app/assets/components/google-code-prettify/src/lang-vhdl.js +34 -0
  374. data/app/assets/components/google-code-prettify/src/lang-wiki.js +53 -0
  375. data/app/assets/components/google-code-prettify/src/lang-xq.js +67 -0
  376. data/app/assets/components/google-code-prettify/src/lang-yaml.js +27 -0
  377. data/app/assets/components/google-code-prettify/src/prettify.css +52 -0
  378. data/app/assets/components/google-code-prettify/src/prettify.js +1597 -0
  379. data/app/assets/components/google-code-prettify/src/run_prettify.js +1905 -0
  380. data/app/assets/components/google-code-prettify/styles/demo.html +61 -0
  381. data/app/assets/components/google-code-prettify/styles/desert.css +34 -0
  382. data/app/assets/components/google-code-prettify/styles/doxy.css +64 -0
  383. data/app/assets/components/google-code-prettify/styles/index.html +89 -0
  384. data/app/assets/components/google-code-prettify/styles/sons-of-obsidian.css +118 -0
  385. data/app/assets/components/google-code-prettify/styles/sunburst.css +51 -0
  386. data/app/assets/components/marked/LICENSE +19 -0
  387. data/app/assets/components/marked/Makefile +12 -0
  388. data/app/assets/components/marked/README.md +386 -0
  389. data/app/assets/components/marked/bin/marked +187 -0
  390. data/app/assets/components/marked/component.json +10 -0
  391. data/app/assets/components/marked/doc/broken.md +426 -0
  392. data/app/assets/components/marked/doc/todo.md +2 -0
  393. data/app/assets/components/marked/index.js +1 -0
  394. data/app/assets/components/marked/lib/marked.js +1266 -0
  395. data/app/assets/components/marked/man/marked.1 +88 -0
  396. data/app/assets/components/marked/package.json +22 -0
  397. data/app/assets/components/marked/test/README +10 -0
  398. data/app/assets/components/marked/test/browser/index.html +5 -0
  399. data/app/assets/components/marked/test/browser/index.js +41 -0
  400. data/app/assets/components/marked/test/browser/test.js +62 -0
  401. data/app/assets/components/marked/test/index.js +543 -0
  402. data/app/assets/components/marked/test/new/autolink_lines.html +3 -0
  403. data/app/assets/components/marked/test/new/autolink_lines.text +2 -0
  404. data/app/assets/components/marked/test/new/blockquote_list_item.html +3 -0
  405. data/app/assets/components/marked/test/new/blockquote_list_item.text +4 -0
  406. data/app/assets/components/marked/test/new/case_insensitive_refs.html +1 -0
  407. data/app/assets/components/marked/test/new/case_insensitive_refs.text +3 -0
  408. data/app/assets/components/marked/test/new/def_blocks.html +28 -0
  409. data/app/assets/components/marked/test/new/def_blocks.text +21 -0
  410. data/app/assets/components/marked/test/new/double_link.html +5 -0
  411. data/app/assets/components/marked/test/new/double_link.text +5 -0
  412. data/app/assets/components/marked/test/new/escaped_angles.html +1 -0
  413. data/app/assets/components/marked/test/new/escaped_angles.text +1 -0
  414. data/app/assets/components/marked/test/new/gfm_break.breaks.html +1 -0
  415. data/app/assets/components/marked/test/new/gfm_break.breaks.text +3 -0
  416. data/app/assets/components/marked/test/new/gfm_code.html +5 -0
  417. data/app/assets/components/marked/test/new/gfm_code.text +16 -0
  418. data/app/assets/components/marked/test/new/gfm_code_hr_list.html +52 -0
  419. data/app/assets/components/marked/test/new/gfm_code_hr_list.text +53 -0
  420. data/app/assets/components/marked/test/new/gfm_del.html +1 -0
  421. data/app/assets/components/marked/test/new/gfm_del.text +1 -0
  422. data/app/assets/components/marked/test/new/gfm_em.html +1 -0
  423. data/app/assets/components/marked/test/new/gfm_em.text +1 -0
  424. data/app/assets/components/marked/test/new/gfm_links.html +2 -0
  425. data/app/assets/components/marked/test/new/gfm_links.text +1 -0
  426. data/app/assets/components/marked/test/new/gfm_tables.html +37 -0
  427. data/app/assets/components/marked/test/new/gfm_tables.text +21 -0
  428. data/app/assets/components/marked/test/new/hr_list_break.html +10 -0
  429. data/app/assets/components/marked/test/new/hr_list_break.text +6 -0
  430. data/app/assets/components/marked/test/new/lazy_blockquotes.html +4 -0
  431. data/app/assets/components/marked/test/new/lazy_blockquotes.text +2 -0
  432. data/app/assets/components/marked/test/new/list_item_text.html +1 -0
  433. data/app/assets/components/marked/test/new/list_item_text.text +5 -0
  434. data/app/assets/components/marked/test/new/loose_lists.html +62 -0
  435. data/app/assets/components/marked/test/new/loose_lists.text +59 -0
  436. data/app/assets/components/marked/test/new/main.html +4 -0
  437. data/app/assets/components/marked/test/new/main.text +55 -0
  438. data/app/assets/components/marked/test/new/nested_code.html +1 -0
  439. data/app/assets/components/marked/test/new/nested_code.text +1 -0
  440. data/app/assets/components/marked/test/new/nested_em.html +3 -0
  441. data/app/assets/components/marked/test/new/nested_em.text +3 -0
  442. data/app/assets/components/marked/test/new/nested_square_link.html +1 -0
  443. data/app/assets/components/marked/test/new/nested_square_link.text +1 -0
  444. data/app/assets/components/marked/test/new/not_a_link.html +1 -0
  445. data/app/assets/components/marked/test/new/not_a_link.text +1 -0
  446. data/app/assets/components/marked/test/new/ref_paren.html +1 -0
  447. data/app/assets/components/marked/test/new/ref_paren.text +3 -0
  448. data/app/assets/components/marked/test/new/same_bullet.html +5 -0
  449. data/app/assets/components/marked/test/new/same_bullet.text +3 -0
  450. data/app/assets/components/marked/test/new/text.smartypants.html +6 -0
  451. data/app/assets/components/marked/test/new/text.smartypants.text +6 -0
  452. data/app/assets/components/marked/test/new/toplevel_paragraphs.gfm.html +34 -0
  453. data/app/assets/components/marked/test/new/toplevel_paragraphs.gfm.text +37 -0
  454. data/app/assets/components/marked/test/new/tricky_list.html +23 -0
  455. data/app/assets/components/marked/test/new/tricky_list.text +15 -0
  456. data/app/assets/components/marked/test/original/amps_and_angles_encoding.html +17 -0
  457. data/app/assets/components/marked/test/original/amps_and_angles_encoding.text +21 -0
  458. data/app/assets/components/marked/test/original/auto_links.html +18 -0
  459. data/app/assets/components/marked/test/original/auto_links.text +13 -0
  460. data/app/assets/components/marked/test/original/backslash_escapes.html +118 -0
  461. data/app/assets/components/marked/test/original/backslash_escapes.text +120 -0
  462. data/app/assets/components/marked/test/original/blockquotes_with_code_blocks.html +15 -0
  463. data/app/assets/components/marked/test/original/blockquotes_with_code_blocks.text +11 -0
  464. data/app/assets/components/marked/test/original/code_blocks.html +18 -0
  465. data/app/assets/components/marked/test/original/code_blocks.text +14 -0
  466. data/app/assets/components/marked/test/original/code_spans.html +6 -0
  467. data/app/assets/components/marked/test/original/code_spans.text +6 -0
  468. data/app/assets/components/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.html +8 -0
  469. data/app/assets/components/marked/test/original/hard_wrapped_paragraphs_with_list_like_lines.text +8 -0
  470. data/app/assets/components/marked/test/original/horizontal_rules.html +71 -0
  471. data/app/assets/components/marked/test/original/horizontal_rules.text +67 -0
  472. data/app/assets/components/marked/test/original/inline_html_advanced.html +15 -0
  473. data/app/assets/components/marked/test/original/inline_html_advanced.text +15 -0
  474. data/app/assets/components/marked/test/original/inline_html_comments.html +13 -0
  475. data/app/assets/components/marked/test/original/inline_html_comments.text +13 -0
  476. data/app/assets/components/marked/test/original/inline_html_simple.html +72 -0
  477. data/app/assets/components/marked/test/original/inline_html_simple.text +69 -0
  478. data/app/assets/components/marked/test/original/links_inline_style.html +15 -0
  479. data/app/assets/components/marked/test/original/links_inline_style.text +15 -0
  480. data/app/assets/components/marked/test/original/links_reference_style.html +52 -0
  481. data/app/assets/components/marked/test/original/links_reference_style.text +71 -0
  482. data/app/assets/components/marked/test/original/links_shortcut_references.html +9 -0
  483. data/app/assets/components/marked/test/original/links_shortcut_references.text +20 -0
  484. data/app/assets/components/marked/test/original/literal_quotes_in_titles.html +3 -0
  485. data/app/assets/components/marked/test/original/literal_quotes_in_titles.text +7 -0
  486. data/app/assets/components/marked/test/original/markdown_documentation_basics.html +314 -0
  487. data/app/assets/components/marked/test/original/markdown_documentation_basics.text +306 -0
  488. data/app/assets/components/marked/test/original/markdown_documentation_syntax.html +942 -0
  489. data/app/assets/components/marked/test/original/markdown_documentation_syntax.text +888 -0
  490. data/app/assets/components/marked/test/original/nested_blockquotes.html +9 -0
  491. data/app/assets/components/marked/test/original/nested_blockquotes.text +5 -0
  492. data/app/assets/components/marked/test/original/ordered_and_unordered_lists.html +148 -0
  493. data/app/assets/components/marked/test/original/ordered_and_unordered_lists.text +131 -0
  494. data/app/assets/components/marked/test/original/strong_and_em_together.html +7 -0
  495. data/app/assets/components/marked/test/original/strong_and_em_together.text +7 -0
  496. data/app/assets/components/marked/test/original/tabs.html +25 -0
  497. data/app/assets/components/marked/test/original/tabs.text +21 -0
  498. data/app/assets/components/marked/test/original/tidyness.html +8 -0
  499. data/app/assets/components/marked/test/original/tidyness.text +5 -0
  500. data/app/assets/components/marked/test/tests/amps_and_angles_encoding.html +17 -0
  501. data/app/assets/components/marked/test/tests/amps_and_angles_encoding.text +21 -0
  502. data/app/assets/components/marked/test/tests/auto_links.html +18 -0
  503. data/app/assets/components/marked/test/tests/auto_links.text +13 -0
  504. data/app/assets/components/marked/test/tests/autolink_lines.html +3 -0
  505. data/app/assets/components/marked/test/tests/autolink_lines.text +2 -0
  506. data/app/assets/components/marked/test/tests/backslash_escapes.html +118 -0
  507. data/app/assets/components/marked/test/tests/backslash_escapes.text +120 -0
  508. data/app/assets/components/marked/test/tests/blockquote_list_item.html +3 -0
  509. data/app/assets/components/marked/test/tests/blockquote_list_item.text +4 -0
  510. data/app/assets/components/marked/test/tests/blockquotes_with_code_blocks.html +15 -0
  511. data/app/assets/components/marked/test/tests/blockquotes_with_code_blocks.text +11 -0
  512. data/app/assets/components/marked/test/tests/case_insensitive_refs.html +1 -0
  513. data/app/assets/components/marked/test/tests/case_insensitive_refs.text +3 -0
  514. data/app/assets/components/marked/test/tests/code_blocks.html +18 -0
  515. data/app/assets/components/marked/test/tests/code_blocks.text +14 -0
  516. data/app/assets/components/marked/test/tests/code_spans.html +6 -0
  517. data/app/assets/components/marked/test/tests/code_spans.text +6 -0
  518. data/app/assets/components/marked/test/tests/def_blocks.html +28 -0
  519. data/app/assets/components/marked/test/tests/def_blocks.text +21 -0
  520. data/app/assets/components/marked/test/tests/double_link.html +5 -0
  521. data/app/assets/components/marked/test/tests/double_link.text +5 -0
  522. data/app/assets/components/marked/test/tests/escaped_angles.html +1 -0
  523. data/app/assets/components/marked/test/tests/escaped_angles.text +1 -0
  524. data/app/assets/components/marked/test/tests/gfm_break.breaks.html +1 -0
  525. data/app/assets/components/marked/test/tests/gfm_break.breaks.text +3 -0
  526. data/app/assets/components/marked/test/tests/gfm_code.html +5 -0
  527. data/app/assets/components/marked/test/tests/gfm_code.text +16 -0
  528. data/app/assets/components/marked/test/tests/gfm_code_hr_list.html +52 -0
  529. data/app/assets/components/marked/test/tests/gfm_code_hr_list.text +53 -0
  530. data/app/assets/components/marked/test/tests/gfm_del.html +1 -0
  531. data/app/assets/components/marked/test/tests/gfm_del.text +1 -0
  532. data/app/assets/components/marked/test/tests/gfm_em.html +1 -0
  533. data/app/assets/components/marked/test/tests/gfm_em.text +1 -0
  534. data/app/assets/components/marked/test/tests/gfm_links.html +2 -0
  535. data/app/assets/components/marked/test/tests/gfm_links.text +1 -0
  536. data/app/assets/components/marked/test/tests/gfm_tables.html +37 -0
  537. data/app/assets/components/marked/test/tests/gfm_tables.text +21 -0
  538. data/app/assets/components/marked/test/tests/hard_wrapped_paragraphs_with_list_like_lines.nogfm.html +8 -0
  539. data/app/assets/components/marked/test/tests/hard_wrapped_paragraphs_with_list_like_lines.nogfm.text +8 -0
  540. data/app/assets/components/marked/test/tests/horizontal_rules.html +71 -0
  541. data/app/assets/components/marked/test/tests/horizontal_rules.text +67 -0
  542. data/app/assets/components/marked/test/tests/hr_list_break.html +10 -0
  543. data/app/assets/components/marked/test/tests/hr_list_break.text +6 -0
  544. data/app/assets/components/marked/test/tests/inline_html_advanced.html +15 -0
  545. data/app/assets/components/marked/test/tests/inline_html_advanced.text +15 -0
  546. data/app/assets/components/marked/test/tests/inline_html_comments.html +13 -0
  547. data/app/assets/components/marked/test/tests/inline_html_comments.text +13 -0
  548. data/app/assets/components/marked/test/tests/inline_html_simple.html +72 -0
  549. data/app/assets/components/marked/test/tests/inline_html_simple.text +69 -0
  550. data/app/assets/components/marked/test/tests/lazy_blockquotes.html +4 -0
  551. data/app/assets/components/marked/test/tests/lazy_blockquotes.text +2 -0
  552. data/app/assets/components/marked/test/tests/links_inline_style.html +15 -0
  553. data/app/assets/components/marked/test/tests/links_inline_style.text +15 -0
  554. data/app/assets/components/marked/test/tests/links_reference_style.html +52 -0
  555. data/app/assets/components/marked/test/tests/links_reference_style.text +71 -0
  556. data/app/assets/components/marked/test/tests/links_shortcut_references.html +9 -0
  557. data/app/assets/components/marked/test/tests/links_shortcut_references.text +20 -0
  558. data/app/assets/components/marked/test/tests/list_item_text.html +1 -0
  559. data/app/assets/components/marked/test/tests/list_item_text.text +5 -0
  560. data/app/assets/components/marked/test/tests/literal_quotes_in_titles.html +3 -0
  561. data/app/assets/components/marked/test/tests/literal_quotes_in_titles.text +7 -0
  562. data/app/assets/components/marked/test/tests/loose_lists.html +62 -0
  563. data/app/assets/components/marked/test/tests/loose_lists.text +59 -0
  564. data/app/assets/components/marked/test/tests/main.html +4 -0
  565. data/app/assets/components/marked/test/tests/main.text +55 -0
  566. data/app/assets/components/marked/test/tests/markdown_documentation_basics.html +314 -0
  567. data/app/assets/components/marked/test/tests/markdown_documentation_basics.text +306 -0
  568. data/app/assets/components/marked/test/tests/markdown_documentation_syntax.html +942 -0
  569. data/app/assets/components/marked/test/tests/markdown_documentation_syntax.text +888 -0
  570. data/app/assets/components/marked/test/tests/nested_blockquotes.html +9 -0
  571. data/app/assets/components/marked/test/tests/nested_blockquotes.text +5 -0
  572. data/app/assets/components/marked/test/tests/nested_code.html +1 -0
  573. data/app/assets/components/marked/test/tests/nested_code.text +1 -0
  574. data/app/assets/components/marked/test/tests/nested_em.html +3 -0
  575. data/app/assets/components/marked/test/tests/nested_em.text +3 -0
  576. data/app/assets/components/marked/test/tests/nested_square_link.html +1 -0
  577. data/app/assets/components/marked/test/tests/nested_square_link.text +1 -0
  578. data/app/assets/components/marked/test/tests/not_a_link.html +1 -0
  579. data/app/assets/components/marked/test/tests/not_a_link.text +1 -0
  580. data/app/assets/components/marked/test/tests/ordered_and_unordered_lists.html +148 -0
  581. data/app/assets/components/marked/test/tests/ordered_and_unordered_lists.text +131 -0
  582. data/app/assets/components/marked/test/tests/ref_paren.html +1 -0
  583. data/app/assets/components/marked/test/tests/ref_paren.text +3 -0
  584. data/app/assets/components/marked/test/tests/same_bullet.html +5 -0
  585. data/app/assets/components/marked/test/tests/same_bullet.text +3 -0
  586. data/app/assets/components/marked/test/tests/strong_and_em_together.html +7 -0
  587. data/app/assets/components/marked/test/tests/strong_and_em_together.text +7 -0
  588. data/app/assets/components/marked/test/tests/tabs.html +25 -0
  589. data/app/assets/components/marked/test/tests/tabs.text +21 -0
  590. data/app/assets/components/marked/test/tests/text.smartypants.html +6 -0
  591. data/app/assets/components/marked/test/tests/text.smartypants.text +6 -0
  592. data/app/assets/components/marked/test/tests/tidyness.html +8 -0
  593. data/app/assets/components/marked/test/tests/tidyness.text +5 -0
  594. data/app/assets/components/marked/test/tests/toplevel_paragraphs.gfm.html +34 -0
  595. data/app/assets/components/marked/test/tests/toplevel_paragraphs.gfm.text +37 -0
  596. data/app/assets/components/marked/test/tests/tricky_list.html +23 -0
  597. data/app/assets/components/marked/test/tests/tricky_list.text +15 -0
  598. data/app/assets/components/marked-element/README.md +4 -0
  599. data/app/assets/components/marked-element/bower.json +8 -0
  600. data/app/assets/components/marked-element/demo.html +51 -0
  601. data/app/assets/components/marked-element/index.html +22 -0
  602. data/app/assets/components/marked-element/marked-element.html +50 -0
  603. data/app/assets/components/marked-element/marked-import.html +10 -0
  604. data/app/assets/components/platform/README.md +6 -0
  605. data/app/assets/components/platform/bower.json +16 -0
  606. data/app/assets/components/platform/build.log +35 -0
  607. data/app/assets/components/platform/platform.js +16 -0
  608. data/app/assets/components/platform/platform.js.map +1 -0
  609. data/app/assets/components/polymer/README.md +17 -0
  610. data/app/assets/components/polymer/bower.json +8 -0
  611. data/app/assets/components/polymer/build.log +35 -0
  612. data/app/assets/components/polymer/layout.html +286 -0
  613. data/app/assets/components/polymer/polymer.html +13 -0
  614. data/app/assets/components/polymer/polymer.js +14 -0
  615. data/app/assets/components/polymer/polymer.js.map +1 -0
  616. data/app/assets/components/polymer-test-tools/README.md +4 -0
  617. data/app/assets/components/polymer-test-tools/bower.json +5 -0
  618. data/app/assets/components/polymer-test-tools/chai/CONTRIBUTING.md +173 -0
  619. data/app/assets/components/polymer-test-tools/chai/History.md +895 -0
  620. data/app/assets/components/polymer-test-tools/chai/README.md +99 -0
  621. data/app/assets/components/polymer-test-tools/chai/ReleaseNotes.md +482 -0
  622. data/app/assets/components/polymer-test-tools/chai/bower.json +27 -0
  623. data/app/assets/components/polymer-test-tools/chai/chai.js +4782 -0
  624. data/app/assets/components/polymer-test-tools/chai/component.json +49 -0
  625. data/app/assets/components/polymer-test-tools/chai/karma.conf.js +38 -0
  626. data/app/assets/components/polymer-test-tools/chai/karma.sauce.js +51 -0
  627. data/app/assets/components/polymer-test-tools/chai/package.json +42 -0
  628. data/app/assets/components/polymer-test-tools/chai/sauce.browsers.js +138 -0
  629. data/app/assets/components/polymer-test-tools/htmltest.js +39 -0
  630. data/app/assets/components/polymer-test-tools/karma-common.conf.js +107 -0
  631. data/app/assets/components/polymer-test-tools/mocha/History.md +692 -0
  632. data/app/assets/components/polymer-test-tools/mocha/LICENSE +22 -0
  633. data/app/assets/components/polymer-test-tools/mocha/Readme.md +172 -0
  634. data/app/assets/components/polymer-test-tools/mocha/bower.json +23 -0
  635. data/app/assets/components/polymer-test-tools/mocha/media/logo.svg +8 -0
  636. data/app/assets/components/polymer-test-tools/mocha/mocha.css +270 -0
  637. data/app/assets/components/polymer-test-tools/mocha/mocha.js +5842 -0
  638. data/app/assets/components/polymer-test-tools/mocha-htmltest.js +70 -0
  639. data/app/assets/components/polymer-test-tools/tools.html +14 -0
  640. data/app/assets/components/prettify-element/README.md +14 -0
  641. data/app/assets/components/prettify-element/bower.json +8 -0
  642. data/app/assets/components/prettify-element/demo.html +85 -0
  643. data/app/assets/components/prettify-element/index.html +23 -0
  644. data/app/assets/components/prettify-element/prettify-element.html +120 -0
  645. data/app/assets/components/prettify-element/prettify-import.html +10 -0
  646. data/app/assets/components/sampler-scaffold/README.md +4 -0
  647. data/app/assets/components/sampler-scaffold/bower.json +12 -0
  648. data/app/assets/components/sampler-scaffold/demo.html +54 -0
  649. data/app/assets/components/sampler-scaffold/demos/checkbox.html +20 -0
  650. data/app/assets/components/sampler-scaffold/demos/color.html +20 -0
  651. data/app/assets/components/sampler-scaffold/demos/radio.html +20 -0
  652. data/app/assets/components/sampler-scaffold/demos/range.html +20 -0
  653. data/app/assets/components/sampler-scaffold/demos/string.html +20 -0
  654. data/app/assets/components/sampler-scaffold/index.html +22 -0
  655. data/app/assets/components/sampler-scaffold/sampler-scaffold.css +157 -0
  656. data/app/assets/components/sampler-scaffold/sampler-scaffold.html +224 -0
  657. data/app/assets/components/web-animations-js/COPYING +202 -0
  658. data/app/assets/components/web-animations-js/README.md +237 -0
  659. data/app/assets/components/web-animations-js/run-lint.sh +19 -0
  660. data/app/assets/components/web-animations-js/run-tests-android.sh +25 -0
  661. data/app/assets/components/web-animations-js/run-tests.sh +15 -0
  662. data/app/assets/components/web-animations-js/test/bootstrap.js +1266 -0
  663. data/app/assets/components/web-animations-js/test/img/error.png +0 -0
  664. data/app/assets/components/web-animations-js/test/img/success.png +0 -0
  665. data/app/assets/components/web-animations-js/test/img/unknown.png +0 -0
  666. data/app/assets/components/web-animations-js/test/perf/balls-add-compositing.html +147 -0
  667. data/app/assets/components/web-animations-js/test/perf/balls-replace-compositing.html +144 -0
  668. data/app/assets/components/web-animations-js/test/perf/perf.js +158 -0
  669. data/app/assets/components/web-animations-js/test/perf/updating-inline-style-during-animation.html +165 -0
  670. data/app/assets/components/web-animations-js/test/test-generator.html +240 -0
  671. data/app/assets/components/web-animations-js/test/test-results-post.html +3 -0
  672. data/app/assets/components/web-animations-js/test/test-runner.html +810 -0
  673. data/app/assets/components/web-animations-js/test/testcases/auto-test-box-shadow-checks.js +42 -0
  674. data/app/assets/components/web-animations-js/test/testcases/auto-test-box-shadow.html +40 -0
  675. data/app/assets/components/web-animations-js/test/testcases/auto-test-calc-checks.js +41 -0
  676. data/app/assets/components/web-animations-js/test/testcases/auto-test-calc.html +156 -0
  677. data/app/assets/components/web-animations-js/test/testcases/auto-test-change-playback-rate-checks.js +23 -0
  678. data/app/assets/components/web-animations-js/test/testcases/auto-test-circular-path-checks.js +65 -0
  679. data/app/assets/components/web-animations-js/test/testcases/auto-test-circular-path.html +83 -0
  680. data/app/assets/components/web-animations-js/test/testcases/auto-test-color-checks.js +101 -0
  681. data/app/assets/components/web-animations-js/test/testcases/auto-test-color-names-checks.js +431 -0
  682. data/app/assets/components/web-animations-js/test/testcases/auto-test-color-names.html +204 -0
  683. data/app/assets/components/web-animations-js/test/testcases/auto-test-color.html +117 -0
  684. data/app/assets/components/web-animations-js/test/testcases/auto-test-composite-transforms-checks.js +45 -0
  685. data/app/assets/components/web-animations-js/test/testcases/auto-test-composite-transforms.html +97 -0
  686. data/app/assets/components/web-animations-js/test/testcases/auto-test-compositor-checks.js +26 -0
  687. data/app/assets/components/web-animations-js/test/testcases/auto-test-compositor.html +68 -0
  688. data/app/assets/components/web-animations-js/test/testcases/auto-test-delay-checks.js +92 -0
  689. data/app/assets/components/web-animations-js/test/testcases/auto-test-delay.html +39 -0
  690. data/app/assets/components/web-animations-js/test/testcases/auto-test-element-animate-checks.js +8 -0
  691. data/app/assets/components/web-animations-js/test/testcases/auto-test-element-animate.html +30 -0
  692. data/app/assets/components/web-animations-js/test/testcases/auto-test-fill-values-checks.js +266 -0
  693. data/app/assets/components/web-animations-js/test/testcases/auto-test-fill-values.html +114 -0
  694. data/app/assets/components/web-animations-js/test/testcases/auto-test-font-weight-checks.js +26 -0
  695. data/app/assets/components/web-animations-js/test/testcases/auto-test-font-weight.html +43 -0
  696. data/app/assets/components/web-animations-js/test/testcases/auto-test-initial-checks.js +74 -0
  697. data/app/assets/components/web-animations-js/test/testcases/auto-test-initial.html +242 -0
  698. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style-checks.js +17 -0
  699. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style-fallback-checks.js +17 -0
  700. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style-fallback.html +78 -0
  701. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style-methods-checks.js +17 -0
  702. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style-methods.html +70 -0
  703. data/app/assets/components/web-animations-js/test/testcases/auto-test-inline-style.html +69 -0
  704. data/app/assets/components/web-animations-js/test/testcases/auto-test-integer-checks.js +38 -0
  705. data/app/assets/components/web-animations-js/test/testcases/auto-test-integer.html +52 -0
  706. data/app/assets/components/web-animations-js/test/testcases/auto-test-iteration-start-checks.js +506 -0
  707. data/app/assets/components/web-animations-js/test/testcases/auto-test-iteration-start.html +160 -0
  708. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-alternate-checks.js +44 -0
  709. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-alternate-holes-checks.js +41 -0
  710. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-alternate-holes.html +48 -0
  711. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-alternate.html +50 -0
  712. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-basic-checks.js +162 -0
  713. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-basic.html +116 -0
  714. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-fill-checks.js +602 -0
  715. data/app/assets/components/web-animations-js/test/testcases/auto-test-iterations-fill.html +167 -0
  716. data/app/assets/components/web-animations-js/test/testcases/auto-test-keyframe-creation-checks.js +67 -0
  717. data/app/assets/components/web-animations-js/test/testcases/auto-test-keyframe-creation.html +109 -0
  718. data/app/assets/components/web-animations-js/test/testcases/auto-test-keyframe-easing-checks.js +65 -0
  719. data/app/assets/components/web-animations-js/test/testcases/auto-test-keyframe-easing.html +64 -0
  720. data/app/assets/components/web-animations-js/test/testcases/auto-test-length-units-checks.js +342 -0
  721. data/app/assets/components/web-animations-js/test/testcases/auto-test-length-units.html +103 -0
  722. data/app/assets/components/web-animations-js/test/testcases/auto-test-matrix-transforms-checks.js +56 -0
  723. data/app/assets/components/web-animations-js/test/testcases/auto-test-matrix-transforms.html +90 -0
  724. data/app/assets/components/web-animations-js/test/testcases/auto-test-motion-path-checks.js +110 -0
  725. data/app/assets/components/web-animations-js/test/testcases/auto-test-motion-path.html +133 -0
  726. data/app/assets/components/web-animations-js/test/testcases/auto-test-non-numeric-checks.js +26 -0
  727. data/app/assets/components/web-animations-js/test/testcases/auto-test-non-numeric.html +42 -0
  728. data/app/assets/components/web-animations-js/test/testcases/auto-test-parent-checks.js +38 -0
  729. data/app/assets/components/web-animations-js/test/testcases/auto-test-parent.html +52 -0
  730. data/app/assets/components/web-animations-js/test/testcases/auto-test-partial-keyframes-checks.js +27 -0
  731. data/app/assets/components/web-animations-js/test/testcases/auto-test-partial-keyframes.html +43 -0
  732. data/app/assets/components/web-animations-js/test/testcases/auto-test-path-checks.js +20 -0
  733. data/app/assets/components/web-animations-js/test/testcases/auto-test-path.html +41 -0
  734. data/app/assets/components/web-animations-js/test/testcases/auto-test-pause-checks.js +79 -0
  735. data/app/assets/components/web-animations-js/test/testcases/auto-test-pause.html +82 -0
  736. data/app/assets/components/web-animations-js/test/testcases/auto-test-perspective-checks.js +37 -0
  737. data/app/assets/components/web-animations-js/test/testcases/auto-test-perspective-origin-checks.js +61 -0
  738. data/app/assets/components/web-animations-js/test/testcases/auto-test-perspective-origin.html +94 -0
  739. data/app/assets/components/web-animations-js/test/testcases/auto-test-perspective.html +79 -0
  740. data/app/assets/components/web-animations-js/test/testcases/auto-test-playback-rate-checks.js +146 -0
  741. data/app/assets/components/web-animations-js/test/testcases/auto-test-playback-rate.html +128 -0
  742. data/app/assets/components/web-animations-js/test/testcases/auto-test-position-list-type-checks.js +73 -0
  743. data/app/assets/components/web-animations-js/test/testcases/auto-test-rectangle-checks.js +23 -0
  744. data/app/assets/components/web-animations-js/test/testcases/auto-test-rectangle.html +57 -0
  745. data/app/assets/components/web-animations-js/test/testcases/auto-test-reparent-checks.js +95 -0
  746. data/app/assets/components/web-animations-js/test/testcases/auto-test-reparent.html +60 -0
  747. data/app/assets/components/web-animations-js/test/testcases/auto-test-seq-speed-checks.js +69 -0
  748. data/app/assets/components/web-animations-js/test/testcases/auto-test-seq-speed.html +86 -0
  749. data/app/assets/components/web-animations-js/test/testcases/auto-test-shorthand-checks.js +197 -0
  750. data/app/assets/components/web-animations-js/test/testcases/auto-test-shorthand.html +115 -0
  751. data/app/assets/components/web-animations-js/test/testcases/auto-test-start-time-checks.js +58 -0
  752. data/app/assets/components/web-animations-js/test/testcases/auto-test-start-time-iterations-checks.js +92 -0
  753. data/app/assets/components/web-animations-js/test/testcases/auto-test-start-time-iterations.html +107 -0
  754. data/app/assets/components/web-animations-js/test/testcases/auto-test-start-time.html +90 -0
  755. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-anim-checks.js +23 -0
  756. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-anim.html +39 -0
  757. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-circle-checks.js +23 -0
  758. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-circle.html +38 -0
  759. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-color-checks.js +20 -0
  760. data/app/assets/components/web-animations-js/test/testcases/auto-test-svg-color.html +36 -0
  761. data/app/assets/components/web-animations-js/test/testcases/auto-test-text-shadow-checks.js +20 -0
  762. data/app/assets/components/web-animations-js/test/testcases/auto-test-text-shadow.html +37 -0
  763. data/app/assets/components/web-animations-js/test/testcases/auto-test-timing-functions-checks.js +89 -0
  764. data/app/assets/components/web-animations-js/test/testcases/auto-test-timing-functions.html +77 -0
  765. data/app/assets/components/web-animations-js/test/testcases/auto-test-to-animation-checks.js +58 -0
  766. data/app/assets/components/web-animations-js/test/testcases/auto-test-to-animation.html +83 -0
  767. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-3d-checks.js +134 -0
  768. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-3d.html +123 -0
  769. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-functions-checks.js +160 -0
  770. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-functions.html +158 -0
  771. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-origin-checks.js +37 -0
  772. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-origin.html +80 -0
  773. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-primitives-checks.js +292 -0
  774. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-primitives.html +97 -0
  775. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-units-checks.js +202 -0
  776. data/app/assets/components/web-animations-js/test/testcases/auto-test-transform-units.html +98 -0
  777. data/app/assets/components/web-animations-js/test/testcases/auto-test-visibility-checks.js +54 -0
  778. data/app/assets/components/web-animations-js/test/testcases/auto-test-visibility.html +80 -0
  779. data/app/assets/components/web-animations-js/test/testcases/auto-test-wrapping-bug-checks.js +58 -0
  780. data/app/assets/components/web-animations-js/test/testcases/auto-test-wrapping-bug.html +60 -0
  781. data/app/assets/components/web-animations-js/test/testcases/background.png +0 -0
  782. data/app/assets/components/web-animations-js/test/testcases/disabled-auto-test-change-playback-rate.html +65 -0
  783. data/app/assets/components/web-animations-js/test/testcases/disabled-auto-test-position-list-type.html +103 -0
  784. data/app/assets/components/web-animations-js/test/testcases/disabled-media.html +439 -0
  785. data/app/assets/components/web-animations-js/test/testcases/disabled-test-compositing-order.html +112 -0
  786. data/app/assets/components/web-animations-js/test/testcases/impl-test-deprecation.html +85 -0
  787. data/app/assets/components/web-animations-js/test/testcases/impl-test-from-css-value.html +219 -0
  788. data/app/assets/components/web-animations-js/test/testcases/impl-test-paced-timing-function.html +83 -0
  789. data/app/assets/components/web-animations-js/test/testcases/impl-test-totimelinetime.html +37 -0
  790. data/app/assets/components/web-animations-js/test/testcases/impl-unit-test-position-type.html +256 -0
  791. data/app/assets/components/web-animations-js/test/testcases/manual-test-add-player-onend.html +57 -0
  792. data/app/assets/components/web-animations-js/test/testcases/manual-test-preset-timings.html +71 -0
  793. data/app/assets/components/web-animations-js/test/testcases/manual-test-step.html +88 -0
  794. data/app/assets/components/web-animations-js/test/testcases/small.mp4 +0 -0
  795. data/app/assets/components/web-animations-js/test/testcases/small.webm +0 -0
  796. data/app/assets/components/web-animations-js/test/testcases/test-bounds.html +69 -0
  797. data/app/assets/components/web-animations-js/test/testcases/test-document-timeline.html +53 -0
  798. data/app/assets/components/web-animations-js/test/testcases/test-dynamic-load.html +65 -0
  799. data/app/assets/components/web-animations-js/test/testcases/test-fill-auto.html +78 -0
  800. data/app/assets/components/web-animations-js/test/testcases/test-getcurrent.html +324 -0
  801. data/app/assets/components/web-animations-js/test/testcases/test-keyframe-animation-effect.html +248 -0
  802. data/app/assets/components/web-animations-js/test/testcases/test-keyframe-composite-operation.html +182 -0
  803. data/app/assets/components/web-animations-js/test/testcases/test-null-target.html +66 -0
  804. data/app/assets/components/web-animations-js/test/testcases/test-pause-for-testing.html +52 -0
  805. data/app/assets/components/web-animations-js/test/testcases/test-player-addeventlistener.html +161 -0
  806. data/app/assets/components/web-animations-js/test/testcases/test-player-cleanup.html +79 -0
  807. data/app/assets/components/web-animations-js/test/testcases/test-player-finish-event.html +101 -0
  808. data/app/assets/components/web-animations-js/test/testcases/test-player-sort.html +48 -0
  809. data/app/assets/components/web-animations-js/test/testcases/test-player.html +786 -0
  810. data/app/assets/components/web-animations-js/test/testcases/test-pseudo-element-reference.html +38 -0
  811. data/app/assets/components/web-animations-js/test/testcases/test-repeated-pause.html +54 -0
  812. data/app/assets/components/web-animations-js/test/testcases/test-restart.html +115 -0
  813. data/app/assets/components/web-animations-js/test/testcases/test-reversed-player-active-phase.html +28 -0
  814. data/app/assets/components/web-animations-js/test/testcases/test-rotation-not-reversed.html +55 -0
  815. data/app/assets/components/web-animations-js/test/testcases/test-update-state.html +113 -0
  816. data/app/assets/components/web-animations-js/test/testcases/unit-test-clone.html +80 -0
  817. data/app/assets/components/web-animations-js/test/testcases/unit-test-delay.html +66 -0
  818. data/app/assets/components/web-animations-js/test/testcases/unit-test-dom-operations.html +164 -0
  819. data/app/assets/components/web-animations-js/test/testcases/unit-test-duration.html +66 -0
  820. data/app/assets/components/web-animations-js/test/testcases/unit-test-get-siblings.html +112 -0
  821. data/app/assets/components/web-animations-js/test/testcases/unit-test-modify-timing-params.html +105 -0
  822. data/app/assets/components/web-animations-js/test/testcases/unit-test-null-effect.html +43 -0
  823. data/app/assets/components/web-animations-js/test/testcases/unit-test-set-parent.html +111 -0
  824. data/app/assets/components/web-animations-js/test/testcases/unit-test-testharness-failure.html +54 -0
  825. data/app/assets/components/web-animations-js/test/testcases/unit-test-testharness.html +248 -0
  826. data/app/assets/components/web-animations-js/test/testcases/unit-test-unpause.html +68 -0
  827. data/app/assets/components/web-animations-js/test/testcases.js +93 -0
  828. data/app/assets/components/web-animations-js/test/testharness_timing.css +75 -0
  829. data/app/assets/components/web-animations-js/test/update-testcases.py +63 -0
  830. data/app/assets/components/web-animations-js/tools/android/config.sh +8 -0
  831. data/app/assets/components/web-animations-js/tools/android/setup.sh +152 -0
  832. data/app/assets/components/web-animations-js/tools/android/stop.sh +20 -0
  833. data/app/assets/components/web-animations-js/tools/python/requirements.txt +12 -0
  834. data/app/assets/components/web-animations-js/tools/python/run-tests.py +813 -0
  835. data/app/assets/components/web-animations-js/tools/python/setup.sh +60 -0
  836. data/app/assets/components/web-animations-js/tutorial/basic-animations/basic-animation-exercise-1.html +62 -0
  837. data/app/assets/components/web-animations-js/tutorial/basic-animations/basic-animation.html +120 -0
  838. data/app/assets/components/web-animations-js/tutorial/iframe-contents.html +29 -0
  839. data/app/assets/components/web-animations-js/tutorial/jquery.js +9555 -0
  840. data/app/assets/components/web-animations-js/tutorial/page-load.js +114 -0
  841. data/app/assets/components/web-animations-js/tutorial/parallel/parallel-exercise-1.html +58 -0
  842. data/app/assets/components/web-animations-js/tutorial/parallel/parallel.html +101 -0
  843. data/app/assets/components/web-animations-js/tutorial/sample-tutorial.html +44 -0
  844. data/app/assets/components/web-animations-js/tutorial/try-it-yourself.js +216 -0
  845. data/app/assets/components/web-animations-js/tutorial/tutorial-style.css +344 -0
  846. data/app/assets/components/web-animations-js/tutorial/tutorial-testing.js +84 -0
  847. data/app/assets/components/web-animations-js/web-animations.js +77 -214
  848. data/lib/polymer-core-rails/version.rb +1 -1
  849. metadata +833 -46
  850. data/app/assets/components/core-animation/web-animations.html.erb +0 -1
  851. data/app/assets/components/core-drawer-panel/core-drawer-panel.html.erb +0 -150
  852. data/app/assets/components/core-icon/core-icon.html.erb +0 -126
  853. data/app/assets/components/core-input/core-input.html.erb +0 -311
  854. data/app/assets/components/core-menu-button/core-menu-button.html.erb +0 -139
  855. data/app/assets/components/core-transition/core-transition-css.html.erb +0 -76
  856. data/app/assets/components/core-transition/core-transition.html.erb +0 -44
@@ -0,0 +1,4782 @@
1
+ ;(function(){
2
+
3
+ /**
4
+ * Require the given path.
5
+ *
6
+ * @param {String} path
7
+ * @return {Object} exports
8
+ * @api public
9
+ */
10
+
11
+ function require(path, parent, orig) {
12
+ var resolved = require.resolve(path);
13
+
14
+ // lookup failed
15
+ if (null == resolved) {
16
+ orig = orig || path;
17
+ parent = parent || 'root';
18
+ var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
19
+ err.path = orig;
20
+ err.parent = parent;
21
+ err.require = true;
22
+ throw err;
23
+ }
24
+
25
+ var module = require.modules[resolved];
26
+
27
+ // perform real require()
28
+ // by invoking the module's
29
+ // registered function
30
+ if (!module._resolving && !module.exports) {
31
+ var mod = {};
32
+ mod.exports = {};
33
+ mod.client = mod.component = true;
34
+ module._resolving = true;
35
+ module.call(this, mod.exports, require.relative(resolved), mod);
36
+ delete module._resolving;
37
+ module.exports = mod.exports;
38
+ }
39
+
40
+ return module.exports;
41
+ }
42
+
43
+ /**
44
+ * Registered modules.
45
+ */
46
+
47
+ require.modules = {};
48
+
49
+ /**
50
+ * Registered aliases.
51
+ */
52
+
53
+ require.aliases = {};
54
+
55
+ /**
56
+ * Resolve `path`.
57
+ *
58
+ * Lookup:
59
+ *
60
+ * - PATH/index.js
61
+ * - PATH.js
62
+ * - PATH
63
+ *
64
+ * @param {String} path
65
+ * @return {String} path or null
66
+ * @api private
67
+ */
68
+
69
+ require.resolve = function(path) {
70
+ if (path.charAt(0) === '/') path = path.slice(1);
71
+
72
+ var paths = [
73
+ path,
74
+ path + '.js',
75
+ path + '.json',
76
+ path + '/index.js',
77
+ path + '/index.json'
78
+ ];
79
+
80
+ for (var i = 0; i < paths.length; i++) {
81
+ var path = paths[i];
82
+ if (require.modules.hasOwnProperty(path)) return path;
83
+ if (require.aliases.hasOwnProperty(path)) return require.aliases[path];
84
+ }
85
+ };
86
+
87
+ /**
88
+ * Normalize `path` relative to the current path.
89
+ *
90
+ * @param {String} curr
91
+ * @param {String} path
92
+ * @return {String}
93
+ * @api private
94
+ */
95
+
96
+ require.normalize = function(curr, path) {
97
+ var segs = [];
98
+
99
+ if ('.' != path.charAt(0)) return path;
100
+
101
+ curr = curr.split('/');
102
+ path = path.split('/');
103
+
104
+ for (var i = 0; i < path.length; ++i) {
105
+ if ('..' == path[i]) {
106
+ curr.pop();
107
+ } else if ('.' != path[i] && '' != path[i]) {
108
+ segs.push(path[i]);
109
+ }
110
+ }
111
+
112
+ return curr.concat(segs).join('/');
113
+ };
114
+
115
+ /**
116
+ * Register module at `path` with callback `definition`.
117
+ *
118
+ * @param {String} path
119
+ * @param {Function} definition
120
+ * @api private
121
+ */
122
+
123
+ require.register = function(path, definition) {
124
+ require.modules[path] = definition;
125
+ };
126
+
127
+ /**
128
+ * Alias a module definition.
129
+ *
130
+ * @param {String} from
131
+ * @param {String} to
132
+ * @api private
133
+ */
134
+
135
+ require.alias = function(from, to) {
136
+ if (!require.modules.hasOwnProperty(from)) {
137
+ throw new Error('Failed to alias "' + from + '", it does not exist');
138
+ }
139
+ require.aliases[to] = from;
140
+ };
141
+
142
+ /**
143
+ * Return a require function relative to the `parent` path.
144
+ *
145
+ * @param {String} parent
146
+ * @return {Function}
147
+ * @api private
148
+ */
149
+
150
+ require.relative = function(parent) {
151
+ var p = require.normalize(parent, '..');
152
+
153
+ /**
154
+ * lastIndexOf helper.
155
+ */
156
+
157
+ function lastIndexOf(arr, obj) {
158
+ var i = arr.length;
159
+ while (i--) {
160
+ if (arr[i] === obj) return i;
161
+ }
162
+ return -1;
163
+ }
164
+
165
+ /**
166
+ * The relative require() itself.
167
+ */
168
+
169
+ function localRequire(path) {
170
+ var resolved = localRequire.resolve(path);
171
+ return require(resolved, parent, path);
172
+ }
173
+
174
+ /**
175
+ * Resolve relative to the parent.
176
+ */
177
+
178
+ localRequire.resolve = function(path) {
179
+ var c = path.charAt(0);
180
+ if ('/' == c) return path.slice(1);
181
+ if ('.' == c) return require.normalize(p, path);
182
+
183
+ // resolve deps by returning
184
+ // the dep in the nearest "deps"
185
+ // directory
186
+ var segs = parent.split('/');
187
+ var i = lastIndexOf(segs, 'deps') + 1;
188
+ if (!i) i = 0;
189
+ path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
190
+ return path;
191
+ };
192
+
193
+ /**
194
+ * Check if module is defined at `path`.
195
+ */
196
+
197
+ localRequire.exists = function(path) {
198
+ return require.modules.hasOwnProperty(localRequire.resolve(path));
199
+ };
200
+
201
+ return localRequire;
202
+ };
203
+ require.register("chaijs-assertion-error/index.js", function(exports, require, module){
204
+ /*!
205
+ * assertion-error
206
+ * Copyright(c) 2013 Jake Luer <jake@qualiancy.com>
207
+ * MIT Licensed
208
+ */
209
+
210
+ /*!
211
+ * Return a function that will copy properties from
212
+ * one object to another excluding any originally
213
+ * listed. Returned function will create a new `{}`.
214
+ *
215
+ * @param {String} excluded properties ...
216
+ * @return {Function}
217
+ */
218
+
219
+ function exclude () {
220
+ var excludes = [].slice.call(arguments);
221
+
222
+ function excludeProps (res, obj) {
223
+ Object.keys(obj).forEach(function (key) {
224
+ if (!~excludes.indexOf(key)) res[key] = obj[key];
225
+ });
226
+ }
227
+
228
+ return function extendExclude () {
229
+ var args = [].slice.call(arguments)
230
+ , i = 0
231
+ , res = {};
232
+
233
+ for (; i < args.length; i++) {
234
+ excludeProps(res, args[i]);
235
+ }
236
+
237
+ return res;
238
+ };
239
+ };
240
+
241
+ /*!
242
+ * Primary Exports
243
+ */
244
+
245
+ module.exports = AssertionError;
246
+
247
+ /**
248
+ * ### AssertionError
249
+ *
250
+ * An extension of the JavaScript `Error` constructor for
251
+ * assertion and validation scenarios.
252
+ *
253
+ * @param {String} message
254
+ * @param {Object} properties to include (optional)
255
+ * @param {callee} start stack function (optional)
256
+ */
257
+
258
+ function AssertionError (message, _props, ssf) {
259
+ var extend = exclude('name', 'message', 'stack', 'constructor', 'toJSON')
260
+ , props = extend(_props || {});
261
+
262
+ // default values
263
+ this.message = message || 'Unspecified AssertionError';
264
+ this.showDiff = false;
265
+
266
+ // copy from properties
267
+ for (var key in props) {
268
+ this[key] = props[key];
269
+ }
270
+
271
+ // capture stack trace
272
+ ssf = ssf || arguments.callee;
273
+ if (ssf && Error.captureStackTrace) {
274
+ Error.captureStackTrace(this, ssf);
275
+ }
276
+ }
277
+
278
+ /*!
279
+ * Inherit from Error.prototype
280
+ */
281
+
282
+ AssertionError.prototype = Object.create(Error.prototype);
283
+
284
+ /*!
285
+ * Statically set name
286
+ */
287
+
288
+ AssertionError.prototype.name = 'AssertionError';
289
+
290
+ /*!
291
+ * Ensure correct constructor
292
+ */
293
+
294
+ AssertionError.prototype.constructor = AssertionError;
295
+
296
+ /**
297
+ * Allow errors to be converted to JSON for static transfer.
298
+ *
299
+ * @param {Boolean} include stack (default: `true`)
300
+ * @return {Object} object that can be `JSON.stringify`
301
+ */
302
+
303
+ AssertionError.prototype.toJSON = function (stack) {
304
+ var extend = exclude('constructor', 'toJSON', 'stack')
305
+ , props = extend({ name: this.name }, this);
306
+
307
+ // include stack if exists and not turned off
308
+ if (false !== stack && this.stack) {
309
+ props.stack = this.stack;
310
+ }
311
+
312
+ return props;
313
+ };
314
+
315
+ });
316
+ require.register("chaijs-type-detect/lib/type.js", function(exports, require, module){
317
+ /*!
318
+ * type-detect
319
+ * Copyright(c) 2013 jake luer <jake@alogicalparadox.com>
320
+ * MIT Licensed
321
+ */
322
+
323
+ /*!
324
+ * Primary Exports
325
+ */
326
+
327
+ var exports = module.exports = getType;
328
+
329
+ /*!
330
+ * Detectable javascript natives
331
+ */
332
+
333
+ var natives = {
334
+ '[object Array]': 'array'
335
+ , '[object RegExp]': 'regexp'
336
+ , '[object Function]': 'function'
337
+ , '[object Arguments]': 'arguments'
338
+ , '[object Date]': 'date'
339
+ };
340
+
341
+ /**
342
+ * ### typeOf (obj)
343
+ *
344
+ * Use several different techniques to determine
345
+ * the type of object being tested.
346
+ *
347
+ *
348
+ * @param {Mixed} object
349
+ * @return {String} object type
350
+ * @api public
351
+ */
352
+
353
+ function getType (obj) {
354
+ var str = Object.prototype.toString.call(obj);
355
+ if (natives[str]) return natives[str];
356
+ if (obj === null) return 'null';
357
+ if (obj === undefined) return 'undefined';
358
+ if (obj === Object(obj)) return 'object';
359
+ return typeof obj;
360
+ }
361
+
362
+ exports.Library = Library;
363
+
364
+ /**
365
+ * ### Library
366
+ *
367
+ * Create a repository for custom type detection.
368
+ *
369
+ * ```js
370
+ * var lib = new type.Library;
371
+ * ```
372
+ *
373
+ */
374
+
375
+ function Library () {
376
+ this.tests = {};
377
+ }
378
+
379
+ /**
380
+ * #### .of (obj)
381
+ *
382
+ * Expose replacement `typeof` detection to the library.
383
+ *
384
+ * ```js
385
+ * if ('string' === lib.of('hello world')) {
386
+ * // ...
387
+ * }
388
+ * ```
389
+ *
390
+ * @param {Mixed} object to test
391
+ * @return {String} type
392
+ */
393
+
394
+ Library.prototype.of = getType;
395
+
396
+ /**
397
+ * #### .define (type, test)
398
+ *
399
+ * Add a test to for the `.test()` assertion.
400
+ *
401
+ * Can be defined as a regular expression:
402
+ *
403
+ * ```js
404
+ * lib.define('int', /^[0-9]+$/);
405
+ * ```
406
+ *
407
+ * ... or as a function:
408
+ *
409
+ * ```js
410
+ * lib.define('bln', function (obj) {
411
+ * if ('boolean' === lib.of(obj)) return true;
412
+ * var blns = [ 'yes', 'no', 'true', 'false', 1, 0 ];
413
+ * if ('string' === lib.of(obj)) obj = obj.toLowerCase();
414
+ * return !! ~blns.indexOf(obj);
415
+ * });
416
+ * ```
417
+ *
418
+ * @param {String} type
419
+ * @param {RegExp|Function} test
420
+ * @api public
421
+ */
422
+
423
+ Library.prototype.define = function (type, test) {
424
+ if (arguments.length === 1) return this.tests[type];
425
+ this.tests[type] = test;
426
+ return this;
427
+ };
428
+
429
+ /**
430
+ * #### .test (obj, test)
431
+ *
432
+ * Assert that an object is of type. Will first
433
+ * check natives, and if that does not pass it will
434
+ * use the user defined custom tests.
435
+ *
436
+ * ```js
437
+ * assert(lib.test('1', 'int'));
438
+ * assert(lib.test('yes', 'bln'));
439
+ * ```
440
+ *
441
+ * @param {Mixed} object
442
+ * @param {String} type
443
+ * @return {Boolean} result
444
+ * @api public
445
+ */
446
+
447
+ Library.prototype.test = function (obj, type) {
448
+ if (type === getType(obj)) return true;
449
+ var test = this.tests[type];
450
+
451
+ if (test && 'regexp' === getType(test)) {
452
+ return test.test(obj);
453
+ } else if (test && 'function' === getType(test)) {
454
+ return test(obj);
455
+ } else {
456
+ throw new ReferenceError('Type test "' + type + '" not defined or invalid.');
457
+ }
458
+ };
459
+
460
+ });
461
+ require.register("chaijs-deep-eql/lib/eql.js", function(exports, require, module){
462
+ /*!
463
+ * deep-eql
464
+ * Copyright(c) 2013 Jake Luer <jake@alogicalparadox.com>
465
+ * MIT Licensed
466
+ */
467
+
468
+ /*!
469
+ * Module dependencies
470
+ */
471
+
472
+ var type = require('type-detect');
473
+
474
+ /*!
475
+ * Buffer.isBuffer browser shim
476
+ */
477
+
478
+ var Buffer;
479
+ try { Buffer = require('buffer').Buffer; }
480
+ catch(ex) {
481
+ Buffer = {};
482
+ Buffer.isBuffer = function() { return false; }
483
+ }
484
+
485
+ /*!
486
+ * Primary Export
487
+ */
488
+
489
+ module.exports = deepEqual;
490
+
491
+ /**
492
+ * Assert super-strict (egal) equality between
493
+ * two objects of any type.
494
+ *
495
+ * @param {Mixed} a
496
+ * @param {Mixed} b
497
+ * @param {Array} memoised (optional)
498
+ * @return {Boolean} equal match
499
+ */
500
+
501
+ function deepEqual(a, b, m) {
502
+ if (sameValue(a, b)) {
503
+ return true;
504
+ } else if ('date' === type(a)) {
505
+ return dateEqual(a, b);
506
+ } else if ('regexp' === type(a)) {
507
+ return regexpEqual(a, b);
508
+ } else if (Buffer.isBuffer(a)) {
509
+ return bufferEqual(a, b);
510
+ } else if ('arguments' === type(a)) {
511
+ return argumentsEqual(a, b, m);
512
+ } else if (!typeEqual(a, b)) {
513
+ return false;
514
+ } else if (('object' !== type(a) && 'object' !== type(b))
515
+ && ('array' !== type(a) && 'array' !== type(b))) {
516
+ return sameValue(a, b);
517
+ } else {
518
+ return objectEqual(a, b, m);
519
+ }
520
+ }
521
+
522
+ /*!
523
+ * Strict (egal) equality test. Ensures that NaN always
524
+ * equals NaN and `-0` does not equal `+0`.
525
+ *
526
+ * @param {Mixed} a
527
+ * @param {Mixed} b
528
+ * @return {Boolean} equal match
529
+ */
530
+
531
+ function sameValue(a, b) {
532
+ if (a === b) return a !== 0 || 1 / a === 1 / b;
533
+ return a !== a && b !== b;
534
+ }
535
+
536
+ /*!
537
+ * Compare the types of two given objects and
538
+ * return if they are equal. Note that an Array
539
+ * has a type of `array` (not `object`) and arguments
540
+ * have a type of `arguments` (not `array`/`object`).
541
+ *
542
+ * @param {Mixed} a
543
+ * @param {Mixed} b
544
+ * @return {Boolean} result
545
+ */
546
+
547
+ function typeEqual(a, b) {
548
+ return type(a) === type(b);
549
+ }
550
+
551
+ /*!
552
+ * Compare two Date objects by asserting that
553
+ * the time values are equal using `saveValue`.
554
+ *
555
+ * @param {Date} a
556
+ * @param {Date} b
557
+ * @return {Boolean} result
558
+ */
559
+
560
+ function dateEqual(a, b) {
561
+ if ('date' !== type(b)) return false;
562
+ return sameValue(a.getTime(), b.getTime());
563
+ }
564
+
565
+ /*!
566
+ * Compare two regular expressions by converting them
567
+ * to string and checking for `sameValue`.
568
+ *
569
+ * @param {RegExp} a
570
+ * @param {RegExp} b
571
+ * @return {Boolean} result
572
+ */
573
+
574
+ function regexpEqual(a, b) {
575
+ if ('regexp' !== type(b)) return false;
576
+ return sameValue(a.toString(), b.toString());
577
+ }
578
+
579
+ /*!
580
+ * Assert deep equality of two `arguments` objects.
581
+ * Unfortunately, these must be sliced to arrays
582
+ * prior to test to ensure no bad behavior.
583
+ *
584
+ * @param {Arguments} a
585
+ * @param {Arguments} b
586
+ * @param {Array} memoize (optional)
587
+ * @return {Boolean} result
588
+ */
589
+
590
+ function argumentsEqual(a, b, m) {
591
+ if ('arguments' !== type(b)) return false;
592
+ a = [].slice.call(a);
593
+ b = [].slice.call(b);
594
+ return deepEqual(a, b, m);
595
+ }
596
+
597
+ /*!
598
+ * Get enumerable properties of a given object.
599
+ *
600
+ * @param {Object} a
601
+ * @return {Array} property names
602
+ */
603
+
604
+ function enumerable(a) {
605
+ var res = [];
606
+ for (var key in a) res.push(key);
607
+ return res;
608
+ }
609
+
610
+ /*!
611
+ * Simple equality for flat iterable objects
612
+ * such as Arrays or Node.js buffers.
613
+ *
614
+ * @param {Iterable} a
615
+ * @param {Iterable} b
616
+ * @return {Boolean} result
617
+ */
618
+
619
+ function iterableEqual(a, b) {
620
+ if (a.length !== b.length) return false;
621
+
622
+ var i = 0;
623
+ var match = true;
624
+
625
+ for (; i < a.length; i++) {
626
+ if (a[i] !== b[i]) {
627
+ match = false;
628
+ break;
629
+ }
630
+ }
631
+
632
+ return match;
633
+ }
634
+
635
+ /*!
636
+ * Extension to `iterableEqual` specifically
637
+ * for Node.js Buffers.
638
+ *
639
+ * @param {Buffer} a
640
+ * @param {Mixed} b
641
+ * @return {Boolean} result
642
+ */
643
+
644
+ function bufferEqual(a, b) {
645
+ if (!Buffer.isBuffer(b)) return false;
646
+ return iterableEqual(a, b);
647
+ }
648
+
649
+ /*!
650
+ * Block for `objectEqual` ensuring non-existing
651
+ * values don't get in.
652
+ *
653
+ * @param {Mixed} object
654
+ * @return {Boolean} result
655
+ */
656
+
657
+ function isValue(a) {
658
+ return a !== null && a !== undefined;
659
+ }
660
+
661
+ /*!
662
+ * Recursively check the equality of two objects.
663
+ * Once basic sameness has been established it will
664
+ * defer to `deepEqual` for each enumerable key
665
+ * in the object.
666
+ *
667
+ * @param {Mixed} a
668
+ * @param {Mixed} b
669
+ * @return {Boolean} result
670
+ */
671
+
672
+ function objectEqual(a, b, m) {
673
+ if (!isValue(a) || !isValue(b)) {
674
+ return false;
675
+ }
676
+
677
+ if (a.prototype !== b.prototype) {
678
+ return false;
679
+ }
680
+
681
+ var i;
682
+ if (m) {
683
+ for (i = 0; i < m.length; i++) {
684
+ if ((m[i][0] === a && m[i][1] === b)
685
+ || (m[i][0] === b && m[i][1] === a)) {
686
+ return true;
687
+ }
688
+ }
689
+ } else {
690
+ m = [];
691
+ }
692
+
693
+ try {
694
+ var ka = enumerable(a);
695
+ var kb = enumerable(b);
696
+ } catch (ex) {
697
+ return false;
698
+ }
699
+
700
+ ka.sort();
701
+ kb.sort();
702
+
703
+ if (!iterableEqual(ka, kb)) {
704
+ return false;
705
+ }
706
+
707
+ m.push([ a, b ]);
708
+
709
+ var key;
710
+ for (i = ka.length - 1; i >= 0; i--) {
711
+ key = ka[i];
712
+ if (!deepEqual(a[key], b[key], m)) {
713
+ return false;
714
+ }
715
+ }
716
+
717
+ return true;
718
+ }
719
+
720
+ });
721
+ require.register("chai/index.js", function(exports, require, module){
722
+ module.exports = require('./lib/chai');
723
+
724
+ });
725
+ require.register("chai/lib/chai.js", function(exports, require, module){
726
+ /*!
727
+ * chai
728
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
729
+ * MIT Licensed
730
+ */
731
+
732
+ var used = []
733
+ , exports = module.exports = {};
734
+
735
+ /*!
736
+ * Chai version
737
+ */
738
+
739
+ exports.version = '1.9.1';
740
+
741
+ /*!
742
+ * Assertion Error
743
+ */
744
+
745
+ exports.AssertionError = require('assertion-error');
746
+
747
+ /*!
748
+ * Utils for plugins (not exported)
749
+ */
750
+
751
+ var util = require('./chai/utils');
752
+
753
+ /**
754
+ * # .use(function)
755
+ *
756
+ * Provides a way to extend the internals of Chai
757
+ *
758
+ * @param {Function}
759
+ * @returns {this} for chaining
760
+ * @api public
761
+ */
762
+
763
+ exports.use = function (fn) {
764
+ if (!~used.indexOf(fn)) {
765
+ fn(this, util);
766
+ used.push(fn);
767
+ }
768
+
769
+ return this;
770
+ };
771
+
772
+ /*!
773
+ * Configuration
774
+ */
775
+
776
+ var config = require('./chai/config');
777
+ exports.config = config;
778
+
779
+ /*!
780
+ * Primary `Assertion` prototype
781
+ */
782
+
783
+ var assertion = require('./chai/assertion');
784
+ exports.use(assertion);
785
+
786
+ /*!
787
+ * Core Assertions
788
+ */
789
+
790
+ var core = require('./chai/core/assertions');
791
+ exports.use(core);
792
+
793
+ /*!
794
+ * Expect interface
795
+ */
796
+
797
+ var expect = require('./chai/interface/expect');
798
+ exports.use(expect);
799
+
800
+ /*!
801
+ * Should interface
802
+ */
803
+
804
+ var should = require('./chai/interface/should');
805
+ exports.use(should);
806
+
807
+ /*!
808
+ * Assert interface
809
+ */
810
+
811
+ var assert = require('./chai/interface/assert');
812
+ exports.use(assert);
813
+
814
+ });
815
+ require.register("chai/lib/chai/assertion.js", function(exports, require, module){
816
+ /*!
817
+ * chai
818
+ * http://chaijs.com
819
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
820
+ * MIT Licensed
821
+ */
822
+
823
+ var config = require('./config');
824
+
825
+ module.exports = function (_chai, util) {
826
+ /*!
827
+ * Module dependencies.
828
+ */
829
+
830
+ var AssertionError = _chai.AssertionError
831
+ , flag = util.flag;
832
+
833
+ /*!
834
+ * Module export.
835
+ */
836
+
837
+ _chai.Assertion = Assertion;
838
+
839
+ /*!
840
+ * Assertion Constructor
841
+ *
842
+ * Creates object for chaining.
843
+ *
844
+ * @api private
845
+ */
846
+
847
+ function Assertion (obj, msg, stack) {
848
+ flag(this, 'ssfi', stack || arguments.callee);
849
+ flag(this, 'object', obj);
850
+ flag(this, 'message', msg);
851
+ }
852
+
853
+ Object.defineProperty(Assertion, 'includeStack', {
854
+ get: function() {
855
+ console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
856
+ return config.includeStack;
857
+ },
858
+ set: function(value) {
859
+ console.warn('Assertion.includeStack is deprecated, use chai.config.includeStack instead.');
860
+ config.includeStack = value;
861
+ }
862
+ });
863
+
864
+ Object.defineProperty(Assertion, 'showDiff', {
865
+ get: function() {
866
+ console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
867
+ return config.showDiff;
868
+ },
869
+ set: function(value) {
870
+ console.warn('Assertion.showDiff is deprecated, use chai.config.showDiff instead.');
871
+ config.showDiff = value;
872
+ }
873
+ });
874
+
875
+ Assertion.addProperty = function (name, fn) {
876
+ util.addProperty(this.prototype, name, fn);
877
+ };
878
+
879
+ Assertion.addMethod = function (name, fn) {
880
+ util.addMethod(this.prototype, name, fn);
881
+ };
882
+
883
+ Assertion.addChainableMethod = function (name, fn, chainingBehavior) {
884
+ util.addChainableMethod(this.prototype, name, fn, chainingBehavior);
885
+ };
886
+
887
+ Assertion.overwriteProperty = function (name, fn) {
888
+ util.overwriteProperty(this.prototype, name, fn);
889
+ };
890
+
891
+ Assertion.overwriteMethod = function (name, fn) {
892
+ util.overwriteMethod(this.prototype, name, fn);
893
+ };
894
+
895
+ Assertion.overwriteChainableMethod = function (name, fn, chainingBehavior) {
896
+ util.overwriteChainableMethod(this.prototype, name, fn, chainingBehavior);
897
+ };
898
+
899
+ /*!
900
+ * ### .assert(expression, message, negateMessage, expected, actual)
901
+ *
902
+ * Executes an expression and check expectations. Throws AssertionError for reporting if test doesn't pass.
903
+ *
904
+ * @name assert
905
+ * @param {Philosophical} expression to be tested
906
+ * @param {String} message to display if fails
907
+ * @param {String} negatedMessage to display if negated expression fails
908
+ * @param {Mixed} expected value (remember to check for negation)
909
+ * @param {Mixed} actual (optional) will default to `this.obj`
910
+ * @api private
911
+ */
912
+
913
+ Assertion.prototype.assert = function (expr, msg, negateMsg, expected, _actual, showDiff) {
914
+ var ok = util.test(this, arguments);
915
+ if (true !== showDiff) showDiff = false;
916
+ if (true !== config.showDiff) showDiff = false;
917
+
918
+ if (!ok) {
919
+ var msg = util.getMessage(this, arguments)
920
+ , actual = util.getActual(this, arguments);
921
+ throw new AssertionError(msg, {
922
+ actual: actual
923
+ , expected: expected
924
+ , showDiff: showDiff
925
+ }, (config.includeStack) ? this.assert : flag(this, 'ssfi'));
926
+ }
927
+ };
928
+
929
+ /*!
930
+ * ### ._obj
931
+ *
932
+ * Quick reference to stored `actual` value for plugin developers.
933
+ *
934
+ * @api private
935
+ */
936
+
937
+ Object.defineProperty(Assertion.prototype, '_obj',
938
+ { get: function () {
939
+ return flag(this, 'object');
940
+ }
941
+ , set: function (val) {
942
+ flag(this, 'object', val);
943
+ }
944
+ });
945
+ };
946
+
947
+ });
948
+ require.register("chai/lib/chai/config.js", function(exports, require, module){
949
+ module.exports = {
950
+
951
+ /**
952
+ * ### config.includeStack
953
+ *
954
+ * User configurable property, influences whether stack trace
955
+ * is included in Assertion error message. Default of false
956
+ * suppresses stack trace in the error message.
957
+ *
958
+ * chai.config.includeStack = true; // enable stack on error
959
+ *
960
+ * @param {Boolean}
961
+ * @api public
962
+ */
963
+
964
+ includeStack: false,
965
+
966
+ /**
967
+ * ### config.showDiff
968
+ *
969
+ * User configurable property, influences whether or not
970
+ * the `showDiff` flag should be included in the thrown
971
+ * AssertionErrors. `false` will always be `false`; `true`
972
+ * will be true when the assertion has requested a diff
973
+ * be shown.
974
+ *
975
+ * @param {Boolean}
976
+ * @api public
977
+ */
978
+
979
+ showDiff: true,
980
+
981
+ /**
982
+ * ### config.truncateThreshold
983
+ *
984
+ * User configurable property, sets length threshold for actual and
985
+ * expected values in assertion errors. If this threshold is exceeded,
986
+ * the value is truncated.
987
+ *
988
+ * Set it to zero if you want to disable truncating altogether.
989
+ *
990
+ * chai.config.truncateThreshold = 0; // disable truncating
991
+ *
992
+ * @param {Number}
993
+ * @api public
994
+ */
995
+
996
+ truncateThreshold: 40
997
+
998
+ };
999
+
1000
+ });
1001
+ require.register("chai/lib/chai/core/assertions.js", function(exports, require, module){
1002
+ /*!
1003
+ * chai
1004
+ * http://chaijs.com
1005
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
1006
+ * MIT Licensed
1007
+ */
1008
+
1009
+ module.exports = function (chai, _) {
1010
+ var Assertion = chai.Assertion
1011
+ , toString = Object.prototype.toString
1012
+ , flag = _.flag;
1013
+
1014
+ /**
1015
+ * ### Language Chains
1016
+ *
1017
+ * The following are provided as chainable getters to
1018
+ * improve the readability of your assertions. They
1019
+ * do not provide testing capabilities unless they
1020
+ * have been overwritten by a plugin.
1021
+ *
1022
+ * **Chains**
1023
+ *
1024
+ * - to
1025
+ * - be
1026
+ * - been
1027
+ * - is
1028
+ * - that
1029
+ * - and
1030
+ * - has
1031
+ * - have
1032
+ * - with
1033
+ * - at
1034
+ * - of
1035
+ * - same
1036
+ *
1037
+ * @name language chains
1038
+ * @api public
1039
+ */
1040
+
1041
+ [ 'to', 'be', 'been'
1042
+ , 'is', 'and', 'has', 'have'
1043
+ , 'with', 'that', 'at'
1044
+ , 'of', 'same' ].forEach(function (chain) {
1045
+ Assertion.addProperty(chain, function () {
1046
+ return this;
1047
+ });
1048
+ });
1049
+
1050
+ /**
1051
+ * ### .not
1052
+ *
1053
+ * Negates any of assertions following in the chain.
1054
+ *
1055
+ * expect(foo).to.not.equal('bar');
1056
+ * expect(goodFn).to.not.throw(Error);
1057
+ * expect({ foo: 'baz' }).to.have.property('foo')
1058
+ * .and.not.equal('bar');
1059
+ *
1060
+ * @name not
1061
+ * @api public
1062
+ */
1063
+
1064
+ Assertion.addProperty('not', function () {
1065
+ flag(this, 'negate', true);
1066
+ });
1067
+
1068
+ /**
1069
+ * ### .deep
1070
+ *
1071
+ * Sets the `deep` flag, later used by the `equal` and
1072
+ * `property` assertions.
1073
+ *
1074
+ * expect(foo).to.deep.equal({ bar: 'baz' });
1075
+ * expect({ foo: { bar: { baz: 'quux' } } })
1076
+ * .to.have.deep.property('foo.bar.baz', 'quux');
1077
+ *
1078
+ * @name deep
1079
+ * @api public
1080
+ */
1081
+
1082
+ Assertion.addProperty('deep', function () {
1083
+ flag(this, 'deep', true);
1084
+ });
1085
+
1086
+ /**
1087
+ * ### .a(type)
1088
+ *
1089
+ * The `a` and `an` assertions are aliases that can be
1090
+ * used either as language chains or to assert a value's
1091
+ * type.
1092
+ *
1093
+ * // typeof
1094
+ * expect('test').to.be.a('string');
1095
+ * expect({ foo: 'bar' }).to.be.an('object');
1096
+ * expect(null).to.be.a('null');
1097
+ * expect(undefined).to.be.an('undefined');
1098
+ *
1099
+ * // language chain
1100
+ * expect(foo).to.be.an.instanceof(Foo);
1101
+ *
1102
+ * @name a
1103
+ * @alias an
1104
+ * @param {String} type
1105
+ * @param {String} message _optional_
1106
+ * @api public
1107
+ */
1108
+
1109
+ function an (type, msg) {
1110
+ if (msg) flag(this, 'message', msg);
1111
+ type = type.toLowerCase();
1112
+ var obj = flag(this, 'object')
1113
+ , article = ~[ 'a', 'e', 'i', 'o', 'u' ].indexOf(type.charAt(0)) ? 'an ' : 'a ';
1114
+
1115
+ this.assert(
1116
+ type === _.type(obj)
1117
+ , 'expected #{this} to be ' + article + type
1118
+ , 'expected #{this} not to be ' + article + type
1119
+ );
1120
+ }
1121
+
1122
+ Assertion.addChainableMethod('an', an);
1123
+ Assertion.addChainableMethod('a', an);
1124
+
1125
+ /**
1126
+ * ### .include(value)
1127
+ *
1128
+ * The `include` and `contain` assertions can be used as either property
1129
+ * based language chains or as methods to assert the inclusion of an object
1130
+ * in an array or a substring in a string. When used as language chains,
1131
+ * they toggle the `contain` flag for the `keys` assertion.
1132
+ *
1133
+ * expect([1,2,3]).to.include(2);
1134
+ * expect('foobar').to.contain('foo');
1135
+ * expect({ foo: 'bar', hello: 'universe' }).to.include.keys('foo');
1136
+ *
1137
+ * @name include
1138
+ * @alias contain
1139
+ * @param {Object|String|Number} obj
1140
+ * @param {String} message _optional_
1141
+ * @api public
1142
+ */
1143
+
1144
+ function includeChainingBehavior () {
1145
+ flag(this, 'contains', true);
1146
+ }
1147
+
1148
+ function include (val, msg) {
1149
+ if (msg) flag(this, 'message', msg);
1150
+ var obj = flag(this, 'object');
1151
+ var expected = false;
1152
+ if (_.type(obj) === 'array' && _.type(val) === 'object') {
1153
+ for (var i in obj) {
1154
+ if (_.eql(obj[i], val)) {
1155
+ expected = true;
1156
+ break;
1157
+ }
1158
+ }
1159
+ } else if (_.type(val) === 'object') {
1160
+ if (!flag(this, 'negate')) {
1161
+ for (var k in val) new Assertion(obj).property(k, val[k]);
1162
+ return;
1163
+ }
1164
+ var subset = {}
1165
+ for (var k in val) subset[k] = obj[k]
1166
+ expected = _.eql(subset, val);
1167
+ } else {
1168
+ expected = obj && ~obj.indexOf(val)
1169
+ }
1170
+ this.assert(
1171
+ expected
1172
+ , 'expected #{this} to include ' + _.inspect(val)
1173
+ , 'expected #{this} to not include ' + _.inspect(val));
1174
+ }
1175
+
1176
+ Assertion.addChainableMethod('include', include, includeChainingBehavior);
1177
+ Assertion.addChainableMethod('contain', include, includeChainingBehavior);
1178
+
1179
+ /**
1180
+ * ### .ok
1181
+ *
1182
+ * Asserts that the target is truthy.
1183
+ *
1184
+ * expect('everthing').to.be.ok;
1185
+ * expect(1).to.be.ok;
1186
+ * expect(false).to.not.be.ok;
1187
+ * expect(undefined).to.not.be.ok;
1188
+ * expect(null).to.not.be.ok;
1189
+ *
1190
+ * @name ok
1191
+ * @api public
1192
+ */
1193
+
1194
+ Assertion.addProperty('ok', function () {
1195
+ this.assert(
1196
+ flag(this, 'object')
1197
+ , 'expected #{this} to be truthy'
1198
+ , 'expected #{this} to be falsy');
1199
+ });
1200
+
1201
+ /**
1202
+ * ### .true
1203
+ *
1204
+ * Asserts that the target is `true`.
1205
+ *
1206
+ * expect(true).to.be.true;
1207
+ * expect(1).to.not.be.true;
1208
+ *
1209
+ * @name true
1210
+ * @api public
1211
+ */
1212
+
1213
+ Assertion.addProperty('true', function () {
1214
+ this.assert(
1215
+ true === flag(this, 'object')
1216
+ , 'expected #{this} to be true'
1217
+ , 'expected #{this} to be false'
1218
+ , this.negate ? false : true
1219
+ );
1220
+ });
1221
+
1222
+ /**
1223
+ * ### .false
1224
+ *
1225
+ * Asserts that the target is `false`.
1226
+ *
1227
+ * expect(false).to.be.false;
1228
+ * expect(0).to.not.be.false;
1229
+ *
1230
+ * @name false
1231
+ * @api public
1232
+ */
1233
+
1234
+ Assertion.addProperty('false', function () {
1235
+ this.assert(
1236
+ false === flag(this, 'object')
1237
+ , 'expected #{this} to be false'
1238
+ , 'expected #{this} to be true'
1239
+ , this.negate ? true : false
1240
+ );
1241
+ });
1242
+
1243
+ /**
1244
+ * ### .null
1245
+ *
1246
+ * Asserts that the target is `null`.
1247
+ *
1248
+ * expect(null).to.be.null;
1249
+ * expect(undefined).not.to.be.null;
1250
+ *
1251
+ * @name null
1252
+ * @api public
1253
+ */
1254
+
1255
+ Assertion.addProperty('null', function () {
1256
+ this.assert(
1257
+ null === flag(this, 'object')
1258
+ , 'expected #{this} to be null'
1259
+ , 'expected #{this} not to be null'
1260
+ );
1261
+ });
1262
+
1263
+ /**
1264
+ * ### .undefined
1265
+ *
1266
+ * Asserts that the target is `undefined`.
1267
+ *
1268
+ * expect(undefined).to.be.undefined;
1269
+ * expect(null).to.not.be.undefined;
1270
+ *
1271
+ * @name undefined
1272
+ * @api public
1273
+ */
1274
+
1275
+ Assertion.addProperty('undefined', function () {
1276
+ this.assert(
1277
+ undefined === flag(this, 'object')
1278
+ , 'expected #{this} to be undefined'
1279
+ , 'expected #{this} not to be undefined'
1280
+ );
1281
+ });
1282
+
1283
+ /**
1284
+ * ### .exist
1285
+ *
1286
+ * Asserts that the target is neither `null` nor `undefined`.
1287
+ *
1288
+ * var foo = 'hi'
1289
+ * , bar = null
1290
+ * , baz;
1291
+ *
1292
+ * expect(foo).to.exist;
1293
+ * expect(bar).to.not.exist;
1294
+ * expect(baz).to.not.exist;
1295
+ *
1296
+ * @name exist
1297
+ * @api public
1298
+ */
1299
+
1300
+ Assertion.addProperty('exist', function () {
1301
+ this.assert(
1302
+ null != flag(this, 'object')
1303
+ , 'expected #{this} to exist'
1304
+ , 'expected #{this} to not exist'
1305
+ );
1306
+ });
1307
+
1308
+
1309
+ /**
1310
+ * ### .empty
1311
+ *
1312
+ * Asserts that the target's length is `0`. For arrays, it checks
1313
+ * the `length` property. For objects, it gets the count of
1314
+ * enumerable keys.
1315
+ *
1316
+ * expect([]).to.be.empty;
1317
+ * expect('').to.be.empty;
1318
+ * expect({}).to.be.empty;
1319
+ *
1320
+ * @name empty
1321
+ * @api public
1322
+ */
1323
+
1324
+ Assertion.addProperty('empty', function () {
1325
+ var obj = flag(this, 'object')
1326
+ , expected = obj;
1327
+
1328
+ if (Array.isArray(obj) || 'string' === typeof object) {
1329
+ expected = obj.length;
1330
+ } else if (typeof obj === 'object') {
1331
+ expected = Object.keys(obj).length;
1332
+ }
1333
+
1334
+ this.assert(
1335
+ !expected
1336
+ , 'expected #{this} to be empty'
1337
+ , 'expected #{this} not to be empty'
1338
+ );
1339
+ });
1340
+
1341
+ /**
1342
+ * ### .arguments
1343
+ *
1344
+ * Asserts that the target is an arguments object.
1345
+ *
1346
+ * function test () {
1347
+ * expect(arguments).to.be.arguments;
1348
+ * }
1349
+ *
1350
+ * @name arguments
1351
+ * @alias Arguments
1352
+ * @api public
1353
+ */
1354
+
1355
+ function checkArguments () {
1356
+ var obj = flag(this, 'object')
1357
+ , type = Object.prototype.toString.call(obj);
1358
+ this.assert(
1359
+ '[object Arguments]' === type
1360
+ , 'expected #{this} to be arguments but got ' + type
1361
+ , 'expected #{this} to not be arguments'
1362
+ );
1363
+ }
1364
+
1365
+ Assertion.addProperty('arguments', checkArguments);
1366
+ Assertion.addProperty('Arguments', checkArguments);
1367
+
1368
+ /**
1369
+ * ### .equal(value)
1370
+ *
1371
+ * Asserts that the target is strictly equal (`===`) to `value`.
1372
+ * Alternately, if the `deep` flag is set, asserts that
1373
+ * the target is deeply equal to `value`.
1374
+ *
1375
+ * expect('hello').to.equal('hello');
1376
+ * expect(42).to.equal(42);
1377
+ * expect(1).to.not.equal(true);
1378
+ * expect({ foo: 'bar' }).to.not.equal({ foo: 'bar' });
1379
+ * expect({ foo: 'bar' }).to.deep.equal({ foo: 'bar' });
1380
+ *
1381
+ * @name equal
1382
+ * @alias equals
1383
+ * @alias eq
1384
+ * @alias deep.equal
1385
+ * @param {Mixed} value
1386
+ * @param {String} message _optional_
1387
+ * @api public
1388
+ */
1389
+
1390
+ function assertEqual (val, msg) {
1391
+ if (msg) flag(this, 'message', msg);
1392
+ var obj = flag(this, 'object');
1393
+ if (flag(this, 'deep')) {
1394
+ return this.eql(val);
1395
+ } else {
1396
+ this.assert(
1397
+ val === obj
1398
+ , 'expected #{this} to equal #{exp}'
1399
+ , 'expected #{this} to not equal #{exp}'
1400
+ , val
1401
+ , this._obj
1402
+ , true
1403
+ );
1404
+ }
1405
+ }
1406
+
1407
+ Assertion.addMethod('equal', assertEqual);
1408
+ Assertion.addMethod('equals', assertEqual);
1409
+ Assertion.addMethod('eq', assertEqual);
1410
+
1411
+ /**
1412
+ * ### .eql(value)
1413
+ *
1414
+ * Asserts that the target is deeply equal to `value`.
1415
+ *
1416
+ * expect({ foo: 'bar' }).to.eql({ foo: 'bar' });
1417
+ * expect([ 1, 2, 3 ]).to.eql([ 1, 2, 3 ]);
1418
+ *
1419
+ * @name eql
1420
+ * @alias eqls
1421
+ * @param {Mixed} value
1422
+ * @param {String} message _optional_
1423
+ * @api public
1424
+ */
1425
+
1426
+ function assertEql(obj, msg) {
1427
+ if (msg) flag(this, 'message', msg);
1428
+ this.assert(
1429
+ _.eql(obj, flag(this, 'object'))
1430
+ , 'expected #{this} to deeply equal #{exp}'
1431
+ , 'expected #{this} to not deeply equal #{exp}'
1432
+ , obj
1433
+ , this._obj
1434
+ , true
1435
+ );
1436
+ }
1437
+
1438
+ Assertion.addMethod('eql', assertEql);
1439
+ Assertion.addMethod('eqls', assertEql);
1440
+
1441
+ /**
1442
+ * ### .above(value)
1443
+ *
1444
+ * Asserts that the target is greater than `value`.
1445
+ *
1446
+ * expect(10).to.be.above(5);
1447
+ *
1448
+ * Can also be used in conjunction with `length` to
1449
+ * assert a minimum length. The benefit being a
1450
+ * more informative error message than if the length
1451
+ * was supplied directly.
1452
+ *
1453
+ * expect('foo').to.have.length.above(2);
1454
+ * expect([ 1, 2, 3 ]).to.have.length.above(2);
1455
+ *
1456
+ * @name above
1457
+ * @alias gt
1458
+ * @alias greaterThan
1459
+ * @param {Number} value
1460
+ * @param {String} message _optional_
1461
+ * @api public
1462
+ */
1463
+
1464
+ function assertAbove (n, msg) {
1465
+ if (msg) flag(this, 'message', msg);
1466
+ var obj = flag(this, 'object');
1467
+ if (flag(this, 'doLength')) {
1468
+ new Assertion(obj, msg).to.have.property('length');
1469
+ var len = obj.length;
1470
+ this.assert(
1471
+ len > n
1472
+ , 'expected #{this} to have a length above #{exp} but got #{act}'
1473
+ , 'expected #{this} to not have a length above #{exp}'
1474
+ , n
1475
+ , len
1476
+ );
1477
+ } else {
1478
+ this.assert(
1479
+ obj > n
1480
+ , 'expected #{this} to be above ' + n
1481
+ , 'expected #{this} to be at most ' + n
1482
+ );
1483
+ }
1484
+ }
1485
+
1486
+ Assertion.addMethod('above', assertAbove);
1487
+ Assertion.addMethod('gt', assertAbove);
1488
+ Assertion.addMethod('greaterThan', assertAbove);
1489
+
1490
+ /**
1491
+ * ### .least(value)
1492
+ *
1493
+ * Asserts that the target is greater than or equal to `value`.
1494
+ *
1495
+ * expect(10).to.be.at.least(10);
1496
+ *
1497
+ * Can also be used in conjunction with `length` to
1498
+ * assert a minimum length. The benefit being a
1499
+ * more informative error message than if the length
1500
+ * was supplied directly.
1501
+ *
1502
+ * expect('foo').to.have.length.of.at.least(2);
1503
+ * expect([ 1, 2, 3 ]).to.have.length.of.at.least(3);
1504
+ *
1505
+ * @name least
1506
+ * @alias gte
1507
+ * @param {Number} value
1508
+ * @param {String} message _optional_
1509
+ * @api public
1510
+ */
1511
+
1512
+ function assertLeast (n, msg) {
1513
+ if (msg) flag(this, 'message', msg);
1514
+ var obj = flag(this, 'object');
1515
+ if (flag(this, 'doLength')) {
1516
+ new Assertion(obj, msg).to.have.property('length');
1517
+ var len = obj.length;
1518
+ this.assert(
1519
+ len >= n
1520
+ , 'expected #{this} to have a length at least #{exp} but got #{act}'
1521
+ , 'expected #{this} to have a length below #{exp}'
1522
+ , n
1523
+ , len
1524
+ );
1525
+ } else {
1526
+ this.assert(
1527
+ obj >= n
1528
+ , 'expected #{this} to be at least ' + n
1529
+ , 'expected #{this} to be below ' + n
1530
+ );
1531
+ }
1532
+ }
1533
+
1534
+ Assertion.addMethod('least', assertLeast);
1535
+ Assertion.addMethod('gte', assertLeast);
1536
+
1537
+ /**
1538
+ * ### .below(value)
1539
+ *
1540
+ * Asserts that the target is less than `value`.
1541
+ *
1542
+ * expect(5).to.be.below(10);
1543
+ *
1544
+ * Can also be used in conjunction with `length` to
1545
+ * assert a maximum length. The benefit being a
1546
+ * more informative error message than if the length
1547
+ * was supplied directly.
1548
+ *
1549
+ * expect('foo').to.have.length.below(4);
1550
+ * expect([ 1, 2, 3 ]).to.have.length.below(4);
1551
+ *
1552
+ * @name below
1553
+ * @alias lt
1554
+ * @alias lessThan
1555
+ * @param {Number} value
1556
+ * @param {String} message _optional_
1557
+ * @api public
1558
+ */
1559
+
1560
+ function assertBelow (n, msg) {
1561
+ if (msg) flag(this, 'message', msg);
1562
+ var obj = flag(this, 'object');
1563
+ if (flag(this, 'doLength')) {
1564
+ new Assertion(obj, msg).to.have.property('length');
1565
+ var len = obj.length;
1566
+ this.assert(
1567
+ len < n
1568
+ , 'expected #{this} to have a length below #{exp} but got #{act}'
1569
+ , 'expected #{this} to not have a length below #{exp}'
1570
+ , n
1571
+ , len
1572
+ );
1573
+ } else {
1574
+ this.assert(
1575
+ obj < n
1576
+ , 'expected #{this} to be below ' + n
1577
+ , 'expected #{this} to be at least ' + n
1578
+ );
1579
+ }
1580
+ }
1581
+
1582
+ Assertion.addMethod('below', assertBelow);
1583
+ Assertion.addMethod('lt', assertBelow);
1584
+ Assertion.addMethod('lessThan', assertBelow);
1585
+
1586
+ /**
1587
+ * ### .most(value)
1588
+ *
1589
+ * Asserts that the target is less than or equal to `value`.
1590
+ *
1591
+ * expect(5).to.be.at.most(5);
1592
+ *
1593
+ * Can also be used in conjunction with `length` to
1594
+ * assert a maximum length. The benefit being a
1595
+ * more informative error message than if the length
1596
+ * was supplied directly.
1597
+ *
1598
+ * expect('foo').to.have.length.of.at.most(4);
1599
+ * expect([ 1, 2, 3 ]).to.have.length.of.at.most(3);
1600
+ *
1601
+ * @name most
1602
+ * @alias lte
1603
+ * @param {Number} value
1604
+ * @param {String} message _optional_
1605
+ * @api public
1606
+ */
1607
+
1608
+ function assertMost (n, msg) {
1609
+ if (msg) flag(this, 'message', msg);
1610
+ var obj = flag(this, 'object');
1611
+ if (flag(this, 'doLength')) {
1612
+ new Assertion(obj, msg).to.have.property('length');
1613
+ var len = obj.length;
1614
+ this.assert(
1615
+ len <= n
1616
+ , 'expected #{this} to have a length at most #{exp} but got #{act}'
1617
+ , 'expected #{this} to have a length above #{exp}'
1618
+ , n
1619
+ , len
1620
+ );
1621
+ } else {
1622
+ this.assert(
1623
+ obj <= n
1624
+ , 'expected #{this} to be at most ' + n
1625
+ , 'expected #{this} to be above ' + n
1626
+ );
1627
+ }
1628
+ }
1629
+
1630
+ Assertion.addMethod('most', assertMost);
1631
+ Assertion.addMethod('lte', assertMost);
1632
+
1633
+ /**
1634
+ * ### .within(start, finish)
1635
+ *
1636
+ * Asserts that the target is within a range.
1637
+ *
1638
+ * expect(7).to.be.within(5,10);
1639
+ *
1640
+ * Can also be used in conjunction with `length` to
1641
+ * assert a length range. The benefit being a
1642
+ * more informative error message than if the length
1643
+ * was supplied directly.
1644
+ *
1645
+ * expect('foo').to.have.length.within(2,4);
1646
+ * expect([ 1, 2, 3 ]).to.have.length.within(2,4);
1647
+ *
1648
+ * @name within
1649
+ * @param {Number} start lowerbound inclusive
1650
+ * @param {Number} finish upperbound inclusive
1651
+ * @param {String} message _optional_
1652
+ * @api public
1653
+ */
1654
+
1655
+ Assertion.addMethod('within', function (start, finish, msg) {
1656
+ if (msg) flag(this, 'message', msg);
1657
+ var obj = flag(this, 'object')
1658
+ , range = start + '..' + finish;
1659
+ if (flag(this, 'doLength')) {
1660
+ new Assertion(obj, msg).to.have.property('length');
1661
+ var len = obj.length;
1662
+ this.assert(
1663
+ len >= start && len <= finish
1664
+ , 'expected #{this} to have a length within ' + range
1665
+ , 'expected #{this} to not have a length within ' + range
1666
+ );
1667
+ } else {
1668
+ this.assert(
1669
+ obj >= start && obj <= finish
1670
+ , 'expected #{this} to be within ' + range
1671
+ , 'expected #{this} to not be within ' + range
1672
+ );
1673
+ }
1674
+ });
1675
+
1676
+ /**
1677
+ * ### .instanceof(constructor)
1678
+ *
1679
+ * Asserts that the target is an instance of `constructor`.
1680
+ *
1681
+ * var Tea = function (name) { this.name = name; }
1682
+ * , Chai = new Tea('chai');
1683
+ *
1684
+ * expect(Chai).to.be.an.instanceof(Tea);
1685
+ * expect([ 1, 2, 3 ]).to.be.instanceof(Array);
1686
+ *
1687
+ * @name instanceof
1688
+ * @param {Constructor} constructor
1689
+ * @param {String} message _optional_
1690
+ * @alias instanceOf
1691
+ * @api public
1692
+ */
1693
+
1694
+ function assertInstanceOf (constructor, msg) {
1695
+ if (msg) flag(this, 'message', msg);
1696
+ var name = _.getName(constructor);
1697
+ this.assert(
1698
+ flag(this, 'object') instanceof constructor
1699
+ , 'expected #{this} to be an instance of ' + name
1700
+ , 'expected #{this} to not be an instance of ' + name
1701
+ );
1702
+ };
1703
+
1704
+ Assertion.addMethod('instanceof', assertInstanceOf);
1705
+ Assertion.addMethod('instanceOf', assertInstanceOf);
1706
+
1707
+ /**
1708
+ * ### .property(name, [value])
1709
+ *
1710
+ * Asserts that the target has a property `name`, optionally asserting that
1711
+ * the value of that property is strictly equal to `value`.
1712
+ * If the `deep` flag is set, you can use dot- and bracket-notation for deep
1713
+ * references into objects and arrays.
1714
+ *
1715
+ * // simple referencing
1716
+ * var obj = { foo: 'bar' };
1717
+ * expect(obj).to.have.property('foo');
1718
+ * expect(obj).to.have.property('foo', 'bar');
1719
+ *
1720
+ * // deep referencing
1721
+ * var deepObj = {
1722
+ * green: { tea: 'matcha' }
1723
+ * , teas: [ 'chai', 'matcha', { tea: 'konacha' } ]
1724
+ * };
1725
+
1726
+ * expect(deepObj).to.have.deep.property('green.tea', 'matcha');
1727
+ * expect(deepObj).to.have.deep.property('teas[1]', 'matcha');
1728
+ * expect(deepObj).to.have.deep.property('teas[2].tea', 'konacha');
1729
+ *
1730
+ * You can also use an array as the starting point of a `deep.property`
1731
+ * assertion, or traverse nested arrays.
1732
+ *
1733
+ * var arr = [
1734
+ * [ 'chai', 'matcha', 'konacha' ]
1735
+ * , [ { tea: 'chai' }
1736
+ * , { tea: 'matcha' }
1737
+ * , { tea: 'konacha' } ]
1738
+ * ];
1739
+ *
1740
+ * expect(arr).to.have.deep.property('[0][1]', 'matcha');
1741
+ * expect(arr).to.have.deep.property('[1][2].tea', 'konacha');
1742
+ *
1743
+ * Furthermore, `property` changes the subject of the assertion
1744
+ * to be the value of that property from the original object. This
1745
+ * permits for further chainable assertions on that property.
1746
+ *
1747
+ * expect(obj).to.have.property('foo')
1748
+ * .that.is.a('string');
1749
+ * expect(deepObj).to.have.property('green')
1750
+ * .that.is.an('object')
1751
+ * .that.deep.equals({ tea: 'matcha' });
1752
+ * expect(deepObj).to.have.property('teas')
1753
+ * .that.is.an('array')
1754
+ * .with.deep.property('[2]')
1755
+ * .that.deep.equals({ tea: 'konacha' });
1756
+ *
1757
+ * @name property
1758
+ * @alias deep.property
1759
+ * @param {String} name
1760
+ * @param {Mixed} value (optional)
1761
+ * @param {String} message _optional_
1762
+ * @returns value of property for chaining
1763
+ * @api public
1764
+ */
1765
+
1766
+ Assertion.addMethod('property', function (name, val, msg) {
1767
+ if (msg) flag(this, 'message', msg);
1768
+
1769
+ var descriptor = flag(this, 'deep') ? 'deep property ' : 'property '
1770
+ , negate = flag(this, 'negate')
1771
+ , obj = flag(this, 'object')
1772
+ , value = flag(this, 'deep')
1773
+ ? _.getPathValue(name, obj)
1774
+ : obj[name];
1775
+
1776
+ if (negate && undefined !== val) {
1777
+ if (undefined === value) {
1778
+ msg = (msg != null) ? msg + ': ' : '';
1779
+ throw new Error(msg + _.inspect(obj) + ' has no ' + descriptor + _.inspect(name));
1780
+ }
1781
+ } else {
1782
+ this.assert(
1783
+ undefined !== value
1784
+ , 'expected #{this} to have a ' + descriptor + _.inspect(name)
1785
+ , 'expected #{this} to not have ' + descriptor + _.inspect(name));
1786
+ }
1787
+
1788
+ if (undefined !== val) {
1789
+ this.assert(
1790
+ val === value
1791
+ , 'expected #{this} to have a ' + descriptor + _.inspect(name) + ' of #{exp}, but got #{act}'
1792
+ , 'expected #{this} to not have a ' + descriptor + _.inspect(name) + ' of #{act}'
1793
+ , val
1794
+ , value
1795
+ );
1796
+ }
1797
+
1798
+ flag(this, 'object', value);
1799
+ });
1800
+
1801
+
1802
+ /**
1803
+ * ### .ownProperty(name)
1804
+ *
1805
+ * Asserts that the target has an own property `name`.
1806
+ *
1807
+ * expect('test').to.have.ownProperty('length');
1808
+ *
1809
+ * @name ownProperty
1810
+ * @alias haveOwnProperty
1811
+ * @param {String} name
1812
+ * @param {String} message _optional_
1813
+ * @api public
1814
+ */
1815
+
1816
+ function assertOwnProperty (name, msg) {
1817
+ if (msg) flag(this, 'message', msg);
1818
+ var obj = flag(this, 'object');
1819
+ this.assert(
1820
+ obj.hasOwnProperty(name)
1821
+ , 'expected #{this} to have own property ' + _.inspect(name)
1822
+ , 'expected #{this} to not have own property ' + _.inspect(name)
1823
+ );
1824
+ }
1825
+
1826
+ Assertion.addMethod('ownProperty', assertOwnProperty);
1827
+ Assertion.addMethod('haveOwnProperty', assertOwnProperty);
1828
+
1829
+ /**
1830
+ * ### .length(value)
1831
+ *
1832
+ * Asserts that the target's `length` property has
1833
+ * the expected value.
1834
+ *
1835
+ * expect([ 1, 2, 3]).to.have.length(3);
1836
+ * expect('foobar').to.have.length(6);
1837
+ *
1838
+ * Can also be used as a chain precursor to a value
1839
+ * comparison for the length property.
1840
+ *
1841
+ * expect('foo').to.have.length.above(2);
1842
+ * expect([ 1, 2, 3 ]).to.have.length.above(2);
1843
+ * expect('foo').to.have.length.below(4);
1844
+ * expect([ 1, 2, 3 ]).to.have.length.below(4);
1845
+ * expect('foo').to.have.length.within(2,4);
1846
+ * expect([ 1, 2, 3 ]).to.have.length.within(2,4);
1847
+ *
1848
+ * @name length
1849
+ * @alias lengthOf
1850
+ * @param {Number} length
1851
+ * @param {String} message _optional_
1852
+ * @api public
1853
+ */
1854
+
1855
+ function assertLengthChain () {
1856
+ flag(this, 'doLength', true);
1857
+ }
1858
+
1859
+ function assertLength (n, msg) {
1860
+ if (msg) flag(this, 'message', msg);
1861
+ var obj = flag(this, 'object');
1862
+ new Assertion(obj, msg).to.have.property('length');
1863
+ var len = obj.length;
1864
+
1865
+ this.assert(
1866
+ len == n
1867
+ , 'expected #{this} to have a length of #{exp} but got #{act}'
1868
+ , 'expected #{this} to not have a length of #{act}'
1869
+ , n
1870
+ , len
1871
+ );
1872
+ }
1873
+
1874
+ Assertion.addChainableMethod('length', assertLength, assertLengthChain);
1875
+ Assertion.addMethod('lengthOf', assertLength, assertLengthChain);
1876
+
1877
+ /**
1878
+ * ### .match(regexp)
1879
+ *
1880
+ * Asserts that the target matches a regular expression.
1881
+ *
1882
+ * expect('foobar').to.match(/^foo/);
1883
+ *
1884
+ * @name match
1885
+ * @param {RegExp} RegularExpression
1886
+ * @param {String} message _optional_
1887
+ * @api public
1888
+ */
1889
+
1890
+ Assertion.addMethod('match', function (re, msg) {
1891
+ if (msg) flag(this, 'message', msg);
1892
+ var obj = flag(this, 'object');
1893
+ this.assert(
1894
+ re.exec(obj)
1895
+ , 'expected #{this} to match ' + re
1896
+ , 'expected #{this} not to match ' + re
1897
+ );
1898
+ });
1899
+
1900
+ /**
1901
+ * ### .string(string)
1902
+ *
1903
+ * Asserts that the string target contains another string.
1904
+ *
1905
+ * expect('foobar').to.have.string('bar');
1906
+ *
1907
+ * @name string
1908
+ * @param {String} string
1909
+ * @param {String} message _optional_
1910
+ * @api public
1911
+ */
1912
+
1913
+ Assertion.addMethod('string', function (str, msg) {
1914
+ if (msg) flag(this, 'message', msg);
1915
+ var obj = flag(this, 'object');
1916
+ new Assertion(obj, msg).is.a('string');
1917
+
1918
+ this.assert(
1919
+ ~obj.indexOf(str)
1920
+ , 'expected #{this} to contain ' + _.inspect(str)
1921
+ , 'expected #{this} to not contain ' + _.inspect(str)
1922
+ );
1923
+ });
1924
+
1925
+
1926
+ /**
1927
+ * ### .keys(key1, [key2], [...])
1928
+ *
1929
+ * Asserts that the target has exactly the given keys, or
1930
+ * asserts the inclusion of some keys when using the
1931
+ * `include` or `contain` modifiers.
1932
+ *
1933
+ * expect({ foo: 1, bar: 2 }).to.have.keys(['foo', 'bar']);
1934
+ * expect({ foo: 1, bar: 2, baz: 3 }).to.contain.keys('foo', 'bar');
1935
+ *
1936
+ * @name keys
1937
+ * @alias key
1938
+ * @param {String...|Array} keys
1939
+ * @api public
1940
+ */
1941
+
1942
+ function assertKeys (keys) {
1943
+ var obj = flag(this, 'object')
1944
+ , str
1945
+ , ok = true;
1946
+
1947
+ keys = keys instanceof Array
1948
+ ? keys
1949
+ : Array.prototype.slice.call(arguments);
1950
+
1951
+ if (!keys.length) throw new Error('keys required');
1952
+
1953
+ var actual = Object.keys(obj)
1954
+ , len = keys.length;
1955
+
1956
+ // Inclusion
1957
+ ok = keys.every(function(key){
1958
+ return ~actual.indexOf(key);
1959
+ });
1960
+
1961
+ // Strict
1962
+ if (!flag(this, 'negate') && !flag(this, 'contains')) {
1963
+ ok = ok && keys.length == actual.length;
1964
+ }
1965
+
1966
+ // Key string
1967
+ if (len > 1) {
1968
+ keys = keys.map(function(key){
1969
+ return _.inspect(key);
1970
+ });
1971
+ var last = keys.pop();
1972
+ str = keys.join(', ') + ', and ' + last;
1973
+ } else {
1974
+ str = _.inspect(keys[0]);
1975
+ }
1976
+
1977
+ // Form
1978
+ str = (len > 1 ? 'keys ' : 'key ') + str;
1979
+
1980
+ // Have / include
1981
+ str = (flag(this, 'contains') ? 'contain ' : 'have ') + str;
1982
+
1983
+ // Assertion
1984
+ this.assert(
1985
+ ok
1986
+ , 'expected #{this} to ' + str
1987
+ , 'expected #{this} to not ' + str
1988
+ );
1989
+ }
1990
+
1991
+ Assertion.addMethod('keys', assertKeys);
1992
+ Assertion.addMethod('key', assertKeys);
1993
+
1994
+ /**
1995
+ * ### .throw(constructor)
1996
+ *
1997
+ * Asserts that the function target will throw a specific error, or specific type of error
1998
+ * (as determined using `instanceof`), optionally with a RegExp or string inclusion test
1999
+ * for the error's message.
2000
+ *
2001
+ * var err = new ReferenceError('This is a bad function.');
2002
+ * var fn = function () { throw err; }
2003
+ * expect(fn).to.throw(ReferenceError);
2004
+ * expect(fn).to.throw(Error);
2005
+ * expect(fn).to.throw(/bad function/);
2006
+ * expect(fn).to.not.throw('good function');
2007
+ * expect(fn).to.throw(ReferenceError, /bad function/);
2008
+ * expect(fn).to.throw(err);
2009
+ * expect(fn).to.not.throw(new RangeError('Out of range.'));
2010
+ *
2011
+ * Please note that when a throw expectation is negated, it will check each
2012
+ * parameter independently, starting with error constructor type. The appropriate way
2013
+ * to check for the existence of a type of error but for a message that does not match
2014
+ * is to use `and`.
2015
+ *
2016
+ * expect(fn).to.throw(ReferenceError)
2017
+ * .and.not.throw(/good function/);
2018
+ *
2019
+ * @name throw
2020
+ * @alias throws
2021
+ * @alias Throw
2022
+ * @param {ErrorConstructor} constructor
2023
+ * @param {String|RegExp} expected error message
2024
+ * @param {String} message _optional_
2025
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
2026
+ * @returns error for chaining (null if no error)
2027
+ * @api public
2028
+ */
2029
+
2030
+ function assertThrows (constructor, errMsg, msg) {
2031
+ if (msg) flag(this, 'message', msg);
2032
+ var obj = flag(this, 'object');
2033
+ new Assertion(obj, msg).is.a('function');
2034
+
2035
+ var thrown = false
2036
+ , desiredError = null
2037
+ , name = null
2038
+ , thrownError = null;
2039
+
2040
+ if (arguments.length === 0) {
2041
+ errMsg = null;
2042
+ constructor = null;
2043
+ } else if (constructor && (constructor instanceof RegExp || 'string' === typeof constructor)) {
2044
+ errMsg = constructor;
2045
+ constructor = null;
2046
+ } else if (constructor && constructor instanceof Error) {
2047
+ desiredError = constructor;
2048
+ constructor = null;
2049
+ errMsg = null;
2050
+ } else if (typeof constructor === 'function') {
2051
+ name = constructor.prototype.name || constructor.name;
2052
+ if (name === 'Error' && constructor !== Error) {
2053
+ name = (new constructor()).name;
2054
+ }
2055
+ } else {
2056
+ constructor = null;
2057
+ }
2058
+
2059
+ try {
2060
+ obj();
2061
+ } catch (err) {
2062
+ // first, check desired error
2063
+ if (desiredError) {
2064
+ this.assert(
2065
+ err === desiredError
2066
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
2067
+ , 'expected #{this} to not throw #{exp}'
2068
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
2069
+ , (err instanceof Error ? err.toString() : err)
2070
+ );
2071
+
2072
+ flag(this, 'object', err);
2073
+ return this;
2074
+ }
2075
+
2076
+ // next, check constructor
2077
+ if (constructor) {
2078
+ this.assert(
2079
+ err instanceof constructor
2080
+ , 'expected #{this} to throw #{exp} but #{act} was thrown'
2081
+ , 'expected #{this} to not throw #{exp} but #{act} was thrown'
2082
+ , name
2083
+ , (err instanceof Error ? err.toString() : err)
2084
+ );
2085
+
2086
+ if (!errMsg) {
2087
+ flag(this, 'object', err);
2088
+ return this;
2089
+ }
2090
+ }
2091
+
2092
+ // next, check message
2093
+ var message = 'object' === _.type(err) && "message" in err
2094
+ ? err.message
2095
+ : '' + err;
2096
+
2097
+ if ((message != null) && errMsg && errMsg instanceof RegExp) {
2098
+ this.assert(
2099
+ errMsg.exec(message)
2100
+ , 'expected #{this} to throw error matching #{exp} but got #{act}'
2101
+ , 'expected #{this} to throw error not matching #{exp}'
2102
+ , errMsg
2103
+ , message
2104
+ );
2105
+
2106
+ flag(this, 'object', err);
2107
+ return this;
2108
+ } else if ((message != null) && errMsg && 'string' === typeof errMsg) {
2109
+ this.assert(
2110
+ ~message.indexOf(errMsg)
2111
+ , 'expected #{this} to throw error including #{exp} but got #{act}'
2112
+ , 'expected #{this} to throw error not including #{act}'
2113
+ , errMsg
2114
+ , message
2115
+ );
2116
+
2117
+ flag(this, 'object', err);
2118
+ return this;
2119
+ } else {
2120
+ thrown = true;
2121
+ thrownError = err;
2122
+ }
2123
+ }
2124
+
2125
+ var actuallyGot = ''
2126
+ , expectedThrown = name !== null
2127
+ ? name
2128
+ : desiredError
2129
+ ? '#{exp}' //_.inspect(desiredError)
2130
+ : 'an error';
2131
+
2132
+ if (thrown) {
2133
+ actuallyGot = ' but #{act} was thrown'
2134
+ }
2135
+
2136
+ this.assert(
2137
+ thrown === true
2138
+ , 'expected #{this} to throw ' + expectedThrown + actuallyGot
2139
+ , 'expected #{this} to not throw ' + expectedThrown + actuallyGot
2140
+ , (desiredError instanceof Error ? desiredError.toString() : desiredError)
2141
+ , (thrownError instanceof Error ? thrownError.toString() : thrownError)
2142
+ );
2143
+
2144
+ flag(this, 'object', thrownError);
2145
+ };
2146
+
2147
+ Assertion.addMethod('throw', assertThrows);
2148
+ Assertion.addMethod('throws', assertThrows);
2149
+ Assertion.addMethod('Throw', assertThrows);
2150
+
2151
+ /**
2152
+ * ### .respondTo(method)
2153
+ *
2154
+ * Asserts that the object or class target will respond to a method.
2155
+ *
2156
+ * Klass.prototype.bar = function(){};
2157
+ * expect(Klass).to.respondTo('bar');
2158
+ * expect(obj).to.respondTo('bar');
2159
+ *
2160
+ * To check if a constructor will respond to a static function,
2161
+ * set the `itself` flag.
2162
+ *
2163
+ * Klass.baz = function(){};
2164
+ * expect(Klass).itself.to.respondTo('baz');
2165
+ *
2166
+ * @name respondTo
2167
+ * @param {String} method
2168
+ * @param {String} message _optional_
2169
+ * @api public
2170
+ */
2171
+
2172
+ Assertion.addMethod('respondTo', function (method, msg) {
2173
+ if (msg) flag(this, 'message', msg);
2174
+ var obj = flag(this, 'object')
2175
+ , itself = flag(this, 'itself')
2176
+ , context = ('function' === _.type(obj) && !itself)
2177
+ ? obj.prototype[method]
2178
+ : obj[method];
2179
+
2180
+ this.assert(
2181
+ 'function' === typeof context
2182
+ , 'expected #{this} to respond to ' + _.inspect(method)
2183
+ , 'expected #{this} to not respond to ' + _.inspect(method)
2184
+ );
2185
+ });
2186
+
2187
+ /**
2188
+ * ### .itself
2189
+ *
2190
+ * Sets the `itself` flag, later used by the `respondTo` assertion.
2191
+ *
2192
+ * function Foo() {}
2193
+ * Foo.bar = function() {}
2194
+ * Foo.prototype.baz = function() {}
2195
+ *
2196
+ * expect(Foo).itself.to.respondTo('bar');
2197
+ * expect(Foo).itself.not.to.respondTo('baz');
2198
+ *
2199
+ * @name itself
2200
+ * @api public
2201
+ */
2202
+
2203
+ Assertion.addProperty('itself', function () {
2204
+ flag(this, 'itself', true);
2205
+ });
2206
+
2207
+ /**
2208
+ * ### .satisfy(method)
2209
+ *
2210
+ * Asserts that the target passes a given truth test.
2211
+ *
2212
+ * expect(1).to.satisfy(function(num) { return num > 0; });
2213
+ *
2214
+ * @name satisfy
2215
+ * @param {Function} matcher
2216
+ * @param {String} message _optional_
2217
+ * @api public
2218
+ */
2219
+
2220
+ Assertion.addMethod('satisfy', function (matcher, msg) {
2221
+ if (msg) flag(this, 'message', msg);
2222
+ var obj = flag(this, 'object');
2223
+ this.assert(
2224
+ matcher(obj)
2225
+ , 'expected #{this} to satisfy ' + _.objDisplay(matcher)
2226
+ , 'expected #{this} to not satisfy' + _.objDisplay(matcher)
2227
+ , this.negate ? false : true
2228
+ , matcher(obj)
2229
+ );
2230
+ });
2231
+
2232
+ /**
2233
+ * ### .closeTo(expected, delta)
2234
+ *
2235
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
2236
+ *
2237
+ * expect(1.5).to.be.closeTo(1, 0.5);
2238
+ *
2239
+ * @name closeTo
2240
+ * @param {Number} expected
2241
+ * @param {Number} delta
2242
+ * @param {String} message _optional_
2243
+ * @api public
2244
+ */
2245
+
2246
+ Assertion.addMethod('closeTo', function (expected, delta, msg) {
2247
+ if (msg) flag(this, 'message', msg);
2248
+ var obj = flag(this, 'object');
2249
+ this.assert(
2250
+ Math.abs(obj - expected) <= delta
2251
+ , 'expected #{this} to be close to ' + expected + ' +/- ' + delta
2252
+ , 'expected #{this} not to be close to ' + expected + ' +/- ' + delta
2253
+ );
2254
+ });
2255
+
2256
+ function isSubsetOf(subset, superset, cmp) {
2257
+ return subset.every(function(elem) {
2258
+ if (!cmp) return superset.indexOf(elem) !== -1;
2259
+
2260
+ return superset.some(function(elem2) {
2261
+ return cmp(elem, elem2);
2262
+ });
2263
+ })
2264
+ }
2265
+
2266
+ /**
2267
+ * ### .members(set)
2268
+ *
2269
+ * Asserts that the target is a superset of `set`,
2270
+ * or that the target and `set` have the same strictly-equal (===) members.
2271
+ * Alternately, if the `deep` flag is set, set members are compared for deep
2272
+ * equality.
2273
+ *
2274
+ * expect([1, 2, 3]).to.include.members([3, 2]);
2275
+ * expect([1, 2, 3]).to.not.include.members([3, 2, 8]);
2276
+ *
2277
+ * expect([4, 2]).to.have.members([2, 4]);
2278
+ * expect([5, 2]).to.not.have.members([5, 2, 1]);
2279
+ *
2280
+ * expect([{ id: 1 }]).to.deep.include.members([{ id: 1 }]);
2281
+ *
2282
+ * @name members
2283
+ * @param {Array} set
2284
+ * @param {String} message _optional_
2285
+ * @api public
2286
+ */
2287
+
2288
+ Assertion.addMethod('members', function (subset, msg) {
2289
+ if (msg) flag(this, 'message', msg);
2290
+ var obj = flag(this, 'object');
2291
+
2292
+ new Assertion(obj).to.be.an('array');
2293
+ new Assertion(subset).to.be.an('array');
2294
+
2295
+ var cmp = flag(this, 'deep') ? _.eql : undefined;
2296
+
2297
+ if (flag(this, 'contains')) {
2298
+ return this.assert(
2299
+ isSubsetOf(subset, obj, cmp)
2300
+ , 'expected #{this} to be a superset of #{act}'
2301
+ , 'expected #{this} to not be a superset of #{act}'
2302
+ , obj
2303
+ , subset
2304
+ );
2305
+ }
2306
+
2307
+ this.assert(
2308
+ isSubsetOf(obj, subset, cmp) && isSubsetOf(subset, obj, cmp)
2309
+ , 'expected #{this} to have the same members as #{act}'
2310
+ , 'expected #{this} to not have the same members as #{act}'
2311
+ , obj
2312
+ , subset
2313
+ );
2314
+ });
2315
+ };
2316
+
2317
+ });
2318
+ require.register("chai/lib/chai/interface/assert.js", function(exports, require, module){
2319
+ /*!
2320
+ * chai
2321
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
2322
+ * MIT Licensed
2323
+ */
2324
+
2325
+
2326
+ module.exports = function (chai, util) {
2327
+
2328
+ /*!
2329
+ * Chai dependencies.
2330
+ */
2331
+
2332
+ var Assertion = chai.Assertion
2333
+ , flag = util.flag;
2334
+
2335
+ /*!
2336
+ * Module export.
2337
+ */
2338
+
2339
+ /**
2340
+ * ### assert(expression, message)
2341
+ *
2342
+ * Write your own test expressions.
2343
+ *
2344
+ * assert('foo' !== 'bar', 'foo is not bar');
2345
+ * assert(Array.isArray([]), 'empty arrays are arrays');
2346
+ *
2347
+ * @param {Mixed} expression to test for truthiness
2348
+ * @param {String} message to display on error
2349
+ * @name assert
2350
+ * @api public
2351
+ */
2352
+
2353
+ var assert = chai.assert = function (express, errmsg) {
2354
+ var test = new Assertion(null, null, chai.assert);
2355
+ test.assert(
2356
+ express
2357
+ , errmsg
2358
+ , '[ negation message unavailable ]'
2359
+ );
2360
+ };
2361
+
2362
+ /**
2363
+ * ### .fail(actual, expected, [message], [operator])
2364
+ *
2365
+ * Throw a failure. Node.js `assert` module-compatible.
2366
+ *
2367
+ * @name fail
2368
+ * @param {Mixed} actual
2369
+ * @param {Mixed} expected
2370
+ * @param {String} message
2371
+ * @param {String} operator
2372
+ * @api public
2373
+ */
2374
+
2375
+ assert.fail = function (actual, expected, message, operator) {
2376
+ message = message || 'assert.fail()';
2377
+ throw new chai.AssertionError(message, {
2378
+ actual: actual
2379
+ , expected: expected
2380
+ , operator: operator
2381
+ }, assert.fail);
2382
+ };
2383
+
2384
+ /**
2385
+ * ### .ok(object, [message])
2386
+ *
2387
+ * Asserts that `object` is truthy.
2388
+ *
2389
+ * assert.ok('everything', 'everything is ok');
2390
+ * assert.ok(false, 'this will fail');
2391
+ *
2392
+ * @name ok
2393
+ * @param {Mixed} object to test
2394
+ * @param {String} message
2395
+ * @api public
2396
+ */
2397
+
2398
+ assert.ok = function (val, msg) {
2399
+ new Assertion(val, msg).is.ok;
2400
+ };
2401
+
2402
+ /**
2403
+ * ### .notOk(object, [message])
2404
+ *
2405
+ * Asserts that `object` is falsy.
2406
+ *
2407
+ * assert.notOk('everything', 'this will fail');
2408
+ * assert.notOk(false, 'this will pass');
2409
+ *
2410
+ * @name notOk
2411
+ * @param {Mixed} object to test
2412
+ * @param {String} message
2413
+ * @api public
2414
+ */
2415
+
2416
+ assert.notOk = function (val, msg) {
2417
+ new Assertion(val, msg).is.not.ok;
2418
+ };
2419
+
2420
+ /**
2421
+ * ### .equal(actual, expected, [message])
2422
+ *
2423
+ * Asserts non-strict equality (`==`) of `actual` and `expected`.
2424
+ *
2425
+ * assert.equal(3, '3', '== coerces values to strings');
2426
+ *
2427
+ * @name equal
2428
+ * @param {Mixed} actual
2429
+ * @param {Mixed} expected
2430
+ * @param {String} message
2431
+ * @api public
2432
+ */
2433
+
2434
+ assert.equal = function (act, exp, msg) {
2435
+ var test = new Assertion(act, msg, assert.equal);
2436
+
2437
+ test.assert(
2438
+ exp == flag(test, 'object')
2439
+ , 'expected #{this} to equal #{exp}'
2440
+ , 'expected #{this} to not equal #{act}'
2441
+ , exp
2442
+ , act
2443
+ );
2444
+ };
2445
+
2446
+ /**
2447
+ * ### .notEqual(actual, expected, [message])
2448
+ *
2449
+ * Asserts non-strict inequality (`!=`) of `actual` and `expected`.
2450
+ *
2451
+ * assert.notEqual(3, 4, 'these numbers are not equal');
2452
+ *
2453
+ * @name notEqual
2454
+ * @param {Mixed} actual
2455
+ * @param {Mixed} expected
2456
+ * @param {String} message
2457
+ * @api public
2458
+ */
2459
+
2460
+ assert.notEqual = function (act, exp, msg) {
2461
+ var test = new Assertion(act, msg, assert.notEqual);
2462
+
2463
+ test.assert(
2464
+ exp != flag(test, 'object')
2465
+ , 'expected #{this} to not equal #{exp}'
2466
+ , 'expected #{this} to equal #{act}'
2467
+ , exp
2468
+ , act
2469
+ );
2470
+ };
2471
+
2472
+ /**
2473
+ * ### .strictEqual(actual, expected, [message])
2474
+ *
2475
+ * Asserts strict equality (`===`) of `actual` and `expected`.
2476
+ *
2477
+ * assert.strictEqual(true, true, 'these booleans are strictly equal');
2478
+ *
2479
+ * @name strictEqual
2480
+ * @param {Mixed} actual
2481
+ * @param {Mixed} expected
2482
+ * @param {String} message
2483
+ * @api public
2484
+ */
2485
+
2486
+ assert.strictEqual = function (act, exp, msg) {
2487
+ new Assertion(act, msg).to.equal(exp);
2488
+ };
2489
+
2490
+ /**
2491
+ * ### .notStrictEqual(actual, expected, [message])
2492
+ *
2493
+ * Asserts strict inequality (`!==`) of `actual` and `expected`.
2494
+ *
2495
+ * assert.notStrictEqual(3, '3', 'no coercion for strict equality');
2496
+ *
2497
+ * @name notStrictEqual
2498
+ * @param {Mixed} actual
2499
+ * @param {Mixed} expected
2500
+ * @param {String} message
2501
+ * @api public
2502
+ */
2503
+
2504
+ assert.notStrictEqual = function (act, exp, msg) {
2505
+ new Assertion(act, msg).to.not.equal(exp);
2506
+ };
2507
+
2508
+ /**
2509
+ * ### .deepEqual(actual, expected, [message])
2510
+ *
2511
+ * Asserts that `actual` is deeply equal to `expected`.
2512
+ *
2513
+ * assert.deepEqual({ tea: 'green' }, { tea: 'green' });
2514
+ *
2515
+ * @name deepEqual
2516
+ * @param {Mixed} actual
2517
+ * @param {Mixed} expected
2518
+ * @param {String} message
2519
+ * @api public
2520
+ */
2521
+
2522
+ assert.deepEqual = function (act, exp, msg) {
2523
+ new Assertion(act, msg).to.eql(exp);
2524
+ };
2525
+
2526
+ /**
2527
+ * ### .notDeepEqual(actual, expected, [message])
2528
+ *
2529
+ * Assert that `actual` is not deeply equal to `expected`.
2530
+ *
2531
+ * assert.notDeepEqual({ tea: 'green' }, { tea: 'jasmine' });
2532
+ *
2533
+ * @name notDeepEqual
2534
+ * @param {Mixed} actual
2535
+ * @param {Mixed} expected
2536
+ * @param {String} message
2537
+ * @api public
2538
+ */
2539
+
2540
+ assert.notDeepEqual = function (act, exp, msg) {
2541
+ new Assertion(act, msg).to.not.eql(exp);
2542
+ };
2543
+
2544
+ /**
2545
+ * ### .isTrue(value, [message])
2546
+ *
2547
+ * Asserts that `value` is true.
2548
+ *
2549
+ * var teaServed = true;
2550
+ * assert.isTrue(teaServed, 'the tea has been served');
2551
+ *
2552
+ * @name isTrue
2553
+ * @param {Mixed} value
2554
+ * @param {String} message
2555
+ * @api public
2556
+ */
2557
+
2558
+ assert.isTrue = function (val, msg) {
2559
+ new Assertion(val, msg).is['true'];
2560
+ };
2561
+
2562
+ /**
2563
+ * ### .isFalse(value, [message])
2564
+ *
2565
+ * Asserts that `value` is false.
2566
+ *
2567
+ * var teaServed = false;
2568
+ * assert.isFalse(teaServed, 'no tea yet? hmm...');
2569
+ *
2570
+ * @name isFalse
2571
+ * @param {Mixed} value
2572
+ * @param {String} message
2573
+ * @api public
2574
+ */
2575
+
2576
+ assert.isFalse = function (val, msg) {
2577
+ new Assertion(val, msg).is['false'];
2578
+ };
2579
+
2580
+ /**
2581
+ * ### .isNull(value, [message])
2582
+ *
2583
+ * Asserts that `value` is null.
2584
+ *
2585
+ * assert.isNull(err, 'there was no error');
2586
+ *
2587
+ * @name isNull
2588
+ * @param {Mixed} value
2589
+ * @param {String} message
2590
+ * @api public
2591
+ */
2592
+
2593
+ assert.isNull = function (val, msg) {
2594
+ new Assertion(val, msg).to.equal(null);
2595
+ };
2596
+
2597
+ /**
2598
+ * ### .isNotNull(value, [message])
2599
+ *
2600
+ * Asserts that `value` is not null.
2601
+ *
2602
+ * var tea = 'tasty chai';
2603
+ * assert.isNotNull(tea, 'great, time for tea!');
2604
+ *
2605
+ * @name isNotNull
2606
+ * @param {Mixed} value
2607
+ * @param {String} message
2608
+ * @api public
2609
+ */
2610
+
2611
+ assert.isNotNull = function (val, msg) {
2612
+ new Assertion(val, msg).to.not.equal(null);
2613
+ };
2614
+
2615
+ /**
2616
+ * ### .isUndefined(value, [message])
2617
+ *
2618
+ * Asserts that `value` is `undefined`.
2619
+ *
2620
+ * var tea;
2621
+ * assert.isUndefined(tea, 'no tea defined');
2622
+ *
2623
+ * @name isUndefined
2624
+ * @param {Mixed} value
2625
+ * @param {String} message
2626
+ * @api public
2627
+ */
2628
+
2629
+ assert.isUndefined = function (val, msg) {
2630
+ new Assertion(val, msg).to.equal(undefined);
2631
+ };
2632
+
2633
+ /**
2634
+ * ### .isDefined(value, [message])
2635
+ *
2636
+ * Asserts that `value` is not `undefined`.
2637
+ *
2638
+ * var tea = 'cup of chai';
2639
+ * assert.isDefined(tea, 'tea has been defined');
2640
+ *
2641
+ * @name isDefined
2642
+ * @param {Mixed} value
2643
+ * @param {String} message
2644
+ * @api public
2645
+ */
2646
+
2647
+ assert.isDefined = function (val, msg) {
2648
+ new Assertion(val, msg).to.not.equal(undefined);
2649
+ };
2650
+
2651
+ /**
2652
+ * ### .isFunction(value, [message])
2653
+ *
2654
+ * Asserts that `value` is a function.
2655
+ *
2656
+ * function serveTea() { return 'cup of tea'; };
2657
+ * assert.isFunction(serveTea, 'great, we can have tea now');
2658
+ *
2659
+ * @name isFunction
2660
+ * @param {Mixed} value
2661
+ * @param {String} message
2662
+ * @api public
2663
+ */
2664
+
2665
+ assert.isFunction = function (val, msg) {
2666
+ new Assertion(val, msg).to.be.a('function');
2667
+ };
2668
+
2669
+ /**
2670
+ * ### .isNotFunction(value, [message])
2671
+ *
2672
+ * Asserts that `value` is _not_ a function.
2673
+ *
2674
+ * var serveTea = [ 'heat', 'pour', 'sip' ];
2675
+ * assert.isNotFunction(serveTea, 'great, we have listed the steps');
2676
+ *
2677
+ * @name isNotFunction
2678
+ * @param {Mixed} value
2679
+ * @param {String} message
2680
+ * @api public
2681
+ */
2682
+
2683
+ assert.isNotFunction = function (val, msg) {
2684
+ new Assertion(val, msg).to.not.be.a('function');
2685
+ };
2686
+
2687
+ /**
2688
+ * ### .isObject(value, [message])
2689
+ *
2690
+ * Asserts that `value` is an object (as revealed by
2691
+ * `Object.prototype.toString`).
2692
+ *
2693
+ * var selection = { name: 'Chai', serve: 'with spices' };
2694
+ * assert.isObject(selection, 'tea selection is an object');
2695
+ *
2696
+ * @name isObject
2697
+ * @param {Mixed} value
2698
+ * @param {String} message
2699
+ * @api public
2700
+ */
2701
+
2702
+ assert.isObject = function (val, msg) {
2703
+ new Assertion(val, msg).to.be.a('object');
2704
+ };
2705
+
2706
+ /**
2707
+ * ### .isNotObject(value, [message])
2708
+ *
2709
+ * Asserts that `value` is _not_ an object.
2710
+ *
2711
+ * var selection = 'chai'
2712
+ * assert.isNotObject(selection, 'tea selection is not an object');
2713
+ * assert.isNotObject(null, 'null is not an object');
2714
+ *
2715
+ * @name isNotObject
2716
+ * @param {Mixed} value
2717
+ * @param {String} message
2718
+ * @api public
2719
+ */
2720
+
2721
+ assert.isNotObject = function (val, msg) {
2722
+ new Assertion(val, msg).to.not.be.a('object');
2723
+ };
2724
+
2725
+ /**
2726
+ * ### .isArray(value, [message])
2727
+ *
2728
+ * Asserts that `value` is an array.
2729
+ *
2730
+ * var menu = [ 'green', 'chai', 'oolong' ];
2731
+ * assert.isArray(menu, 'what kind of tea do we want?');
2732
+ *
2733
+ * @name isArray
2734
+ * @param {Mixed} value
2735
+ * @param {String} message
2736
+ * @api public
2737
+ */
2738
+
2739
+ assert.isArray = function (val, msg) {
2740
+ new Assertion(val, msg).to.be.an('array');
2741
+ };
2742
+
2743
+ /**
2744
+ * ### .isNotArray(value, [message])
2745
+ *
2746
+ * Asserts that `value` is _not_ an array.
2747
+ *
2748
+ * var menu = 'green|chai|oolong';
2749
+ * assert.isNotArray(menu, 'what kind of tea do we want?');
2750
+ *
2751
+ * @name isNotArray
2752
+ * @param {Mixed} value
2753
+ * @param {String} message
2754
+ * @api public
2755
+ */
2756
+
2757
+ assert.isNotArray = function (val, msg) {
2758
+ new Assertion(val, msg).to.not.be.an('array');
2759
+ };
2760
+
2761
+ /**
2762
+ * ### .isString(value, [message])
2763
+ *
2764
+ * Asserts that `value` is a string.
2765
+ *
2766
+ * var teaOrder = 'chai';
2767
+ * assert.isString(teaOrder, 'order placed');
2768
+ *
2769
+ * @name isString
2770
+ * @param {Mixed} value
2771
+ * @param {String} message
2772
+ * @api public
2773
+ */
2774
+
2775
+ assert.isString = function (val, msg) {
2776
+ new Assertion(val, msg).to.be.a('string');
2777
+ };
2778
+
2779
+ /**
2780
+ * ### .isNotString(value, [message])
2781
+ *
2782
+ * Asserts that `value` is _not_ a string.
2783
+ *
2784
+ * var teaOrder = 4;
2785
+ * assert.isNotString(teaOrder, 'order placed');
2786
+ *
2787
+ * @name isNotString
2788
+ * @param {Mixed} value
2789
+ * @param {String} message
2790
+ * @api public
2791
+ */
2792
+
2793
+ assert.isNotString = function (val, msg) {
2794
+ new Assertion(val, msg).to.not.be.a('string');
2795
+ };
2796
+
2797
+ /**
2798
+ * ### .isNumber(value, [message])
2799
+ *
2800
+ * Asserts that `value` is a number.
2801
+ *
2802
+ * var cups = 2;
2803
+ * assert.isNumber(cups, 'how many cups');
2804
+ *
2805
+ * @name isNumber
2806
+ * @param {Number} value
2807
+ * @param {String} message
2808
+ * @api public
2809
+ */
2810
+
2811
+ assert.isNumber = function (val, msg) {
2812
+ new Assertion(val, msg).to.be.a('number');
2813
+ };
2814
+
2815
+ /**
2816
+ * ### .isNotNumber(value, [message])
2817
+ *
2818
+ * Asserts that `value` is _not_ a number.
2819
+ *
2820
+ * var cups = '2 cups please';
2821
+ * assert.isNotNumber(cups, 'how many cups');
2822
+ *
2823
+ * @name isNotNumber
2824
+ * @param {Mixed} value
2825
+ * @param {String} message
2826
+ * @api public
2827
+ */
2828
+
2829
+ assert.isNotNumber = function (val, msg) {
2830
+ new Assertion(val, msg).to.not.be.a('number');
2831
+ };
2832
+
2833
+ /**
2834
+ * ### .isBoolean(value, [message])
2835
+ *
2836
+ * Asserts that `value` is a boolean.
2837
+ *
2838
+ * var teaReady = true
2839
+ * , teaServed = false;
2840
+ *
2841
+ * assert.isBoolean(teaReady, 'is the tea ready');
2842
+ * assert.isBoolean(teaServed, 'has tea been served');
2843
+ *
2844
+ * @name isBoolean
2845
+ * @param {Mixed} value
2846
+ * @param {String} message
2847
+ * @api public
2848
+ */
2849
+
2850
+ assert.isBoolean = function (val, msg) {
2851
+ new Assertion(val, msg).to.be.a('boolean');
2852
+ };
2853
+
2854
+ /**
2855
+ * ### .isNotBoolean(value, [message])
2856
+ *
2857
+ * Asserts that `value` is _not_ a boolean.
2858
+ *
2859
+ * var teaReady = 'yep'
2860
+ * , teaServed = 'nope';
2861
+ *
2862
+ * assert.isNotBoolean(teaReady, 'is the tea ready');
2863
+ * assert.isNotBoolean(teaServed, 'has tea been served');
2864
+ *
2865
+ * @name isNotBoolean
2866
+ * @param {Mixed} value
2867
+ * @param {String} message
2868
+ * @api public
2869
+ */
2870
+
2871
+ assert.isNotBoolean = function (val, msg) {
2872
+ new Assertion(val, msg).to.not.be.a('boolean');
2873
+ };
2874
+
2875
+ /**
2876
+ * ### .typeOf(value, name, [message])
2877
+ *
2878
+ * Asserts that `value`'s type is `name`, as determined by
2879
+ * `Object.prototype.toString`.
2880
+ *
2881
+ * assert.typeOf({ tea: 'chai' }, 'object', 'we have an object');
2882
+ * assert.typeOf(['chai', 'jasmine'], 'array', 'we have an array');
2883
+ * assert.typeOf('tea', 'string', 'we have a string');
2884
+ * assert.typeOf(/tea/, 'regexp', 'we have a regular expression');
2885
+ * assert.typeOf(null, 'null', 'we have a null');
2886
+ * assert.typeOf(undefined, 'undefined', 'we have an undefined');
2887
+ *
2888
+ * @name typeOf
2889
+ * @param {Mixed} value
2890
+ * @param {String} name
2891
+ * @param {String} message
2892
+ * @api public
2893
+ */
2894
+
2895
+ assert.typeOf = function (val, type, msg) {
2896
+ new Assertion(val, msg).to.be.a(type);
2897
+ };
2898
+
2899
+ /**
2900
+ * ### .notTypeOf(value, name, [message])
2901
+ *
2902
+ * Asserts that `value`'s type is _not_ `name`, as determined by
2903
+ * `Object.prototype.toString`.
2904
+ *
2905
+ * assert.notTypeOf('tea', 'number', 'strings are not numbers');
2906
+ *
2907
+ * @name notTypeOf
2908
+ * @param {Mixed} value
2909
+ * @param {String} typeof name
2910
+ * @param {String} message
2911
+ * @api public
2912
+ */
2913
+
2914
+ assert.notTypeOf = function (val, type, msg) {
2915
+ new Assertion(val, msg).to.not.be.a(type);
2916
+ };
2917
+
2918
+ /**
2919
+ * ### .instanceOf(object, constructor, [message])
2920
+ *
2921
+ * Asserts that `value` is an instance of `constructor`.
2922
+ *
2923
+ * var Tea = function (name) { this.name = name; }
2924
+ * , chai = new Tea('chai');
2925
+ *
2926
+ * assert.instanceOf(chai, Tea, 'chai is an instance of tea');
2927
+ *
2928
+ * @name instanceOf
2929
+ * @param {Object} object
2930
+ * @param {Constructor} constructor
2931
+ * @param {String} message
2932
+ * @api public
2933
+ */
2934
+
2935
+ assert.instanceOf = function (val, type, msg) {
2936
+ new Assertion(val, msg).to.be.instanceOf(type);
2937
+ };
2938
+
2939
+ /**
2940
+ * ### .notInstanceOf(object, constructor, [message])
2941
+ *
2942
+ * Asserts `value` is not an instance of `constructor`.
2943
+ *
2944
+ * var Tea = function (name) { this.name = name; }
2945
+ * , chai = new String('chai');
2946
+ *
2947
+ * assert.notInstanceOf(chai, Tea, 'chai is not an instance of tea');
2948
+ *
2949
+ * @name notInstanceOf
2950
+ * @param {Object} object
2951
+ * @param {Constructor} constructor
2952
+ * @param {String} message
2953
+ * @api public
2954
+ */
2955
+
2956
+ assert.notInstanceOf = function (val, type, msg) {
2957
+ new Assertion(val, msg).to.not.be.instanceOf(type);
2958
+ };
2959
+
2960
+ /**
2961
+ * ### .include(haystack, needle, [message])
2962
+ *
2963
+ * Asserts that `haystack` includes `needle`. Works
2964
+ * for strings and arrays.
2965
+ *
2966
+ * assert.include('foobar', 'bar', 'foobar contains string "bar"');
2967
+ * assert.include([ 1, 2, 3 ], 3, 'array contains value');
2968
+ *
2969
+ * @name include
2970
+ * @param {Array|String} haystack
2971
+ * @param {Mixed} needle
2972
+ * @param {String} message
2973
+ * @api public
2974
+ */
2975
+
2976
+ assert.include = function (exp, inc, msg) {
2977
+ new Assertion(exp, msg, assert.include).include(inc);
2978
+ };
2979
+
2980
+ /**
2981
+ * ### .notInclude(haystack, needle, [message])
2982
+ *
2983
+ * Asserts that `haystack` does not include `needle`. Works
2984
+ * for strings and arrays.
2985
+ *i
2986
+ * assert.notInclude('foobar', 'baz', 'string not include substring');
2987
+ * assert.notInclude([ 1, 2, 3 ], 4, 'array not include contain value');
2988
+ *
2989
+ * @name notInclude
2990
+ * @param {Array|String} haystack
2991
+ * @param {Mixed} needle
2992
+ * @param {String} message
2993
+ * @api public
2994
+ */
2995
+
2996
+ assert.notInclude = function (exp, inc, msg) {
2997
+ new Assertion(exp, msg, assert.notInclude).not.include(inc);
2998
+ };
2999
+
3000
+ /**
3001
+ * ### .match(value, regexp, [message])
3002
+ *
3003
+ * Asserts that `value` matches the regular expression `regexp`.
3004
+ *
3005
+ * assert.match('foobar', /^foo/, 'regexp matches');
3006
+ *
3007
+ * @name match
3008
+ * @param {Mixed} value
3009
+ * @param {RegExp} regexp
3010
+ * @param {String} message
3011
+ * @api public
3012
+ */
3013
+
3014
+ assert.match = function (exp, re, msg) {
3015
+ new Assertion(exp, msg).to.match(re);
3016
+ };
3017
+
3018
+ /**
3019
+ * ### .notMatch(value, regexp, [message])
3020
+ *
3021
+ * Asserts that `value` does not match the regular expression `regexp`.
3022
+ *
3023
+ * assert.notMatch('foobar', /^foo/, 'regexp does not match');
3024
+ *
3025
+ * @name notMatch
3026
+ * @param {Mixed} value
3027
+ * @param {RegExp} regexp
3028
+ * @param {String} message
3029
+ * @api public
3030
+ */
3031
+
3032
+ assert.notMatch = function (exp, re, msg) {
3033
+ new Assertion(exp, msg).to.not.match(re);
3034
+ };
3035
+
3036
+ /**
3037
+ * ### .property(object, property, [message])
3038
+ *
3039
+ * Asserts that `object` has a property named by `property`.
3040
+ *
3041
+ * assert.property({ tea: { green: 'matcha' }}, 'tea');
3042
+ *
3043
+ * @name property
3044
+ * @param {Object} object
3045
+ * @param {String} property
3046
+ * @param {String} message
3047
+ * @api public
3048
+ */
3049
+
3050
+ assert.property = function (obj, prop, msg) {
3051
+ new Assertion(obj, msg).to.have.property(prop);
3052
+ };
3053
+
3054
+ /**
3055
+ * ### .notProperty(object, property, [message])
3056
+ *
3057
+ * Asserts that `object` does _not_ have a property named by `property`.
3058
+ *
3059
+ * assert.notProperty({ tea: { green: 'matcha' }}, 'coffee');
3060
+ *
3061
+ * @name notProperty
3062
+ * @param {Object} object
3063
+ * @param {String} property
3064
+ * @param {String} message
3065
+ * @api public
3066
+ */
3067
+
3068
+ assert.notProperty = function (obj, prop, msg) {
3069
+ new Assertion(obj, msg).to.not.have.property(prop);
3070
+ };
3071
+
3072
+ /**
3073
+ * ### .deepProperty(object, property, [message])
3074
+ *
3075
+ * Asserts that `object` has a property named by `property`, which can be a
3076
+ * string using dot- and bracket-notation for deep reference.
3077
+ *
3078
+ * assert.deepProperty({ tea: { green: 'matcha' }}, 'tea.green');
3079
+ *
3080
+ * @name deepProperty
3081
+ * @param {Object} object
3082
+ * @param {String} property
3083
+ * @param {String} message
3084
+ * @api public
3085
+ */
3086
+
3087
+ assert.deepProperty = function (obj, prop, msg) {
3088
+ new Assertion(obj, msg).to.have.deep.property(prop);
3089
+ };
3090
+
3091
+ /**
3092
+ * ### .notDeepProperty(object, property, [message])
3093
+ *
3094
+ * Asserts that `object` does _not_ have a property named by `property`, which
3095
+ * can be a string using dot- and bracket-notation for deep reference.
3096
+ *
3097
+ * assert.notDeepProperty({ tea: { green: 'matcha' }}, 'tea.oolong');
3098
+ *
3099
+ * @name notDeepProperty
3100
+ * @param {Object} object
3101
+ * @param {String} property
3102
+ * @param {String} message
3103
+ * @api public
3104
+ */
3105
+
3106
+ assert.notDeepProperty = function (obj, prop, msg) {
3107
+ new Assertion(obj, msg).to.not.have.deep.property(prop);
3108
+ };
3109
+
3110
+ /**
3111
+ * ### .propertyVal(object, property, value, [message])
3112
+ *
3113
+ * Asserts that `object` has a property named by `property` with value given
3114
+ * by `value`.
3115
+ *
3116
+ * assert.propertyVal({ tea: 'is good' }, 'tea', 'is good');
3117
+ *
3118
+ * @name propertyVal
3119
+ * @param {Object} object
3120
+ * @param {String} property
3121
+ * @param {Mixed} value
3122
+ * @param {String} message
3123
+ * @api public
3124
+ */
3125
+
3126
+ assert.propertyVal = function (obj, prop, val, msg) {
3127
+ new Assertion(obj, msg).to.have.property(prop, val);
3128
+ };
3129
+
3130
+ /**
3131
+ * ### .propertyNotVal(object, property, value, [message])
3132
+ *
3133
+ * Asserts that `object` has a property named by `property`, but with a value
3134
+ * different from that given by `value`.
3135
+ *
3136
+ * assert.propertyNotVal({ tea: 'is good' }, 'tea', 'is bad');
3137
+ *
3138
+ * @name propertyNotVal
3139
+ * @param {Object} object
3140
+ * @param {String} property
3141
+ * @param {Mixed} value
3142
+ * @param {String} message
3143
+ * @api public
3144
+ */
3145
+
3146
+ assert.propertyNotVal = function (obj, prop, val, msg) {
3147
+ new Assertion(obj, msg).to.not.have.property(prop, val);
3148
+ };
3149
+
3150
+ /**
3151
+ * ### .deepPropertyVal(object, property, value, [message])
3152
+ *
3153
+ * Asserts that `object` has a property named by `property` with value given
3154
+ * by `value`. `property` can use dot- and bracket-notation for deep
3155
+ * reference.
3156
+ *
3157
+ * assert.deepPropertyVal({ tea: { green: 'matcha' }}, 'tea.green', 'matcha');
3158
+ *
3159
+ * @name deepPropertyVal
3160
+ * @param {Object} object
3161
+ * @param {String} property
3162
+ * @param {Mixed} value
3163
+ * @param {String} message
3164
+ * @api public
3165
+ */
3166
+
3167
+ assert.deepPropertyVal = function (obj, prop, val, msg) {
3168
+ new Assertion(obj, msg).to.have.deep.property(prop, val);
3169
+ };
3170
+
3171
+ /**
3172
+ * ### .deepPropertyNotVal(object, property, value, [message])
3173
+ *
3174
+ * Asserts that `object` has a property named by `property`, but with a value
3175
+ * different from that given by `value`. `property` can use dot- and
3176
+ * bracket-notation for deep reference.
3177
+ *
3178
+ * assert.deepPropertyNotVal({ tea: { green: 'matcha' }}, 'tea.green', 'konacha');
3179
+ *
3180
+ * @name deepPropertyNotVal
3181
+ * @param {Object} object
3182
+ * @param {String} property
3183
+ * @param {Mixed} value
3184
+ * @param {String} message
3185
+ * @api public
3186
+ */
3187
+
3188
+ assert.deepPropertyNotVal = function (obj, prop, val, msg) {
3189
+ new Assertion(obj, msg).to.not.have.deep.property(prop, val);
3190
+ };
3191
+
3192
+ /**
3193
+ * ### .lengthOf(object, length, [message])
3194
+ *
3195
+ * Asserts that `object` has a `length` property with the expected value.
3196
+ *
3197
+ * assert.lengthOf([1,2,3], 3, 'array has length of 3');
3198
+ * assert.lengthOf('foobar', 5, 'string has length of 6');
3199
+ *
3200
+ * @name lengthOf
3201
+ * @param {Mixed} object
3202
+ * @param {Number} length
3203
+ * @param {String} message
3204
+ * @api public
3205
+ */
3206
+
3207
+ assert.lengthOf = function (exp, len, msg) {
3208
+ new Assertion(exp, msg).to.have.length(len);
3209
+ };
3210
+
3211
+ /**
3212
+ * ### .throws(function, [constructor/string/regexp], [string/regexp], [message])
3213
+ *
3214
+ * Asserts that `function` will throw an error that is an instance of
3215
+ * `constructor`, or alternately that it will throw an error with message
3216
+ * matching `regexp`.
3217
+ *
3218
+ * assert.throw(fn, 'function throws a reference error');
3219
+ * assert.throw(fn, /function throws a reference error/);
3220
+ * assert.throw(fn, ReferenceError);
3221
+ * assert.throw(fn, ReferenceError, 'function throws a reference error');
3222
+ * assert.throw(fn, ReferenceError, /function throws a reference error/);
3223
+ *
3224
+ * @name throws
3225
+ * @alias throw
3226
+ * @alias Throw
3227
+ * @param {Function} function
3228
+ * @param {ErrorConstructor} constructor
3229
+ * @param {RegExp} regexp
3230
+ * @param {String} message
3231
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
3232
+ * @api public
3233
+ */
3234
+
3235
+ assert.Throw = function (fn, errt, errs, msg) {
3236
+ if ('string' === typeof errt || errt instanceof RegExp) {
3237
+ errs = errt;
3238
+ errt = null;
3239
+ }
3240
+
3241
+ var assertErr = new Assertion(fn, msg).to.Throw(errt, errs);
3242
+ return flag(assertErr, 'object');
3243
+ };
3244
+
3245
+ /**
3246
+ * ### .doesNotThrow(function, [constructor/regexp], [message])
3247
+ *
3248
+ * Asserts that `function` will _not_ throw an error that is an instance of
3249
+ * `constructor`, or alternately that it will not throw an error with message
3250
+ * matching `regexp`.
3251
+ *
3252
+ * assert.doesNotThrow(fn, Error, 'function does not throw');
3253
+ *
3254
+ * @name doesNotThrow
3255
+ * @param {Function} function
3256
+ * @param {ErrorConstructor} constructor
3257
+ * @param {RegExp} regexp
3258
+ * @param {String} message
3259
+ * @see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error#Error_types
3260
+ * @api public
3261
+ */
3262
+
3263
+ assert.doesNotThrow = function (fn, type, msg) {
3264
+ if ('string' === typeof type) {
3265
+ msg = type;
3266
+ type = null;
3267
+ }
3268
+
3269
+ new Assertion(fn, msg).to.not.Throw(type);
3270
+ };
3271
+
3272
+ /**
3273
+ * ### .operator(val1, operator, val2, [message])
3274
+ *
3275
+ * Compares two values using `operator`.
3276
+ *
3277
+ * assert.operator(1, '<', 2, 'everything is ok');
3278
+ * assert.operator(1, '>', 2, 'this will fail');
3279
+ *
3280
+ * @name operator
3281
+ * @param {Mixed} val1
3282
+ * @param {String} operator
3283
+ * @param {Mixed} val2
3284
+ * @param {String} message
3285
+ * @api public
3286
+ */
3287
+
3288
+ assert.operator = function (val, operator, val2, msg) {
3289
+ if (!~['==', '===', '>', '>=', '<', '<=', '!=', '!=='].indexOf(operator)) {
3290
+ throw new Error('Invalid operator "' + operator + '"');
3291
+ }
3292
+ var test = new Assertion(eval(val + operator + val2), msg);
3293
+ test.assert(
3294
+ true === flag(test, 'object')
3295
+ , 'expected ' + util.inspect(val) + ' to be ' + operator + ' ' + util.inspect(val2)
3296
+ , 'expected ' + util.inspect(val) + ' to not be ' + operator + ' ' + util.inspect(val2) );
3297
+ };
3298
+
3299
+ /**
3300
+ * ### .closeTo(actual, expected, delta, [message])
3301
+ *
3302
+ * Asserts that the target is equal `expected`, to within a +/- `delta` range.
3303
+ *
3304
+ * assert.closeTo(1.5, 1, 0.5, 'numbers are close');
3305
+ *
3306
+ * @name closeTo
3307
+ * @param {Number} actual
3308
+ * @param {Number} expected
3309
+ * @param {Number} delta
3310
+ * @param {String} message
3311
+ * @api public
3312
+ */
3313
+
3314
+ assert.closeTo = function (act, exp, delta, msg) {
3315
+ new Assertion(act, msg).to.be.closeTo(exp, delta);
3316
+ };
3317
+
3318
+ /**
3319
+ * ### .sameMembers(set1, set2, [message])
3320
+ *
3321
+ * Asserts that `set1` and `set2` have the same members.
3322
+ * Order is not taken into account.
3323
+ *
3324
+ * assert.sameMembers([ 1, 2, 3 ], [ 2, 1, 3 ], 'same members');
3325
+ *
3326
+ * @name sameMembers
3327
+ * @param {Array} superset
3328
+ * @param {Array} subset
3329
+ * @param {String} message
3330
+ * @api public
3331
+ */
3332
+
3333
+ assert.sameMembers = function (set1, set2, msg) {
3334
+ new Assertion(set1, msg).to.have.same.members(set2);
3335
+ }
3336
+
3337
+ /**
3338
+ * ### .includeMembers(superset, subset, [message])
3339
+ *
3340
+ * Asserts that `subset` is included in `superset`.
3341
+ * Order is not taken into account.
3342
+ *
3343
+ * assert.includeMembers([ 1, 2, 3 ], [ 2, 1 ], 'include members');
3344
+ *
3345
+ * @name includeMembers
3346
+ * @param {Array} superset
3347
+ * @param {Array} subset
3348
+ * @param {String} message
3349
+ * @api public
3350
+ */
3351
+
3352
+ assert.includeMembers = function (superset, subset, msg) {
3353
+ new Assertion(superset, msg).to.include.members(subset);
3354
+ }
3355
+
3356
+ /*!
3357
+ * Undocumented / untested
3358
+ */
3359
+
3360
+ assert.ifError = function (val, msg) {
3361
+ new Assertion(val, msg).to.not.be.ok;
3362
+ };
3363
+
3364
+ /*!
3365
+ * Aliases.
3366
+ */
3367
+
3368
+ (function alias(name, as){
3369
+ assert[as] = assert[name];
3370
+ return alias;
3371
+ })
3372
+ ('Throw', 'throw')
3373
+ ('Throw', 'throws');
3374
+ };
3375
+
3376
+ });
3377
+ require.register("chai/lib/chai/interface/expect.js", function(exports, require, module){
3378
+ /*!
3379
+ * chai
3380
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
3381
+ * MIT Licensed
3382
+ */
3383
+
3384
+ module.exports = function (chai, util) {
3385
+ chai.expect = function (val, message) {
3386
+ return new chai.Assertion(val, message);
3387
+ };
3388
+ };
3389
+
3390
+
3391
+ });
3392
+ require.register("chai/lib/chai/interface/should.js", function(exports, require, module){
3393
+ /*!
3394
+ * chai
3395
+ * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com>
3396
+ * MIT Licensed
3397
+ */
3398
+
3399
+ module.exports = function (chai, util) {
3400
+ var Assertion = chai.Assertion;
3401
+
3402
+ function loadShould () {
3403
+ // explicitly define this method as function as to have it's name to include as `ssfi`
3404
+ function shouldGetter() {
3405
+ if (this instanceof String || this instanceof Number) {
3406
+ return new Assertion(this.constructor(this), null, shouldGetter);
3407
+ } else if (this instanceof Boolean) {
3408
+ return new Assertion(this == true, null, shouldGetter);
3409
+ }
3410
+ return new Assertion(this, null, shouldGetter);
3411
+ }
3412
+ function shouldSetter(value) {
3413
+ // See https://github.com/chaijs/chai/issues/86: this makes
3414
+ // `whatever.should = someValue` actually set `someValue`, which is
3415
+ // especially useful for `global.should = require('chai').should()`.
3416
+ //
3417
+ // Note that we have to use [[DefineProperty]] instead of [[Put]]
3418
+ // since otherwise we would trigger this very setter!
3419
+ Object.defineProperty(this, 'should', {
3420
+ value: value,
3421
+ enumerable: true,
3422
+ configurable: true,
3423
+ writable: true
3424
+ });
3425
+ }
3426
+ // modify Object.prototype to have `should`
3427
+ Object.defineProperty(Object.prototype, 'should', {
3428
+ set: shouldSetter
3429
+ , get: shouldGetter
3430
+ , configurable: true
3431
+ });
3432
+
3433
+ var should = {};
3434
+
3435
+ should.equal = function (val1, val2, msg) {
3436
+ new Assertion(val1, msg).to.equal(val2);
3437
+ };
3438
+
3439
+ should.Throw = function (fn, errt, errs, msg) {
3440
+ new Assertion(fn, msg).to.Throw(errt, errs);
3441
+ };
3442
+
3443
+ should.exist = function (val, msg) {
3444
+ new Assertion(val, msg).to.exist;
3445
+ }
3446
+
3447
+ // negation
3448
+ should.not = {}
3449
+
3450
+ should.not.equal = function (val1, val2, msg) {
3451
+ new Assertion(val1, msg).to.not.equal(val2);
3452
+ };
3453
+
3454
+ should.not.Throw = function (fn, errt, errs, msg) {
3455
+ new Assertion(fn, msg).to.not.Throw(errt, errs);
3456
+ };
3457
+
3458
+ should.not.exist = function (val, msg) {
3459
+ new Assertion(val, msg).to.not.exist;
3460
+ }
3461
+
3462
+ should['throw'] = should['Throw'];
3463
+ should.not['throw'] = should.not['Throw'];
3464
+
3465
+ return should;
3466
+ };
3467
+
3468
+ chai.should = loadShould;
3469
+ chai.Should = loadShould;
3470
+ };
3471
+
3472
+ });
3473
+ require.register("chai/lib/chai/utils/addChainableMethod.js", function(exports, require, module){
3474
+ /*!
3475
+ * Chai - addChainingMethod utility
3476
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3477
+ * MIT Licensed
3478
+ */
3479
+
3480
+ /*!
3481
+ * Module dependencies
3482
+ */
3483
+
3484
+ var transferFlags = require('./transferFlags');
3485
+ var flag = require('./flag');
3486
+ var config = require('../config');
3487
+
3488
+ /*!
3489
+ * Module variables
3490
+ */
3491
+
3492
+ // Check whether `__proto__` is supported
3493
+ var hasProtoSupport = '__proto__' in Object;
3494
+
3495
+ // Without `__proto__` support, this module will need to add properties to a function.
3496
+ // However, some Function.prototype methods cannot be overwritten,
3497
+ // and there seems no easy cross-platform way to detect them (@see chaijs/chai/issues/69).
3498
+ var excludeNames = /^(?:length|name|arguments|caller)$/;
3499
+
3500
+ // Cache `Function` properties
3501
+ var call = Function.prototype.call,
3502
+ apply = Function.prototype.apply;
3503
+
3504
+ /**
3505
+ * ### addChainableMethod (ctx, name, method, chainingBehavior)
3506
+ *
3507
+ * Adds a method to an object, such that the method can also be chained.
3508
+ *
3509
+ * utils.addChainableMethod(chai.Assertion.prototype, 'foo', function (str) {
3510
+ * var obj = utils.flag(this, 'object');
3511
+ * new chai.Assertion(obj).to.be.equal(str);
3512
+ * });
3513
+ *
3514
+ * Can also be accessed directly from `chai.Assertion`.
3515
+ *
3516
+ * chai.Assertion.addChainableMethod('foo', fn, chainingBehavior);
3517
+ *
3518
+ * The result can then be used as both a method assertion, executing both `method` and
3519
+ * `chainingBehavior`, or as a language chain, which only executes `chainingBehavior`.
3520
+ *
3521
+ * expect(fooStr).to.be.foo('bar');
3522
+ * expect(fooStr).to.be.foo.equal('foo');
3523
+ *
3524
+ * @param {Object} ctx object to which the method is added
3525
+ * @param {String} name of method to add
3526
+ * @param {Function} method function to be used for `name`, when called
3527
+ * @param {Function} chainingBehavior function to be called every time the property is accessed
3528
+ * @name addChainableMethod
3529
+ * @api public
3530
+ */
3531
+
3532
+ module.exports = function (ctx, name, method, chainingBehavior) {
3533
+ if (typeof chainingBehavior !== 'function') {
3534
+ chainingBehavior = function () { };
3535
+ }
3536
+
3537
+ var chainableBehavior = {
3538
+ method: method
3539
+ , chainingBehavior: chainingBehavior
3540
+ };
3541
+
3542
+ // save the methods so we can overwrite them later, if we need to.
3543
+ if (!ctx.__methods) {
3544
+ ctx.__methods = {};
3545
+ }
3546
+ ctx.__methods[name] = chainableBehavior;
3547
+
3548
+ Object.defineProperty(ctx, name,
3549
+ { get: function () {
3550
+ chainableBehavior.chainingBehavior.call(this);
3551
+
3552
+ var assert = function assert() {
3553
+ var old_ssfi = flag(this, 'ssfi');
3554
+ if (old_ssfi && config.includeStack === false)
3555
+ flag(this, 'ssfi', assert);
3556
+ var result = chainableBehavior.method.apply(this, arguments);
3557
+ return result === undefined ? this : result;
3558
+ };
3559
+
3560
+ // Use `__proto__` if available
3561
+ if (hasProtoSupport) {
3562
+ // Inherit all properties from the object by replacing the `Function` prototype
3563
+ var prototype = assert.__proto__ = Object.create(this);
3564
+ // Restore the `call` and `apply` methods from `Function`
3565
+ prototype.call = call;
3566
+ prototype.apply = apply;
3567
+ }
3568
+ // Otherwise, redefine all properties (slow!)
3569
+ else {
3570
+ var asserterNames = Object.getOwnPropertyNames(ctx);
3571
+ asserterNames.forEach(function (asserterName) {
3572
+ if (!excludeNames.test(asserterName)) {
3573
+ var pd = Object.getOwnPropertyDescriptor(ctx, asserterName);
3574
+ Object.defineProperty(assert, asserterName, pd);
3575
+ }
3576
+ });
3577
+ }
3578
+
3579
+ transferFlags(this, assert);
3580
+ return assert;
3581
+ }
3582
+ , configurable: true
3583
+ });
3584
+ };
3585
+
3586
+ });
3587
+ require.register("chai/lib/chai/utils/addMethod.js", function(exports, require, module){
3588
+ /*!
3589
+ * Chai - addMethod utility
3590
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3591
+ * MIT Licensed
3592
+ */
3593
+
3594
+ var config = require('../config');
3595
+
3596
+ /**
3597
+ * ### .addMethod (ctx, name, method)
3598
+ *
3599
+ * Adds a method to the prototype of an object.
3600
+ *
3601
+ * utils.addMethod(chai.Assertion.prototype, 'foo', function (str) {
3602
+ * var obj = utils.flag(this, 'object');
3603
+ * new chai.Assertion(obj).to.be.equal(str);
3604
+ * });
3605
+ *
3606
+ * Can also be accessed directly from `chai.Assertion`.
3607
+ *
3608
+ * chai.Assertion.addMethod('foo', fn);
3609
+ *
3610
+ * Then can be used as any other assertion.
3611
+ *
3612
+ * expect(fooStr).to.be.foo('bar');
3613
+ *
3614
+ * @param {Object} ctx object to which the method is added
3615
+ * @param {String} name of method to add
3616
+ * @param {Function} method function to be used for name
3617
+ * @name addMethod
3618
+ * @api public
3619
+ */
3620
+ var flag = require('./flag');
3621
+
3622
+ module.exports = function (ctx, name, method) {
3623
+ ctx[name] = function () {
3624
+ var old_ssfi = flag(this, 'ssfi');
3625
+ if (old_ssfi && config.includeStack === false)
3626
+ flag(this, 'ssfi', ctx[name]);
3627
+ var result = method.apply(this, arguments);
3628
+ return result === undefined ? this : result;
3629
+ };
3630
+ };
3631
+
3632
+ });
3633
+ require.register("chai/lib/chai/utils/addProperty.js", function(exports, require, module){
3634
+ /*!
3635
+ * Chai - addProperty utility
3636
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3637
+ * MIT Licensed
3638
+ */
3639
+
3640
+ /**
3641
+ * ### addProperty (ctx, name, getter)
3642
+ *
3643
+ * Adds a property to the prototype of an object.
3644
+ *
3645
+ * utils.addProperty(chai.Assertion.prototype, 'foo', function () {
3646
+ * var obj = utils.flag(this, 'object');
3647
+ * new chai.Assertion(obj).to.be.instanceof(Foo);
3648
+ * });
3649
+ *
3650
+ * Can also be accessed directly from `chai.Assertion`.
3651
+ *
3652
+ * chai.Assertion.addProperty('foo', fn);
3653
+ *
3654
+ * Then can be used as any other assertion.
3655
+ *
3656
+ * expect(myFoo).to.be.foo;
3657
+ *
3658
+ * @param {Object} ctx object to which the property is added
3659
+ * @param {String} name of property to add
3660
+ * @param {Function} getter function to be used for name
3661
+ * @name addProperty
3662
+ * @api public
3663
+ */
3664
+
3665
+ module.exports = function (ctx, name, getter) {
3666
+ Object.defineProperty(ctx, name,
3667
+ { get: function () {
3668
+ var result = getter.call(this);
3669
+ return result === undefined ? this : result;
3670
+ }
3671
+ , configurable: true
3672
+ });
3673
+ };
3674
+
3675
+ });
3676
+ require.register("chai/lib/chai/utils/flag.js", function(exports, require, module){
3677
+ /*!
3678
+ * Chai - flag utility
3679
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3680
+ * MIT Licensed
3681
+ */
3682
+
3683
+ /**
3684
+ * ### flag(object ,key, [value])
3685
+ *
3686
+ * Get or set a flag value on an object. If a
3687
+ * value is provided it will be set, else it will
3688
+ * return the currently set value or `undefined` if
3689
+ * the value is not set.
3690
+ *
3691
+ * utils.flag(this, 'foo', 'bar'); // setter
3692
+ * utils.flag(this, 'foo'); // getter, returns `bar`
3693
+ *
3694
+ * @param {Object} object (constructed Assertion
3695
+ * @param {String} key
3696
+ * @param {Mixed} value (optional)
3697
+ * @name flag
3698
+ * @api private
3699
+ */
3700
+
3701
+ module.exports = function (obj, key, value) {
3702
+ var flags = obj.__flags || (obj.__flags = Object.create(null));
3703
+ if (arguments.length === 3) {
3704
+ flags[key] = value;
3705
+ } else {
3706
+ return flags[key];
3707
+ }
3708
+ };
3709
+
3710
+ });
3711
+ require.register("chai/lib/chai/utils/getActual.js", function(exports, require, module){
3712
+ /*!
3713
+ * Chai - getActual utility
3714
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3715
+ * MIT Licensed
3716
+ */
3717
+
3718
+ /**
3719
+ * # getActual(object, [actual])
3720
+ *
3721
+ * Returns the `actual` value for an Assertion
3722
+ *
3723
+ * @param {Object} object (constructed Assertion)
3724
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
3725
+ */
3726
+
3727
+ module.exports = function (obj, args) {
3728
+ return args.length > 4 ? args[4] : obj._obj;
3729
+ };
3730
+
3731
+ });
3732
+ require.register("chai/lib/chai/utils/getEnumerableProperties.js", function(exports, require, module){
3733
+ /*!
3734
+ * Chai - getEnumerableProperties utility
3735
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3736
+ * MIT Licensed
3737
+ */
3738
+
3739
+ /**
3740
+ * ### .getEnumerableProperties(object)
3741
+ *
3742
+ * This allows the retrieval of enumerable property names of an object,
3743
+ * inherited or not.
3744
+ *
3745
+ * @param {Object} object
3746
+ * @returns {Array}
3747
+ * @name getEnumerableProperties
3748
+ * @api public
3749
+ */
3750
+
3751
+ module.exports = function getEnumerableProperties(object) {
3752
+ var result = [];
3753
+ for (var name in object) {
3754
+ result.push(name);
3755
+ }
3756
+ return result;
3757
+ };
3758
+
3759
+ });
3760
+ require.register("chai/lib/chai/utils/getMessage.js", function(exports, require, module){
3761
+ /*!
3762
+ * Chai - message composition utility
3763
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3764
+ * MIT Licensed
3765
+ */
3766
+
3767
+ /*!
3768
+ * Module dependancies
3769
+ */
3770
+
3771
+ var flag = require('./flag')
3772
+ , getActual = require('./getActual')
3773
+ , inspect = require('./inspect')
3774
+ , objDisplay = require('./objDisplay');
3775
+
3776
+ /**
3777
+ * ### .getMessage(object, message, negateMessage)
3778
+ *
3779
+ * Construct the error message based on flags
3780
+ * and template tags. Template tags will return
3781
+ * a stringified inspection of the object referenced.
3782
+ *
3783
+ * Message template tags:
3784
+ * - `#{this}` current asserted object
3785
+ * - `#{act}` actual value
3786
+ * - `#{exp}` expected value
3787
+ *
3788
+ * @param {Object} object (constructed Assertion)
3789
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
3790
+ * @name getMessage
3791
+ * @api public
3792
+ */
3793
+
3794
+ module.exports = function (obj, args) {
3795
+ var negate = flag(obj, 'negate')
3796
+ , val = flag(obj, 'object')
3797
+ , expected = args[3]
3798
+ , actual = getActual(obj, args)
3799
+ , msg = negate ? args[2] : args[1]
3800
+ , flagMsg = flag(obj, 'message');
3801
+
3802
+ msg = msg || '';
3803
+ msg = msg
3804
+ .replace(/#{this}/g, objDisplay(val))
3805
+ .replace(/#{act}/g, objDisplay(actual))
3806
+ .replace(/#{exp}/g, objDisplay(expected));
3807
+
3808
+ return flagMsg ? flagMsg + ': ' + msg : msg;
3809
+ };
3810
+
3811
+ });
3812
+ require.register("chai/lib/chai/utils/getName.js", function(exports, require, module){
3813
+ /*!
3814
+ * Chai - getName utility
3815
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3816
+ * MIT Licensed
3817
+ */
3818
+
3819
+ /**
3820
+ * # getName(func)
3821
+ *
3822
+ * Gets the name of a function, in a cross-browser way.
3823
+ *
3824
+ * @param {Function} a function (usually a constructor)
3825
+ */
3826
+
3827
+ module.exports = function (func) {
3828
+ if (func.name) return func.name;
3829
+
3830
+ var match = /^\s?function ([^(]*)\(/.exec(func);
3831
+ return match && match[1] ? match[1] : "";
3832
+ };
3833
+
3834
+ });
3835
+ require.register("chai/lib/chai/utils/getPathValue.js", function(exports, require, module){
3836
+ /*!
3837
+ * Chai - getPathValue utility
3838
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3839
+ * @see https://github.com/logicalparadox/filtr
3840
+ * MIT Licensed
3841
+ */
3842
+
3843
+ /**
3844
+ * ### .getPathValue(path, object)
3845
+ *
3846
+ * This allows the retrieval of values in an
3847
+ * object given a string path.
3848
+ *
3849
+ * var obj = {
3850
+ * prop1: {
3851
+ * arr: ['a', 'b', 'c']
3852
+ * , str: 'Hello'
3853
+ * }
3854
+ * , prop2: {
3855
+ * arr: [ { nested: 'Universe' } ]
3856
+ * , str: 'Hello again!'
3857
+ * }
3858
+ * }
3859
+ *
3860
+ * The following would be the results.
3861
+ *
3862
+ * getPathValue('prop1.str', obj); // Hello
3863
+ * getPathValue('prop1.att[2]', obj); // b
3864
+ * getPathValue('prop2.arr[0].nested', obj); // Universe
3865
+ *
3866
+ * @param {String} path
3867
+ * @param {Object} object
3868
+ * @returns {Object} value or `undefined`
3869
+ * @name getPathValue
3870
+ * @api public
3871
+ */
3872
+
3873
+ var getPathValue = module.exports = function (path, obj) {
3874
+ var parsed = parsePath(path);
3875
+ return _getPathValue(parsed, obj);
3876
+ };
3877
+
3878
+ /*!
3879
+ * ## parsePath(path)
3880
+ *
3881
+ * Helper function used to parse string object
3882
+ * paths. Use in conjunction with `_getPathValue`.
3883
+ *
3884
+ * var parsed = parsePath('myobject.property.subprop');
3885
+ *
3886
+ * ### Paths:
3887
+ *
3888
+ * * Can be as near infinitely deep and nested
3889
+ * * Arrays are also valid using the formal `myobject.document[3].property`.
3890
+ *
3891
+ * @param {String} path
3892
+ * @returns {Object} parsed
3893
+ * @api private
3894
+ */
3895
+
3896
+ function parsePath (path) {
3897
+ var str = path.replace(/\[/g, '.[')
3898
+ , parts = str.match(/(\\\.|[^.]+?)+/g);
3899
+ return parts.map(function (value) {
3900
+ var re = /\[(\d+)\]$/
3901
+ , mArr = re.exec(value)
3902
+ if (mArr) return { i: parseFloat(mArr[1]) };
3903
+ else return { p: value };
3904
+ });
3905
+ };
3906
+
3907
+ /*!
3908
+ * ## _getPathValue(parsed, obj)
3909
+ *
3910
+ * Helper companion function for `.parsePath` that returns
3911
+ * the value located at the parsed address.
3912
+ *
3913
+ * var value = getPathValue(parsed, obj);
3914
+ *
3915
+ * @param {Object} parsed definition from `parsePath`.
3916
+ * @param {Object} object to search against
3917
+ * @returns {Object|Undefined} value
3918
+ * @api private
3919
+ */
3920
+
3921
+ function _getPathValue (parsed, obj) {
3922
+ var tmp = obj
3923
+ , res;
3924
+ for (var i = 0, l = parsed.length; i < l; i++) {
3925
+ var part = parsed[i];
3926
+ if (tmp) {
3927
+ if ('undefined' !== typeof part.p)
3928
+ tmp = tmp[part.p];
3929
+ else if ('undefined' !== typeof part.i)
3930
+ tmp = tmp[part.i];
3931
+ if (i == (l - 1)) res = tmp;
3932
+ } else {
3933
+ res = undefined;
3934
+ }
3935
+ }
3936
+ return res;
3937
+ };
3938
+
3939
+ });
3940
+ require.register("chai/lib/chai/utils/getProperties.js", function(exports, require, module){
3941
+ /*!
3942
+ * Chai - getProperties utility
3943
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
3944
+ * MIT Licensed
3945
+ */
3946
+
3947
+ /**
3948
+ * ### .getProperties(object)
3949
+ *
3950
+ * This allows the retrieval of property names of an object, enumerable or not,
3951
+ * inherited or not.
3952
+ *
3953
+ * @param {Object} object
3954
+ * @returns {Array}
3955
+ * @name getProperties
3956
+ * @api public
3957
+ */
3958
+
3959
+ module.exports = function getProperties(object) {
3960
+ var result = Object.getOwnPropertyNames(subject);
3961
+
3962
+ function addProperty(property) {
3963
+ if (result.indexOf(property) === -1) {
3964
+ result.push(property);
3965
+ }
3966
+ }
3967
+
3968
+ var proto = Object.getPrototypeOf(subject);
3969
+ while (proto !== null) {
3970
+ Object.getOwnPropertyNames(proto).forEach(addProperty);
3971
+ proto = Object.getPrototypeOf(proto);
3972
+ }
3973
+
3974
+ return result;
3975
+ };
3976
+
3977
+ });
3978
+ require.register("chai/lib/chai/utils/index.js", function(exports, require, module){
3979
+ /*!
3980
+ * chai
3981
+ * Copyright(c) 2011 Jake Luer <jake@alogicalparadox.com>
3982
+ * MIT Licensed
3983
+ */
3984
+
3985
+ /*!
3986
+ * Main exports
3987
+ */
3988
+
3989
+ var exports = module.exports = {};
3990
+
3991
+ /*!
3992
+ * test utility
3993
+ */
3994
+
3995
+ exports.test = require('./test');
3996
+
3997
+ /*!
3998
+ * type utility
3999
+ */
4000
+
4001
+ exports.type = require('./type');
4002
+
4003
+ /*!
4004
+ * message utility
4005
+ */
4006
+
4007
+ exports.getMessage = require('./getMessage');
4008
+
4009
+ /*!
4010
+ * actual utility
4011
+ */
4012
+
4013
+ exports.getActual = require('./getActual');
4014
+
4015
+ /*!
4016
+ * Inspect util
4017
+ */
4018
+
4019
+ exports.inspect = require('./inspect');
4020
+
4021
+ /*!
4022
+ * Object Display util
4023
+ */
4024
+
4025
+ exports.objDisplay = require('./objDisplay');
4026
+
4027
+ /*!
4028
+ * Flag utility
4029
+ */
4030
+
4031
+ exports.flag = require('./flag');
4032
+
4033
+ /*!
4034
+ * Flag transferring utility
4035
+ */
4036
+
4037
+ exports.transferFlags = require('./transferFlags');
4038
+
4039
+ /*!
4040
+ * Deep equal utility
4041
+ */
4042
+
4043
+ exports.eql = require('deep-eql');
4044
+
4045
+ /*!
4046
+ * Deep path value
4047
+ */
4048
+
4049
+ exports.getPathValue = require('./getPathValue');
4050
+
4051
+ /*!
4052
+ * Function name
4053
+ */
4054
+
4055
+ exports.getName = require('./getName');
4056
+
4057
+ /*!
4058
+ * add Property
4059
+ */
4060
+
4061
+ exports.addProperty = require('./addProperty');
4062
+
4063
+ /*!
4064
+ * add Method
4065
+ */
4066
+
4067
+ exports.addMethod = require('./addMethod');
4068
+
4069
+ /*!
4070
+ * overwrite Property
4071
+ */
4072
+
4073
+ exports.overwriteProperty = require('./overwriteProperty');
4074
+
4075
+ /*!
4076
+ * overwrite Method
4077
+ */
4078
+
4079
+ exports.overwriteMethod = require('./overwriteMethod');
4080
+
4081
+ /*!
4082
+ * Add a chainable method
4083
+ */
4084
+
4085
+ exports.addChainableMethod = require('./addChainableMethod');
4086
+
4087
+ /*!
4088
+ * Overwrite chainable method
4089
+ */
4090
+
4091
+ exports.overwriteChainableMethod = require('./overwriteChainableMethod');
4092
+
4093
+
4094
+ });
4095
+ require.register("chai/lib/chai/utils/inspect.js", function(exports, require, module){
4096
+ // This is (almost) directly from Node.js utils
4097
+ // https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js
4098
+
4099
+ var getName = require('./getName');
4100
+ var getProperties = require('./getProperties');
4101
+ var getEnumerableProperties = require('./getEnumerableProperties');
4102
+
4103
+ module.exports = inspect;
4104
+
4105
+ /**
4106
+ * Echos the value of a value. Trys to print the value out
4107
+ * in the best way possible given the different types.
4108
+ *
4109
+ * @param {Object} obj The object to print out.
4110
+ * @param {Boolean} showHidden Flag that shows hidden (not enumerable)
4111
+ * properties of objects.
4112
+ * @param {Number} depth Depth in which to descend in object. Default is 2.
4113
+ * @param {Boolean} colors Flag to turn on ANSI escape codes to color the
4114
+ * output. Default is false (no coloring).
4115
+ */
4116
+ function inspect(obj, showHidden, depth, colors) {
4117
+ var ctx = {
4118
+ showHidden: showHidden,
4119
+ seen: [],
4120
+ stylize: function (str) { return str; }
4121
+ };
4122
+ return formatValue(ctx, obj, (typeof depth === 'undefined' ? 2 : depth));
4123
+ }
4124
+
4125
+ // https://gist.github.com/1044128/
4126
+ var getOuterHTML = function(element) {
4127
+ if ('outerHTML' in element) return element.outerHTML;
4128
+ var ns = "http://www.w3.org/1999/xhtml";
4129
+ var container = document.createElementNS(ns, '_');
4130
+ var elemProto = (window.HTMLElement || window.Element).prototype;
4131
+ var xmlSerializer = new XMLSerializer();
4132
+ var html;
4133
+ if (document.xmlVersion) {
4134
+ return xmlSerializer.serializeToString(element);
4135
+ } else {
4136
+ container.appendChild(element.cloneNode(false));
4137
+ html = container.innerHTML.replace('><', '>' + element.innerHTML + '<');
4138
+ container.innerHTML = '';
4139
+ return html;
4140
+ }
4141
+ };
4142
+
4143
+ // Returns true if object is a DOM element.
4144
+ var isDOMElement = function (object) {
4145
+ if (typeof HTMLElement === 'object') {
4146
+ return object instanceof HTMLElement;
4147
+ } else {
4148
+ return object &&
4149
+ typeof object === 'object' &&
4150
+ object.nodeType === 1 &&
4151
+ typeof object.nodeName === 'string';
4152
+ }
4153
+ };
4154
+
4155
+ function formatValue(ctx, value, recurseTimes) {
4156
+ // Provide a hook for user-specified inspect functions.
4157
+ // Check that value is an object with an inspect function on it
4158
+ if (value && typeof value.inspect === 'function' &&
4159
+ // Filter out the util module, it's inspect function is special
4160
+ value.inspect !== exports.inspect &&
4161
+ // Also filter out any prototype objects using the circular check.
4162
+ !(value.constructor && value.constructor.prototype === value)) {
4163
+ var ret = value.inspect(recurseTimes);
4164
+ if (typeof ret !== 'string') {
4165
+ ret = formatValue(ctx, ret, recurseTimes);
4166
+ }
4167
+ return ret;
4168
+ }
4169
+
4170
+ // Primitive types cannot have properties
4171
+ var primitive = formatPrimitive(ctx, value);
4172
+ if (primitive) {
4173
+ return primitive;
4174
+ }
4175
+
4176
+ // If it's DOM elem, get outer HTML.
4177
+ if (isDOMElement(value)) {
4178
+ return getOuterHTML(value);
4179
+ }
4180
+
4181
+ // Look up the keys of the object.
4182
+ var visibleKeys = getEnumerableProperties(value);
4183
+ var keys = ctx.showHidden ? getProperties(value) : visibleKeys;
4184
+
4185
+ // Some type of object without properties can be shortcutted.
4186
+ // In IE, errors have a single `stack` property, or if they are vanilla `Error`,
4187
+ // a `stack` plus `description` property; ignore those for consistency.
4188
+ if (keys.length === 0 || (isError(value) && (
4189
+ (keys.length === 1 && keys[0] === 'stack') ||
4190
+ (keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')
4191
+ ))) {
4192
+ if (typeof value === 'function') {
4193
+ var name = getName(value);
4194
+ var nameSuffix = name ? ': ' + name : '';
4195
+ return ctx.stylize('[Function' + nameSuffix + ']', 'special');
4196
+ }
4197
+ if (isRegExp(value)) {
4198
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
4199
+ }
4200
+ if (isDate(value)) {
4201
+ return ctx.stylize(Date.prototype.toUTCString.call(value), 'date');
4202
+ }
4203
+ if (isError(value)) {
4204
+ return formatError(value);
4205
+ }
4206
+ }
4207
+
4208
+ var base = '', array = false, braces = ['{', '}'];
4209
+
4210
+ // Make Array say that they are Array
4211
+ if (isArray(value)) {
4212
+ array = true;
4213
+ braces = ['[', ']'];
4214
+ }
4215
+
4216
+ // Make functions say that they are functions
4217
+ if (typeof value === 'function') {
4218
+ var name = getName(value);
4219
+ var nameSuffix = name ? ': ' + name : '';
4220
+ base = ' [Function' + nameSuffix + ']';
4221
+ }
4222
+
4223
+ // Make RegExps say that they are RegExps
4224
+ if (isRegExp(value)) {
4225
+ base = ' ' + RegExp.prototype.toString.call(value);
4226
+ }
4227
+
4228
+ // Make dates with properties first say the date
4229
+ if (isDate(value)) {
4230
+ base = ' ' + Date.prototype.toUTCString.call(value);
4231
+ }
4232
+
4233
+ // Make error with message first say the error
4234
+ if (isError(value)) {
4235
+ return formatError(value);
4236
+ }
4237
+
4238
+ if (keys.length === 0 && (!array || value.length == 0)) {
4239
+ return braces[0] + base + braces[1];
4240
+ }
4241
+
4242
+ if (recurseTimes < 0) {
4243
+ if (isRegExp(value)) {
4244
+ return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
4245
+ } else {
4246
+ return ctx.stylize('[Object]', 'special');
4247
+ }
4248
+ }
4249
+
4250
+ ctx.seen.push(value);
4251
+
4252
+ var output;
4253
+ if (array) {
4254
+ output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
4255
+ } else {
4256
+ output = keys.map(function(key) {
4257
+ return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
4258
+ });
4259
+ }
4260
+
4261
+ ctx.seen.pop();
4262
+
4263
+ return reduceToSingleString(output, base, braces);
4264
+ }
4265
+
4266
+
4267
+ function formatPrimitive(ctx, value) {
4268
+ switch (typeof value) {
4269
+ case 'undefined':
4270
+ return ctx.stylize('undefined', 'undefined');
4271
+
4272
+ case 'string':
4273
+ var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
4274
+ .replace(/'/g, "\\'")
4275
+ .replace(/\\"/g, '"') + '\'';
4276
+ return ctx.stylize(simple, 'string');
4277
+
4278
+ case 'number':
4279
+ return ctx.stylize('' + value, 'number');
4280
+
4281
+ case 'boolean':
4282
+ return ctx.stylize('' + value, 'boolean');
4283
+ }
4284
+ // For some reason typeof null is "object", so special case here.
4285
+ if (value === null) {
4286
+ return ctx.stylize('null', 'null');
4287
+ }
4288
+ }
4289
+
4290
+
4291
+ function formatError(value) {
4292
+ return '[' + Error.prototype.toString.call(value) + ']';
4293
+ }
4294
+
4295
+
4296
+ function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
4297
+ var output = [];
4298
+ for (var i = 0, l = value.length; i < l; ++i) {
4299
+ if (Object.prototype.hasOwnProperty.call(value, String(i))) {
4300
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
4301
+ String(i), true));
4302
+ } else {
4303
+ output.push('');
4304
+ }
4305
+ }
4306
+ keys.forEach(function(key) {
4307
+ if (!key.match(/^\d+$/)) {
4308
+ output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
4309
+ key, true));
4310
+ }
4311
+ });
4312
+ return output;
4313
+ }
4314
+
4315
+
4316
+ function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
4317
+ var name, str;
4318
+ if (value.__lookupGetter__) {
4319
+ if (value.__lookupGetter__(key)) {
4320
+ if (value.__lookupSetter__(key)) {
4321
+ str = ctx.stylize('[Getter/Setter]', 'special');
4322
+ } else {
4323
+ str = ctx.stylize('[Getter]', 'special');
4324
+ }
4325
+ } else {
4326
+ if (value.__lookupSetter__(key)) {
4327
+ str = ctx.stylize('[Setter]', 'special');
4328
+ }
4329
+ }
4330
+ }
4331
+ if (visibleKeys.indexOf(key) < 0) {
4332
+ name = '[' + key + ']';
4333
+ }
4334
+ if (!str) {
4335
+ if (ctx.seen.indexOf(value[key]) < 0) {
4336
+ if (recurseTimes === null) {
4337
+ str = formatValue(ctx, value[key], null);
4338
+ } else {
4339
+ str = formatValue(ctx, value[key], recurseTimes - 1);
4340
+ }
4341
+ if (str.indexOf('\n') > -1) {
4342
+ if (array) {
4343
+ str = str.split('\n').map(function(line) {
4344
+ return ' ' + line;
4345
+ }).join('\n').substr(2);
4346
+ } else {
4347
+ str = '\n' + str.split('\n').map(function(line) {
4348
+ return ' ' + line;
4349
+ }).join('\n');
4350
+ }
4351
+ }
4352
+ } else {
4353
+ str = ctx.stylize('[Circular]', 'special');
4354
+ }
4355
+ }
4356
+ if (typeof name === 'undefined') {
4357
+ if (array && key.match(/^\d+$/)) {
4358
+ return str;
4359
+ }
4360
+ name = JSON.stringify('' + key);
4361
+ if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
4362
+ name = name.substr(1, name.length - 2);
4363
+ name = ctx.stylize(name, 'name');
4364
+ } else {
4365
+ name = name.replace(/'/g, "\\'")
4366
+ .replace(/\\"/g, '"')
4367
+ .replace(/(^"|"$)/g, "'");
4368
+ name = ctx.stylize(name, 'string');
4369
+ }
4370
+ }
4371
+
4372
+ return name + ': ' + str;
4373
+ }
4374
+
4375
+
4376
+ function reduceToSingleString(output, base, braces) {
4377
+ var numLinesEst = 0;
4378
+ var length = output.reduce(function(prev, cur) {
4379
+ numLinesEst++;
4380
+ if (cur.indexOf('\n') >= 0) numLinesEst++;
4381
+ return prev + cur.length + 1;
4382
+ }, 0);
4383
+
4384
+ if (length > 60) {
4385
+ return braces[0] +
4386
+ (base === '' ? '' : base + '\n ') +
4387
+ ' ' +
4388
+ output.join(',\n ') +
4389
+ ' ' +
4390
+ braces[1];
4391
+ }
4392
+
4393
+ return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
4394
+ }
4395
+
4396
+ function isArray(ar) {
4397
+ return Array.isArray(ar) ||
4398
+ (typeof ar === 'object' && objectToString(ar) === '[object Array]');
4399
+ }
4400
+
4401
+ function isRegExp(re) {
4402
+ return typeof re === 'object' && objectToString(re) === '[object RegExp]';
4403
+ }
4404
+
4405
+ function isDate(d) {
4406
+ return typeof d === 'object' && objectToString(d) === '[object Date]';
4407
+ }
4408
+
4409
+ function isError(e) {
4410
+ return typeof e === 'object' && objectToString(e) === '[object Error]';
4411
+ }
4412
+
4413
+ function objectToString(o) {
4414
+ return Object.prototype.toString.call(o);
4415
+ }
4416
+
4417
+ });
4418
+ require.register("chai/lib/chai/utils/objDisplay.js", function(exports, require, module){
4419
+ /*!
4420
+ * Chai - flag utility
4421
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4422
+ * MIT Licensed
4423
+ */
4424
+
4425
+ /*!
4426
+ * Module dependancies
4427
+ */
4428
+
4429
+ var inspect = require('./inspect');
4430
+ var config = require('../config');
4431
+
4432
+ /**
4433
+ * ### .objDisplay (object)
4434
+ *
4435
+ * Determines if an object or an array matches
4436
+ * criteria to be inspected in-line for error
4437
+ * messages or should be truncated.
4438
+ *
4439
+ * @param {Mixed} javascript object to inspect
4440
+ * @name objDisplay
4441
+ * @api public
4442
+ */
4443
+
4444
+ module.exports = function (obj) {
4445
+ var str = inspect(obj)
4446
+ , type = Object.prototype.toString.call(obj);
4447
+
4448
+ if (config.truncateThreshold && str.length >= config.truncateThreshold) {
4449
+ if (type === '[object Function]') {
4450
+ return !obj.name || obj.name === ''
4451
+ ? '[Function]'
4452
+ : '[Function: ' + obj.name + ']';
4453
+ } else if (type === '[object Array]') {
4454
+ return '[ Array(' + obj.length + ') ]';
4455
+ } else if (type === '[object Object]') {
4456
+ var keys = Object.keys(obj)
4457
+ , kstr = keys.length > 2
4458
+ ? keys.splice(0, 2).join(', ') + ', ...'
4459
+ : keys.join(', ');
4460
+ return '{ Object (' + kstr + ') }';
4461
+ } else {
4462
+ return str;
4463
+ }
4464
+ } else {
4465
+ return str;
4466
+ }
4467
+ };
4468
+
4469
+ });
4470
+ require.register("chai/lib/chai/utils/overwriteMethod.js", function(exports, require, module){
4471
+ /*!
4472
+ * Chai - overwriteMethod utility
4473
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4474
+ * MIT Licensed
4475
+ */
4476
+
4477
+ /**
4478
+ * ### overwriteMethod (ctx, name, fn)
4479
+ *
4480
+ * Overwites an already existing method and provides
4481
+ * access to previous function. Must return function
4482
+ * to be used for name.
4483
+ *
4484
+ * utils.overwriteMethod(chai.Assertion.prototype, 'equal', function (_super) {
4485
+ * return function (str) {
4486
+ * var obj = utils.flag(this, 'object');
4487
+ * if (obj instanceof Foo) {
4488
+ * new chai.Assertion(obj.value).to.equal(str);
4489
+ * } else {
4490
+ * _super.apply(this, arguments);
4491
+ * }
4492
+ * }
4493
+ * });
4494
+ *
4495
+ * Can also be accessed directly from `chai.Assertion`.
4496
+ *
4497
+ * chai.Assertion.overwriteMethod('foo', fn);
4498
+ *
4499
+ * Then can be used as any other assertion.
4500
+ *
4501
+ * expect(myFoo).to.equal('bar');
4502
+ *
4503
+ * @param {Object} ctx object whose method is to be overwritten
4504
+ * @param {String} name of method to overwrite
4505
+ * @param {Function} method function that returns a function to be used for name
4506
+ * @name overwriteMethod
4507
+ * @api public
4508
+ */
4509
+
4510
+ module.exports = function (ctx, name, method) {
4511
+ var _method = ctx[name]
4512
+ , _super = function () { return this; };
4513
+
4514
+ if (_method && 'function' === typeof _method)
4515
+ _super = _method;
4516
+
4517
+ ctx[name] = function () {
4518
+ var result = method(_super).apply(this, arguments);
4519
+ return result === undefined ? this : result;
4520
+ }
4521
+ };
4522
+
4523
+ });
4524
+ require.register("chai/lib/chai/utils/overwriteProperty.js", function(exports, require, module){
4525
+ /*!
4526
+ * Chai - overwriteProperty utility
4527
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4528
+ * MIT Licensed
4529
+ */
4530
+
4531
+ /**
4532
+ * ### overwriteProperty (ctx, name, fn)
4533
+ *
4534
+ * Overwites an already existing property getter and provides
4535
+ * access to previous value. Must return function to use as getter.
4536
+ *
4537
+ * utils.overwriteProperty(chai.Assertion.prototype, 'ok', function (_super) {
4538
+ * return function () {
4539
+ * var obj = utils.flag(this, 'object');
4540
+ * if (obj instanceof Foo) {
4541
+ * new chai.Assertion(obj.name).to.equal('bar');
4542
+ * } else {
4543
+ * _super.call(this);
4544
+ * }
4545
+ * }
4546
+ * });
4547
+ *
4548
+ *
4549
+ * Can also be accessed directly from `chai.Assertion`.
4550
+ *
4551
+ * chai.Assertion.overwriteProperty('foo', fn);
4552
+ *
4553
+ * Then can be used as any other assertion.
4554
+ *
4555
+ * expect(myFoo).to.be.ok;
4556
+ *
4557
+ * @param {Object} ctx object whose property is to be overwritten
4558
+ * @param {String} name of property to overwrite
4559
+ * @param {Function} getter function that returns a getter function to be used for name
4560
+ * @name overwriteProperty
4561
+ * @api public
4562
+ */
4563
+
4564
+ module.exports = function (ctx, name, getter) {
4565
+ var _get = Object.getOwnPropertyDescriptor(ctx, name)
4566
+ , _super = function () {};
4567
+
4568
+ if (_get && 'function' === typeof _get.get)
4569
+ _super = _get.get
4570
+
4571
+ Object.defineProperty(ctx, name,
4572
+ { get: function () {
4573
+ var result = getter(_super).call(this);
4574
+ return result === undefined ? this : result;
4575
+ }
4576
+ , configurable: true
4577
+ });
4578
+ };
4579
+
4580
+ });
4581
+ require.register("chai/lib/chai/utils/overwriteChainableMethod.js", function(exports, require, module){
4582
+ /*!
4583
+ * Chai - overwriteChainableMethod utility
4584
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4585
+ * MIT Licensed
4586
+ */
4587
+
4588
+ /**
4589
+ * ### overwriteChainableMethod (ctx, name, fn)
4590
+ *
4591
+ * Overwites an already existing chainable method
4592
+ * and provides access to the previous function or
4593
+ * property. Must return functions to be used for
4594
+ * name.
4595
+ *
4596
+ * utils.overwriteChainableMethod(chai.Assertion.prototype, 'length',
4597
+ * function (_super) {
4598
+ * }
4599
+ * , function (_super) {
4600
+ * }
4601
+ * );
4602
+ *
4603
+ * Can also be accessed directly from `chai.Assertion`.
4604
+ *
4605
+ * chai.Assertion.overwriteChainableMethod('foo', fn, fn);
4606
+ *
4607
+ * Then can be used as any other assertion.
4608
+ *
4609
+ * expect(myFoo).to.have.length(3);
4610
+ * expect(myFoo).to.have.length.above(3);
4611
+ *
4612
+ * @param {Object} ctx object whose method / property is to be overwritten
4613
+ * @param {String} name of method / property to overwrite
4614
+ * @param {Function} method function that returns a function to be used for name
4615
+ * @param {Function} chainingBehavior function that returns a function to be used for property
4616
+ * @name overwriteChainableMethod
4617
+ * @api public
4618
+ */
4619
+
4620
+ module.exports = function (ctx, name, method, chainingBehavior) {
4621
+ var chainableBehavior = ctx.__methods[name];
4622
+
4623
+ var _chainingBehavior = chainableBehavior.chainingBehavior;
4624
+ chainableBehavior.chainingBehavior = function () {
4625
+ var result = chainingBehavior(_chainingBehavior).call(this);
4626
+ return result === undefined ? this : result;
4627
+ };
4628
+
4629
+ var _method = chainableBehavior.method;
4630
+ chainableBehavior.method = function () {
4631
+ var result = method(_method).apply(this, arguments);
4632
+ return result === undefined ? this : result;
4633
+ };
4634
+ };
4635
+
4636
+ });
4637
+ require.register("chai/lib/chai/utils/test.js", function(exports, require, module){
4638
+ /*!
4639
+ * Chai - test utility
4640
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4641
+ * MIT Licensed
4642
+ */
4643
+
4644
+ /*!
4645
+ * Module dependancies
4646
+ */
4647
+
4648
+ var flag = require('./flag');
4649
+
4650
+ /**
4651
+ * # test(object, expression)
4652
+ *
4653
+ * Test and object for expression.
4654
+ *
4655
+ * @param {Object} object (constructed Assertion)
4656
+ * @param {Arguments} chai.Assertion.prototype.assert arguments
4657
+ */
4658
+
4659
+ module.exports = function (obj, args) {
4660
+ var negate = flag(obj, 'negate')
4661
+ , expr = args[0];
4662
+ return negate ? !expr : expr;
4663
+ };
4664
+
4665
+ });
4666
+ require.register("chai/lib/chai/utils/transferFlags.js", function(exports, require, module){
4667
+ /*!
4668
+ * Chai - transferFlags utility
4669
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4670
+ * MIT Licensed
4671
+ */
4672
+
4673
+ /**
4674
+ * ### transferFlags(assertion, object, includeAll = true)
4675
+ *
4676
+ * Transfer all the flags for `assertion` to `object`. If
4677
+ * `includeAll` is set to `false`, then the base Chai
4678
+ * assertion flags (namely `object`, `ssfi`, and `message`)
4679
+ * will not be transferred.
4680
+ *
4681
+ *
4682
+ * var newAssertion = new Assertion();
4683
+ * utils.transferFlags(assertion, newAssertion);
4684
+ *
4685
+ * var anotherAsseriton = new Assertion(myObj);
4686
+ * utils.transferFlags(assertion, anotherAssertion, false);
4687
+ *
4688
+ * @param {Assertion} assertion the assertion to transfer the flags from
4689
+ * @param {Object} object the object to transfer the flags too; usually a new assertion
4690
+ * @param {Boolean} includeAll
4691
+ * @name getAllFlags
4692
+ * @api private
4693
+ */
4694
+
4695
+ module.exports = function (assertion, object, includeAll) {
4696
+ var flags = assertion.__flags || (assertion.__flags = Object.create(null));
4697
+
4698
+ if (!object.__flags) {
4699
+ object.__flags = Object.create(null);
4700
+ }
4701
+
4702
+ includeAll = arguments.length === 3 ? includeAll : true;
4703
+
4704
+ for (var flag in flags) {
4705
+ if (includeAll ||
4706
+ (flag !== 'object' && flag !== 'ssfi' && flag != 'message')) {
4707
+ object.__flags[flag] = flags[flag];
4708
+ }
4709
+ }
4710
+ };
4711
+
4712
+ });
4713
+ require.register("chai/lib/chai/utils/type.js", function(exports, require, module){
4714
+ /*!
4715
+ * Chai - type utility
4716
+ * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com>
4717
+ * MIT Licensed
4718
+ */
4719
+
4720
+ /*!
4721
+ * Detectable javascript natives
4722
+ */
4723
+
4724
+ var natives = {
4725
+ '[object Arguments]': 'arguments'
4726
+ , '[object Array]': 'array'
4727
+ , '[object Date]': 'date'
4728
+ , '[object Function]': 'function'
4729
+ , '[object Number]': 'number'
4730
+ , '[object RegExp]': 'regexp'
4731
+ , '[object String]': 'string'
4732
+ };
4733
+
4734
+ /**
4735
+ * ### type(object)
4736
+ *
4737
+ * Better implementation of `typeof` detection that can
4738
+ * be used cross-browser. Handles the inconsistencies of
4739
+ * Array, `null`, and `undefined` detection.
4740
+ *
4741
+ * utils.type({}) // 'object'
4742
+ * utils.type(null) // `null'
4743
+ * utils.type(undefined) // `undefined`
4744
+ * utils.type([]) // `array`
4745
+ *
4746
+ * @param {Mixed} object to detect type of
4747
+ * @name type
4748
+ * @api private
4749
+ */
4750
+
4751
+ module.exports = function (obj) {
4752
+ var str = Object.prototype.toString.call(obj);
4753
+ if (natives[str]) return natives[str];
4754
+ if (obj === null) return 'null';
4755
+ if (obj === undefined) return 'undefined';
4756
+ if (obj === Object(obj)) return 'object';
4757
+ return typeof obj;
4758
+ };
4759
+
4760
+ });
4761
+
4762
+
4763
+
4764
+
4765
+ require.alias("chaijs-assertion-error/index.js", "chai/deps/assertion-error/index.js");
4766
+ require.alias("chaijs-assertion-error/index.js", "chai/deps/assertion-error/index.js");
4767
+ require.alias("chaijs-assertion-error/index.js", "assertion-error/index.js");
4768
+ require.alias("chaijs-assertion-error/index.js", "chaijs-assertion-error/index.js");
4769
+ require.alias("chaijs-deep-eql/lib/eql.js", "chai/deps/deep-eql/lib/eql.js");
4770
+ require.alias("chaijs-deep-eql/lib/eql.js", "chai/deps/deep-eql/index.js");
4771
+ require.alias("chaijs-deep-eql/lib/eql.js", "deep-eql/index.js");
4772
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-deep-eql/deps/type-detect/lib/type.js");
4773
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-deep-eql/deps/type-detect/index.js");
4774
+ require.alias("chaijs-type-detect/lib/type.js", "chaijs-type-detect/index.js");
4775
+ require.alias("chaijs-deep-eql/lib/eql.js", "chaijs-deep-eql/index.js");
4776
+ require.alias("chai/index.js", "chai/index.js");if (typeof exports == "object") {
4777
+ module.exports = require("chai");
4778
+ } else if (typeof define == "function" && define.amd) {
4779
+ define([], function(){ return require("chai"); });
4780
+ } else {
4781
+ this["chai"] = require("chai");
4782
+ }})();