element.line.tests.js 35 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008
  1. // Tests for the line element
  2. describe('Chart.elements.Line', function() {
  3. it('should be constructed', function() {
  4. var line = new Chart.elements.Line({
  5. _datasetindex: 2,
  6. _points: [1, 2, 3, 4]
  7. });
  8. expect(line).not.toBe(undefined);
  9. expect(line._datasetindex).toBe(2);
  10. expect(line._points).toEqual([1, 2, 3, 4]);
  11. });
  12. it('should draw with default settings', function() {
  13. var mockContext = window.createMockContext();
  14. // Create our points
  15. var points = [];
  16. points.push(new Chart.elements.Point({
  17. _datasetindex: 2,
  18. _index: 0,
  19. _view: {
  20. x: 0,
  21. y: 10,
  22. controlPointNextX: 0,
  23. controlPointNextY: 10
  24. }
  25. }));
  26. points.push(new Chart.elements.Point({
  27. _datasetindex: 2,
  28. _index: 1,
  29. _view: {
  30. x: 5,
  31. y: 0,
  32. controlPointPreviousX: 5,
  33. controlPointPreviousY: 0,
  34. controlPointNextX: 5,
  35. controlPointNextY: 0
  36. }
  37. }));
  38. points.push(new Chart.elements.Point({
  39. _datasetindex: 2,
  40. _index: 2,
  41. _view: {
  42. x: 15,
  43. y: -10,
  44. controlPointPreviousX: 15,
  45. controlPointPreviousY: -10,
  46. controlPointNextX: 15,
  47. controlPointNextY: -10
  48. }
  49. }));
  50. points.push(new Chart.elements.Point({
  51. _datasetindex: 2,
  52. _index: 3,
  53. _view: {
  54. x: 19,
  55. y: -5,
  56. controlPointPreviousX: 19,
  57. controlPointPreviousY: -5,
  58. controlPointNextX: 19,
  59. controlPointNextY: -5
  60. }
  61. }));
  62. var line = new Chart.elements.Line({
  63. _datasetindex: 2,
  64. _chart: {
  65. ctx: mockContext,
  66. },
  67. _children: points,
  68. // Need to provide some settings
  69. _view: {
  70. fill: false, // don't want to fill
  71. tension: 0, // no bezier curve for now
  72. }
  73. });
  74. line.draw();
  75. expect(mockContext.getCalls()).toEqual([{
  76. name: 'save',
  77. args: [],
  78. }, {
  79. name: 'setLineCap',
  80. args: ['butt']
  81. }, {
  82. name: 'setLineDash',
  83. args: [
  84. []
  85. ]
  86. }, {
  87. name: 'setLineDashOffset',
  88. args: [0.0]
  89. }, {
  90. name: 'setLineJoin',
  91. args: ['miter']
  92. }, {
  93. name: 'setLineWidth',
  94. args: [3]
  95. }, {
  96. name: 'setStrokeStyle',
  97. args: ['rgba(0,0,0,0.1)']
  98. }, {
  99. name: 'beginPath',
  100. args: []
  101. }, {
  102. name: 'moveTo',
  103. args: [0, 10]
  104. }, {
  105. name: 'lineTo',
  106. args: [5, 0]
  107. }, {
  108. name: 'lineTo',
  109. args: [15, -10]
  110. }, {
  111. name: 'lineTo',
  112. args: [19, -5]
  113. }, {
  114. name: 'stroke',
  115. args: [],
  116. }, {
  117. name: 'restore',
  118. args: []
  119. }]);
  120. });
  121. it('should draw with straight lines for a tension of 0', function() {
  122. var mockContext = window.createMockContext();
  123. // Create our points
  124. var points = [];
  125. points.push(new Chart.elements.Point({
  126. _datasetindex: 2,
  127. _index: 0,
  128. _view: {
  129. x: 0,
  130. y: 10,
  131. controlPointNextX: 0,
  132. controlPointNextY: 10,
  133. tension: 0
  134. }
  135. }));
  136. points.push(new Chart.elements.Point({
  137. _datasetindex: 2,
  138. _index: 1,
  139. _view: {
  140. x: 5,
  141. y: 0,
  142. controlPointPreviousX: 5,
  143. controlPointPreviousY: 0,
  144. controlPointNextX: 5,
  145. controlPointNextY: 0,
  146. tension: 0
  147. }
  148. }));
  149. points.push(new Chart.elements.Point({
  150. _datasetindex: 2,
  151. _index: 2,
  152. _view: {
  153. x: 15,
  154. y: -10,
  155. controlPointPreviousX: 15,
  156. controlPointPreviousY: -10,
  157. controlPointNextX: 15,
  158. controlPointNextY: -10,
  159. tension: 0
  160. }
  161. }));
  162. points.push(new Chart.elements.Point({
  163. _datasetindex: 2,
  164. _index: 3,
  165. _view: {
  166. x: 19,
  167. y: -5,
  168. controlPointPreviousX: 19,
  169. controlPointPreviousY: -5,
  170. controlPointNextX: 19,
  171. controlPointNextY: -5,
  172. tension: 0
  173. }
  174. }));
  175. var line = new Chart.elements.Line({
  176. _datasetindex: 2,
  177. _chart: {
  178. ctx: mockContext,
  179. },
  180. _children: points,
  181. // Need to provide some settings
  182. _view: {
  183. fill: false, // don't want to fill
  184. tension: 0, // no bezier curve for now
  185. }
  186. });
  187. line.draw();
  188. expect(mockContext.getCalls()).toEqual([{
  189. name: 'save',
  190. args: [],
  191. }, {
  192. name: 'setLineCap',
  193. args: ['butt']
  194. }, {
  195. name: 'setLineDash',
  196. args: [
  197. []
  198. ]
  199. }, {
  200. name: 'setLineDashOffset',
  201. args: [0.0]
  202. }, {
  203. name: 'setLineJoin',
  204. args: ['miter']
  205. }, {
  206. name: 'setLineWidth',
  207. args: [3]
  208. }, {
  209. name: 'setStrokeStyle',
  210. args: ['rgba(0,0,0,0.1)']
  211. }, {
  212. name: 'beginPath',
  213. args: []
  214. }, {
  215. name: 'moveTo',
  216. args: [0, 10]
  217. }, {
  218. name: 'lineTo',
  219. args: [5, 0]
  220. }, {
  221. name: 'lineTo',
  222. args: [15, -10]
  223. }, {
  224. name: 'lineTo',
  225. args: [19, -5]
  226. }, {
  227. name: 'stroke',
  228. args: [],
  229. }, {
  230. name: 'restore',
  231. args: []
  232. }]);
  233. });
  234. it('should draw stepped lines, with "before" interpolation', function() {
  235. // Both `true` and `'before'` should draw the same steppedLine
  236. var beforeInterpolations = [true, 'before'];
  237. beforeInterpolations.forEach(function(mode) {
  238. var mockContext = window.createMockContext();
  239. // Create our points
  240. var points = [];
  241. points.push(new Chart.elements.Point({
  242. _datasetindex: 2,
  243. _index: 0,
  244. _view: {
  245. x: 0,
  246. y: 10,
  247. controlPointNextX: 0,
  248. controlPointNextY: 10,
  249. steppedLine: mode
  250. }
  251. }));
  252. points.push(new Chart.elements.Point({
  253. _datasetindex: 2,
  254. _index: 1,
  255. _view: {
  256. x: 5,
  257. y: 0,
  258. controlPointPreviousX: 5,
  259. controlPointPreviousY: 0,
  260. controlPointNextX: 5,
  261. controlPointNextY: 0,
  262. steppedLine: mode
  263. }
  264. }));
  265. points.push(new Chart.elements.Point({
  266. _datasetindex: 2,
  267. _index: 2,
  268. _view: {
  269. x: 15,
  270. y: -10,
  271. controlPointPreviousX: 15,
  272. controlPointPreviousY: -10,
  273. controlPointNextX: 15,
  274. controlPointNextY: -10,
  275. steppedLine: mode
  276. }
  277. }));
  278. points.push(new Chart.elements.Point({
  279. _datasetindex: 2,
  280. _index: 3,
  281. _view: {
  282. x: 19,
  283. y: -5,
  284. controlPointPreviousX: 19,
  285. controlPointPreviousY: -5,
  286. controlPointNextX: 19,
  287. controlPointNextY: -5,
  288. steppedLine: mode
  289. }
  290. }));
  291. var line = new Chart.elements.Line({
  292. _datasetindex: 2,
  293. _chart: {
  294. ctx: mockContext,
  295. },
  296. _children: points,
  297. // Need to provide some settings
  298. _view: {
  299. fill: false, // don't want to fill
  300. tension: 0, // no bezier curve for now
  301. }
  302. });
  303. line.draw();
  304. expect(mockContext.getCalls()).toEqual([{
  305. name: 'save',
  306. args: [],
  307. }, {
  308. name: 'setLineCap',
  309. args: ['butt']
  310. }, {
  311. name: 'setLineDash',
  312. args: [
  313. []
  314. ]
  315. }, {
  316. name: 'setLineDashOffset',
  317. args: [0.0]
  318. }, {
  319. name: 'setLineJoin',
  320. args: ['miter']
  321. }, {
  322. name: 'setLineWidth',
  323. args: [3]
  324. }, {
  325. name: 'setStrokeStyle',
  326. args: ['rgba(0,0,0,0.1)']
  327. }, {
  328. name: 'beginPath',
  329. args: []
  330. }, {
  331. name: 'moveTo',
  332. args: [0, 10]
  333. }, {
  334. name: 'lineTo',
  335. args: [5, 10]
  336. }, {
  337. name: 'lineTo',
  338. args: [5, 0]
  339. }, {
  340. name: 'lineTo',
  341. args: [15, 0]
  342. }, {
  343. name: 'lineTo',
  344. args: [15, -10]
  345. }, {
  346. name: 'lineTo',
  347. args: [19, -10]
  348. }, {
  349. name: 'lineTo',
  350. args: [19, -5]
  351. }, {
  352. name: 'stroke',
  353. args: [],
  354. }, {
  355. name: 'restore',
  356. args: []
  357. }]);
  358. });
  359. });
  360. it('should draw stepped lines, with "after" interpolation', function() {
  361. var mockContext = window.createMockContext();
  362. // Create our points
  363. var points = [];
  364. points.push(new Chart.elements.Point({
  365. _datasetindex: 2,
  366. _index: 0,
  367. _view: {
  368. x: 0,
  369. y: 10,
  370. controlPointNextX: 0,
  371. controlPointNextY: 10,
  372. steppedLine: 'after'
  373. }
  374. }));
  375. points.push(new Chart.elements.Point({
  376. _datasetindex: 2,
  377. _index: 1,
  378. _view: {
  379. x: 5,
  380. y: 0,
  381. controlPointPreviousX: 5,
  382. controlPointPreviousY: 0,
  383. controlPointNextX: 5,
  384. controlPointNextY: 0,
  385. steppedLine: 'after'
  386. }
  387. }));
  388. points.push(new Chart.elements.Point({
  389. _datasetindex: 2,
  390. _index: 2,
  391. _view: {
  392. x: 15,
  393. y: -10,
  394. controlPointPreviousX: 15,
  395. controlPointPreviousY: -10,
  396. controlPointNextX: 15,
  397. controlPointNextY: -10,
  398. steppedLine: 'after'
  399. }
  400. }));
  401. points.push(new Chart.elements.Point({
  402. _datasetindex: 2,
  403. _index: 3,
  404. _view: {
  405. x: 19,
  406. y: -5,
  407. controlPointPreviousX: 19,
  408. controlPointPreviousY: -5,
  409. controlPointNextX: 19,
  410. controlPointNextY: -5,
  411. steppedLine: 'after'
  412. }
  413. }));
  414. var line = new Chart.elements.Line({
  415. _datasetindex: 2,
  416. _chart: {
  417. ctx: mockContext,
  418. },
  419. _children: points,
  420. // Need to provide some settings
  421. _view: {
  422. fill: false, // don't want to fill
  423. tension: 0, // no bezier curve for now
  424. }
  425. });
  426. line.draw();
  427. expect(mockContext.getCalls()).toEqual([{
  428. name: 'save',
  429. args: [],
  430. }, {
  431. name: 'setLineCap',
  432. args: ['butt']
  433. }, {
  434. name: 'setLineDash',
  435. args: [
  436. []
  437. ]
  438. }, {
  439. name: 'setLineDashOffset',
  440. args: [0.0]
  441. }, {
  442. name: 'setLineJoin',
  443. args: ['miter']
  444. }, {
  445. name: 'setLineWidth',
  446. args: [3]
  447. }, {
  448. name: 'setStrokeStyle',
  449. args: ['rgba(0,0,0,0.1)']
  450. }, {
  451. name: 'beginPath',
  452. args: []
  453. }, {
  454. name: 'moveTo',
  455. args: [0, 10]
  456. }, {
  457. name: 'lineTo',
  458. args: [0, 0]
  459. }, {
  460. name: 'lineTo',
  461. args: [5, 0]
  462. }, {
  463. name: 'lineTo',
  464. args: [5, -10]
  465. }, {
  466. name: 'lineTo',
  467. args: [15, -10]
  468. }, {
  469. name: 'lineTo',
  470. args: [15, -5]
  471. }, {
  472. name: 'lineTo',
  473. args: [19, -5]
  474. }, {
  475. name: 'stroke',
  476. args: [],
  477. }, {
  478. name: 'restore',
  479. args: []
  480. }]);
  481. });
  482. it('should draw with custom settings', function() {
  483. var mockContext = window.createMockContext();
  484. // Create our points
  485. var points = [];
  486. points.push(new Chart.elements.Point({
  487. _datasetindex: 2,
  488. _index: 0,
  489. _view: {
  490. x: 0,
  491. y: 10,
  492. controlPointNextX: 0,
  493. controlPointNextY: 10
  494. }
  495. }));
  496. points.push(new Chart.elements.Point({
  497. _datasetindex: 2,
  498. _index: 1,
  499. _view: {
  500. x: 5,
  501. y: 0,
  502. controlPointPreviousX: 5,
  503. controlPointPreviousY: 0,
  504. controlPointNextX: 5,
  505. controlPointNextY: 0
  506. }
  507. }));
  508. points.push(new Chart.elements.Point({
  509. _datasetindex: 2,
  510. _index: 2,
  511. _view: {
  512. x: 15,
  513. y: -10,
  514. controlPointPreviousX: 15,
  515. controlPointPreviousY: -10,
  516. controlPointNextX: 15,
  517. controlPointNextY: -10
  518. }
  519. }));
  520. points.push(new Chart.elements.Point({
  521. _datasetindex: 2,
  522. _index: 3,
  523. _view: {
  524. x: 19,
  525. y: -5,
  526. controlPointPreviousX: 19,
  527. controlPointPreviousY: -5,
  528. controlPointNextX: 19,
  529. controlPointNextY: -5
  530. }
  531. }));
  532. var line = new Chart.elements.Line({
  533. _datasetindex: 2,
  534. _chart: {
  535. ctx: mockContext,
  536. },
  537. _children: points,
  538. // Need to provide some settings
  539. _view: {
  540. fill: true,
  541. tension: 0, // no bezier curve for now
  542. borderCapStyle: 'round',
  543. borderColor: 'rgb(255, 255, 0)',
  544. borderDash: [2, 2],
  545. borderDashOffset: 1.5,
  546. borderJoinStyle: 'bevel',
  547. borderWidth: 4,
  548. backgroundColor: 'rgb(0, 0, 0)'
  549. }
  550. });
  551. line.draw();
  552. var expected = [{
  553. name: 'save',
  554. args: []
  555. }, {
  556. name: 'setLineCap',
  557. args: ['round']
  558. }, {
  559. name: 'setLineDash',
  560. args: [
  561. [2, 2]
  562. ]
  563. }, {
  564. name: 'setLineDashOffset',
  565. args: [1.5]
  566. }, {
  567. name: 'setLineJoin',
  568. args: ['bevel']
  569. }, {
  570. name: 'setLineWidth',
  571. args: [4]
  572. }, {
  573. name: 'setStrokeStyle',
  574. args: ['rgb(255, 255, 0)']
  575. }, {
  576. name: 'beginPath',
  577. args: []
  578. }, {
  579. name: 'moveTo',
  580. args: [0, 10]
  581. }, {
  582. name: 'lineTo',
  583. args: [5, 0]
  584. }, {
  585. name: 'lineTo',
  586. args: [15, -10]
  587. }, {
  588. name: 'lineTo',
  589. args: [19, -5]
  590. }, {
  591. name: 'stroke',
  592. args: []
  593. }, {
  594. name: 'restore',
  595. args: []
  596. }];
  597. expect(mockContext.getCalls()).toEqual(expected);
  598. });
  599. it('should skip points correctly', function() {
  600. var mockContext = window.createMockContext();
  601. // Create our points
  602. var points = [];
  603. points.push(new Chart.elements.Point({
  604. _datasetindex: 2,
  605. _index: 0,
  606. _view: {
  607. x: 0,
  608. y: 10,
  609. controlPointNextX: 0,
  610. controlPointNextY: 10
  611. }
  612. }));
  613. points.push(new Chart.elements.Point({
  614. _datasetindex: 2,
  615. _index: 1,
  616. _view: {
  617. x: 5,
  618. y: 0,
  619. controlPointPreviousX: 5,
  620. controlPointPreviousY: 0,
  621. controlPointNextX: 5,
  622. controlPointNextY: 0
  623. }
  624. }));
  625. points.push(new Chart.elements.Point({
  626. _datasetindex: 2,
  627. _index: 2,
  628. _view: {
  629. x: 15,
  630. y: -10,
  631. controlPointPreviousX: 15,
  632. controlPointPreviousY: -10,
  633. controlPointNextX: 15,
  634. controlPointNextY: -10,
  635. skip: true
  636. }
  637. }));
  638. points.push(new Chart.elements.Point({
  639. _datasetindex: 2,
  640. _index: 3,
  641. _view: {
  642. x: 19,
  643. y: -5,
  644. controlPointPreviousX: 19,
  645. controlPointPreviousY: -5,
  646. controlPointNextX: 19,
  647. controlPointNextY: -5
  648. }
  649. }));
  650. var line = new Chart.elements.Line({
  651. _datasetindex: 2,
  652. _chart: {
  653. ctx: mockContext,
  654. },
  655. _children: points,
  656. // Need to provide some settings
  657. _view: {
  658. fill: true,
  659. tension: 0, // no bezier curve for now
  660. }
  661. });
  662. line.draw();
  663. var expected = [{
  664. name: 'save',
  665. args: []
  666. }, {
  667. name: 'setLineCap',
  668. args: ['butt']
  669. }, {
  670. name: 'setLineDash',
  671. args: [
  672. []
  673. ]
  674. }, {
  675. name: 'setLineDashOffset',
  676. args: [0]
  677. }, {
  678. name: 'setLineJoin',
  679. args: ['miter']
  680. }, {
  681. name: 'setLineWidth',
  682. args: [3]
  683. }, {
  684. name: 'setStrokeStyle',
  685. args: ['rgba(0,0,0,0.1)']
  686. }, {
  687. name: 'beginPath',
  688. args: []
  689. }, {
  690. name: 'moveTo',
  691. args: [0, 10]
  692. }, {
  693. name: 'lineTo',
  694. args: [5, 0]
  695. }, {
  696. name: 'moveTo',
  697. args: [19, -5]
  698. }, {
  699. name: 'stroke',
  700. args: []
  701. }, {
  702. name: 'restore',
  703. args: []
  704. }];
  705. expect(mockContext.getCalls()).toEqual(expected);
  706. });
  707. it('should skip points correctly when spanGaps is true', function() {
  708. var mockContext = window.createMockContext();
  709. // Create our points
  710. var points = [];
  711. points.push(new Chart.elements.Point({
  712. _datasetindex: 2,
  713. _index: 0,
  714. _view: {
  715. x: 0,
  716. y: 10,
  717. controlPointNextX: 0,
  718. controlPointNextY: 10
  719. }
  720. }));
  721. points.push(new Chart.elements.Point({
  722. _datasetindex: 2,
  723. _index: 1,
  724. _view: {
  725. x: 5,
  726. y: 0,
  727. controlPointPreviousX: 5,
  728. controlPointPreviousY: 0,
  729. controlPointNextX: 5,
  730. controlPointNextY: 0
  731. }
  732. }));
  733. points.push(new Chart.elements.Point({
  734. _datasetindex: 2,
  735. _index: 2,
  736. _view: {
  737. x: 15,
  738. y: -10,
  739. controlPointPreviousX: 15,
  740. controlPointPreviousY: -10,
  741. controlPointNextX: 15,
  742. controlPointNextY: -10,
  743. skip: true
  744. }
  745. }));
  746. points.push(new Chart.elements.Point({
  747. _datasetindex: 2,
  748. _index: 3,
  749. _view: {
  750. x: 19,
  751. y: -5,
  752. controlPointPreviousX: 19,
  753. controlPointPreviousY: -5,
  754. controlPointNextX: 19,
  755. controlPointNextY: -5
  756. }
  757. }));
  758. var line = new Chart.elements.Line({
  759. _datasetindex: 2,
  760. _chart: {
  761. ctx: mockContext,
  762. },
  763. _children: points,
  764. // Need to provide some settings
  765. _view: {
  766. fill: true,
  767. tension: 0, // no bezier curve for now
  768. spanGaps: true
  769. }
  770. });
  771. line.draw();
  772. var expected = [{
  773. name: 'save',
  774. args: []
  775. }, {
  776. name: 'setLineCap',
  777. args: ['butt']
  778. }, {
  779. name: 'setLineDash',
  780. args: [
  781. []
  782. ]
  783. }, {
  784. name: 'setLineDashOffset',
  785. args: [0]
  786. }, {
  787. name: 'setLineJoin',
  788. args: ['miter']
  789. }, {
  790. name: 'setLineWidth',
  791. args: [3]
  792. }, {
  793. name: 'setStrokeStyle',
  794. args: ['rgba(0,0,0,0.1)']
  795. }, {
  796. name: 'beginPath',
  797. args: []
  798. }, {
  799. name: 'moveTo',
  800. args: [0, 10]
  801. }, {
  802. name: 'lineTo',
  803. args: [5, 0]
  804. }, {
  805. name: 'lineTo',
  806. args: [19, -5]
  807. }, {
  808. name: 'stroke',
  809. args: []
  810. }, {
  811. name: 'restore',
  812. args: []
  813. }];
  814. expect(mockContext.getCalls()).toEqual(expected);
  815. });
  816. it('should skip points correctly when all points are skipped', function() {
  817. var mockContext = window.createMockContext();
  818. // Create our points
  819. var points = [];
  820. points.push(new Chart.elements.Point({
  821. _datasetindex: 2,
  822. _index: 0,
  823. _view: {
  824. x: 0,
  825. y: 10,
  826. controlPointNextX: 0,
  827. controlPointNextY: 10,
  828. skip: true
  829. }
  830. }));
  831. points.push(new Chart.elements.Point({
  832. _datasetindex: 2,
  833. _index: 1,
  834. _view: {
  835. x: 5,
  836. y: 0,
  837. controlPointPreviousX: 5,
  838. controlPointPreviousY: 0,
  839. controlPointNextX: 5,
  840. controlPointNextY: 0,
  841. skip: true
  842. }
  843. }));
  844. points.push(new Chart.elements.Point({
  845. _datasetindex: 2,
  846. _index: 2,
  847. _view: {
  848. x: 15,
  849. y: -10,
  850. controlPointPreviousX: 15,
  851. controlPointPreviousY: -10,
  852. controlPointNextX: 15,
  853. controlPointNextY: -10,
  854. skip: true
  855. }
  856. }));
  857. points.push(new Chart.elements.Point({
  858. _datasetindex: 2,
  859. _index: 3,
  860. _view: {
  861. x: 19,
  862. y: -5,
  863. controlPointPreviousX: 19,
  864. controlPointPreviousY: -5,
  865. controlPointNextX: 19,
  866. controlPointNextY: -5,
  867. skip: true
  868. }
  869. }));
  870. var line = new Chart.elements.Line({
  871. _datasetindex: 2,
  872. _chart: {
  873. ctx: mockContext,
  874. },
  875. _children: points,
  876. // Need to provide some settings
  877. _view: {
  878. fill: true,
  879. tension: 0, // no bezier curve for now
  880. spanGaps: true
  881. }
  882. });
  883. line.draw();
  884. var expected = [{
  885. name: 'save',
  886. args: []
  887. }, {
  888. name: 'setLineCap',
  889. args: ['butt']
  890. }, {
  891. name: 'setLineDash',
  892. args: [
  893. []
  894. ]
  895. }, {
  896. name: 'setLineDashOffset',
  897. args: [0]
  898. }, {
  899. name: 'setLineJoin',
  900. args: ['miter']
  901. }, {
  902. name: 'setLineWidth',
  903. args: [3]
  904. }, {
  905. name: 'setStrokeStyle',
  906. args: ['rgba(0,0,0,0.1)']
  907. }, {
  908. name: 'beginPath',
  909. args: []
  910. }, {
  911. name: 'stroke',
  912. args: []
  913. }, {
  914. name: 'restore',
  915. args: []
  916. }];
  917. expect(mockContext.getCalls()).toEqual(expected);
  918. });
  919. it('should skip the first point correctly', function() {
  920. var mockContext = window.createMockContext();
  921. // Create our points
  922. var points = [];
  923. points.push(new Chart.elements.Point({
  924. _datasetindex: 2,
  925. _index: 0,
  926. _view: {
  927. x: 0,
  928. y: 10,
  929. controlPointNextX: 0,
  930. controlPointNextY: 10,
  931. skip: true
  932. }
  933. }));
  934. points.push(new Chart.elements.Point({
  935. _datasetindex: 2,
  936. _index: 1,
  937. _view: {
  938. x: 5,
  939. y: 0,
  940. controlPointPreviousX: 5,
  941. controlPointPreviousY: 0,
  942. controlPointNextX: 5,
  943. controlPointNextY: 0
  944. }
  945. }));
  946. points.push(new Chart.elements.Point({
  947. _datasetindex: 2,
  948. _index: 2,
  949. _view: {
  950. x: 15,
  951. y: -10,
  952. controlPointPreviousX: 15,
  953. controlPointPreviousY: -10,
  954. controlPointNextX: 15,
  955. controlPointNextY: -10
  956. }
  957. }));
  958. points.push(new Chart.elements.Point({
  959. _datasetindex: 2,
  960. _index: 3,
  961. _view: {
  962. x: 19,
  963. y: -5,
  964. controlPointPreviousX: 19,
  965. controlPointPreviousY: -5,
  966. controlPointNextX: 19,
  967. controlPointNextY: -5
  968. }
  969. }));
  970. var line = new Chart.elements.Line({
  971. _datasetindex: 2,
  972. _chart: {
  973. ctx: mockContext,
  974. },
  975. _children: points,
  976. // Need to provide some settings
  977. _view: {
  978. fill: true,
  979. tension: 0, // no bezier curve for now
  980. }
  981. });
  982. line.draw();
  983. var expected = [{
  984. name: 'save',
  985. args: []
  986. }, {
  987. name: 'setLineCap',
  988. args: ['butt']
  989. }, {
  990. name: 'setLineDash',
  991. args: [
  992. []
  993. ]
  994. }, {
  995. name: 'setLineDashOffset',
  996. args: [0]
  997. }, {
  998. name: 'setLineJoin',
  999. args: ['miter']
  1000. }, {
  1001. name: 'setLineWidth',
  1002. args: [3]
  1003. }, {
  1004. name: 'setStrokeStyle',
  1005. args: ['rgba(0,0,0,0.1)']
  1006. }, {
  1007. name: 'beginPath',
  1008. args: []
  1009. }, {
  1010. name: 'moveTo',
  1011. args: [5, 0]
  1012. }, {
  1013. name: 'lineTo',
  1014. args: [15, -10]
  1015. }, {
  1016. name: 'lineTo',
  1017. args: [19, -5]
  1018. }, {
  1019. name: 'stroke',
  1020. args: []
  1021. }, {
  1022. name: 'restore',
  1023. args: []
  1024. }];
  1025. expect(mockContext.getCalls()).toEqual(expected);
  1026. });
  1027. it('should skip the first point correctly when spanGaps is true', function() {
  1028. var mockContext = window.createMockContext();
  1029. // Create our points
  1030. var points = [];
  1031. points.push(new Chart.elements.Point({
  1032. _datasetindex: 2,
  1033. _index: 0,
  1034. _view: {
  1035. x: 0,
  1036. y: 10,
  1037. controlPointNextX: 0,
  1038. controlPointNextY: 10,
  1039. skip: true
  1040. }
  1041. }));
  1042. points.push(new Chart.elements.Point({
  1043. _datasetindex: 2,
  1044. _index: 1,
  1045. _view: {
  1046. x: 5,
  1047. y: 0,
  1048. controlPointPreviousX: 5,
  1049. controlPointPreviousY: 0,
  1050. controlPointNextX: 5,
  1051. controlPointNextY: 0
  1052. }
  1053. }));
  1054. points.push(new Chart.elements.Point({
  1055. _datasetindex: 2,
  1056. _index: 2,
  1057. _view: {
  1058. x: 15,
  1059. y: -10,
  1060. controlPointPreviousX: 15,
  1061. controlPointPreviousY: -10,
  1062. controlPointNextX: 15,
  1063. controlPointNextY: -10
  1064. }
  1065. }));
  1066. points.push(new Chart.elements.Point({
  1067. _datasetindex: 2,
  1068. _index: 3,
  1069. _view: {
  1070. x: 19,
  1071. y: -5,
  1072. controlPointPreviousX: 19,
  1073. controlPointPreviousY: -5,
  1074. controlPointNextX: 19,
  1075. controlPointNextY: -5
  1076. }
  1077. }));
  1078. var line = new Chart.elements.Line({
  1079. _datasetindex: 2,
  1080. _chart: {
  1081. ctx: mockContext,
  1082. },
  1083. _children: points,
  1084. // Need to provide some settings
  1085. _view: {
  1086. fill: true,
  1087. tension: 0, // no bezier curve for now
  1088. spanGaps: true
  1089. }
  1090. });
  1091. line.draw();
  1092. var expected = [{
  1093. name: 'save',
  1094. args: []
  1095. }, {
  1096. name: 'setLineCap',
  1097. args: ['butt']
  1098. }, {
  1099. name: 'setLineDash',
  1100. args: [
  1101. []
  1102. ]
  1103. }, {
  1104. name: 'setLineDashOffset',
  1105. args: [0]
  1106. }, {
  1107. name: 'setLineJoin',
  1108. args: ['miter']
  1109. }, {
  1110. name: 'setLineWidth',
  1111. args: [3]
  1112. }, {
  1113. name: 'setStrokeStyle',
  1114. args: ['rgba(0,0,0,0.1)']
  1115. }, {
  1116. name: 'beginPath',
  1117. args: []
  1118. }, {
  1119. name: 'moveTo',
  1120. args: [5, 0]
  1121. }, {
  1122. name: 'lineTo',
  1123. args: [15, -10]
  1124. }, {
  1125. name: 'lineTo',
  1126. args: [19, -5]
  1127. }, {
  1128. name: 'stroke',
  1129. args: []
  1130. }, {
  1131. name: 'restore',
  1132. args: []
  1133. }];
  1134. expect(mockContext.getCalls()).toEqual(expected);
  1135. });
  1136. it('should skip the last point correctly', function() {
  1137. var mockContext = window.createMockContext();
  1138. // Create our points
  1139. var points = [];
  1140. points.push(new Chart.elements.Point({
  1141. _datasetindex: 2,
  1142. _index: 0,
  1143. _view: {
  1144. x: 0,
  1145. y: 10,
  1146. controlPointNextX: 0,
  1147. controlPointNextY: 10
  1148. }
  1149. }));
  1150. points.push(new Chart.elements.Point({
  1151. _datasetindex: 2,
  1152. _index: 1,
  1153. _view: {
  1154. x: 5,
  1155. y: 0,
  1156. controlPointPreviousX: 5,
  1157. controlPointPreviousY: 0,
  1158. controlPointNextX: 5,
  1159. controlPointNextY: 0
  1160. }
  1161. }));
  1162. points.push(new Chart.elements.Point({
  1163. _datasetindex: 2,
  1164. _index: 2,
  1165. _view: {
  1166. x: 15,
  1167. y: -10,
  1168. controlPointPreviousX: 15,
  1169. controlPointPreviousY: -10,
  1170. controlPointNextX: 15,
  1171. controlPointNextY: -10
  1172. }
  1173. }));
  1174. points.push(new Chart.elements.Point({
  1175. _datasetindex: 2,
  1176. _index: 3,
  1177. _view: {
  1178. x: 19,
  1179. y: -5,
  1180. controlPointPreviousX: 19,
  1181. controlPointPreviousY: -5,
  1182. controlPointNextX: 19,
  1183. controlPointNextY: -5,
  1184. skip: true
  1185. }
  1186. }));
  1187. var line = new Chart.elements.Line({
  1188. _datasetindex: 2,
  1189. _chart: {
  1190. ctx: mockContext,
  1191. },
  1192. _children: points,
  1193. // Need to provide some settings
  1194. _view: {
  1195. fill: true,
  1196. tension: 0, // no bezier curve for now
  1197. }
  1198. });
  1199. line.draw();
  1200. var expected = [{
  1201. name: 'save',
  1202. args: []
  1203. }, {
  1204. name: 'setLineCap',
  1205. args: ['butt']
  1206. }, {
  1207. name: 'setLineDash',
  1208. args: [
  1209. []
  1210. ]
  1211. }, {
  1212. name: 'setLineDashOffset',
  1213. args: [0]
  1214. }, {
  1215. name: 'setLineJoin',
  1216. args: ['miter']
  1217. }, {
  1218. name: 'setLineWidth',
  1219. args: [3]
  1220. }, {
  1221. name: 'setStrokeStyle',
  1222. args: ['rgba(0,0,0,0.1)']
  1223. }, {
  1224. name: 'beginPath',
  1225. args: []
  1226. }, {
  1227. name: 'moveTo',
  1228. args: [0, 10]
  1229. }, {
  1230. name: 'lineTo',
  1231. args: [5, 0]
  1232. }, {
  1233. name: 'lineTo',
  1234. args: [15, -10]
  1235. }, {
  1236. name: 'stroke',
  1237. args: []
  1238. }, {
  1239. name: 'restore',
  1240. args: []
  1241. }];
  1242. expect(mockContext.getCalls()).toEqual(expected);
  1243. });
  1244. it('should skip the last point correctly when spanGaps is true', function() {
  1245. var mockContext = window.createMockContext();
  1246. // Create our points
  1247. var points = [];
  1248. points.push(new Chart.elements.Point({
  1249. _datasetindex: 2,
  1250. _index: 0,
  1251. _view: {
  1252. x: 0,
  1253. y: 10,
  1254. controlPointNextX: 0,
  1255. controlPointNextY: 10
  1256. }
  1257. }));
  1258. points.push(new Chart.elements.Point({
  1259. _datasetindex: 2,
  1260. _index: 1,
  1261. _view: {
  1262. x: 5,
  1263. y: 0,
  1264. controlPointPreviousX: 5,
  1265. controlPointPreviousY: 0,
  1266. controlPointNextX: 5,
  1267. controlPointNextY: 0
  1268. }
  1269. }));
  1270. points.push(new Chart.elements.Point({
  1271. _datasetindex: 2,
  1272. _index: 2,
  1273. _view: {
  1274. x: 15,
  1275. y: -10,
  1276. controlPointPreviousX: 15,
  1277. controlPointPreviousY: -10,
  1278. controlPointNextX: 15,
  1279. controlPointNextY: -10
  1280. }
  1281. }));
  1282. points.push(new Chart.elements.Point({
  1283. _datasetindex: 2,
  1284. _index: 3,
  1285. _view: {
  1286. x: 19,
  1287. y: -5,
  1288. controlPointPreviousX: 19,
  1289. controlPointPreviousY: -5,
  1290. controlPointNextX: 19,
  1291. controlPointNextY: -5,
  1292. skip: true
  1293. }
  1294. }));
  1295. var line = new Chart.elements.Line({
  1296. _datasetindex: 2,
  1297. _chart: {
  1298. ctx: mockContext,
  1299. },
  1300. _children: points,
  1301. // Need to provide some settings
  1302. _view: {
  1303. fill: true,
  1304. tension: 0, // no bezier curve for now
  1305. spanGaps: true
  1306. }
  1307. });
  1308. line.draw();
  1309. var expected = [{
  1310. name: 'save',
  1311. args: []
  1312. }, {
  1313. name: 'setLineCap',
  1314. args: ['butt']
  1315. }, {
  1316. name: 'setLineDash',
  1317. args: [
  1318. []
  1319. ]
  1320. }, {
  1321. name: 'setLineDashOffset',
  1322. args: [0]
  1323. }, {
  1324. name: 'setLineJoin',
  1325. args: ['miter']
  1326. }, {
  1327. name: 'setLineWidth',
  1328. args: [3]
  1329. }, {
  1330. name: 'setStrokeStyle',
  1331. args: ['rgba(0,0,0,0.1)']
  1332. }, {
  1333. name: 'beginPath',
  1334. args: []
  1335. }, {
  1336. name: 'moveTo',
  1337. args: [0, 10]
  1338. }, {
  1339. name: 'lineTo',
  1340. args: [5, 0]
  1341. }, {
  1342. name: 'lineTo',
  1343. args: [15, -10]
  1344. }, {
  1345. name: 'stroke',
  1346. args: []
  1347. }, {
  1348. name: 'restore',
  1349. args: []
  1350. }];
  1351. expect(mockContext.getCalls()).toEqual(expected);
  1352. });
  1353. it('should be able to draw with a loop back to the beginning point', function() {
  1354. var mockContext = window.createMockContext();
  1355. // Create our points
  1356. var points = [];
  1357. points.push(new Chart.elements.Point({
  1358. _datasetindex: 2,
  1359. _index: 0,
  1360. _view: {
  1361. x: 0,
  1362. y: 10,
  1363. controlPointPreviousX: 0,
  1364. controlPointPreviousY: 10,
  1365. controlPointNextX: 0,
  1366. controlPointNextY: 10
  1367. }
  1368. }));
  1369. points.push(new Chart.elements.Point({
  1370. _datasetindex: 2,
  1371. _index: 1,
  1372. _view: {
  1373. x: 5,
  1374. y: 0,
  1375. controlPointPreviousX: 5,
  1376. controlPointPreviousY: 0,
  1377. controlPointNextX: 5,
  1378. controlPointNextY: 0
  1379. }
  1380. }));
  1381. points.push(new Chart.elements.Point({
  1382. _datasetindex: 2,
  1383. _index: 2,
  1384. _view: {
  1385. x: 15,
  1386. y: -10,
  1387. controlPointPreviousX: 15,
  1388. controlPointPreviousY: -10,
  1389. controlPointNextX: 15,
  1390. controlPointNextY: -10
  1391. }
  1392. }));
  1393. points.push(new Chart.elements.Point({
  1394. _datasetindex: 2,
  1395. _index: 3,
  1396. _view: {
  1397. x: 19,
  1398. y: -5,
  1399. controlPointPreviousX: 19,
  1400. controlPointPreviousY: -5,
  1401. controlPointNextX: 19,
  1402. controlPointNextY: -5
  1403. }
  1404. }));
  1405. var line = new Chart.elements.Line({
  1406. _datasetindex: 2,
  1407. _chart: {
  1408. ctx: mockContext,
  1409. },
  1410. _children: points,
  1411. _loop: true, // want the line to loop back to the first point
  1412. // Need to provide some settings
  1413. _view: {
  1414. fill: true, // don't want to fill
  1415. tension: 0, // no bezier curve for now
  1416. }
  1417. });
  1418. line.draw();
  1419. expect(mockContext.getCalls()).toEqual([{
  1420. name: 'save',
  1421. args: [],
  1422. }, {
  1423. name: 'setLineCap',
  1424. args: ['butt']
  1425. }, {
  1426. name: 'setLineDash',
  1427. args: [
  1428. []
  1429. ]
  1430. }, {
  1431. name: 'setLineDashOffset',
  1432. args: [0.0]
  1433. }, {
  1434. name: 'setLineJoin',
  1435. args: ['miter']
  1436. }, {
  1437. name: 'setLineWidth',
  1438. args: [3]
  1439. }, {
  1440. name: 'setStrokeStyle',
  1441. args: ['rgba(0,0,0,0.1)']
  1442. }, {
  1443. name: 'beginPath',
  1444. args: []
  1445. }, {
  1446. name: 'moveTo',
  1447. args: [0, 10]
  1448. }, {
  1449. name: 'lineTo',
  1450. args: [5, 0]
  1451. }, {
  1452. name: 'lineTo',
  1453. args: [15, -10]
  1454. }, {
  1455. name: 'lineTo',
  1456. args: [19, -5]
  1457. }, {
  1458. name: 'lineTo',
  1459. args: [0, 10]
  1460. }, {
  1461. name: 'stroke',
  1462. args: [],
  1463. }, {
  1464. name: 'restore',
  1465. args: []
  1466. }]);
  1467. });
  1468. it('should be able to draw with a loop back to the beginning point when there is a skip in the middle of the dataset', function() {
  1469. var mockContext = window.createMockContext();
  1470. // Create our points
  1471. var points = [];
  1472. points.push(new Chart.elements.Point({
  1473. _datasetindex: 2,
  1474. _index: 0,
  1475. _view: {
  1476. x: 0,
  1477. y: 10,
  1478. controlPointPreviousX: 0,
  1479. controlPointPreviousY: 10,
  1480. controlPointNextX: 0,
  1481. controlPointNextY: 10
  1482. }
  1483. }));
  1484. points.push(new Chart.elements.Point({
  1485. _datasetindex: 2,
  1486. _index: 1,
  1487. _view: {
  1488. x: 5,
  1489. y: 0,
  1490. controlPointPreviousX: 5,
  1491. controlPointPreviousY: 0,
  1492. controlPointNextX: 5,
  1493. controlPointNextY: 0,
  1494. skip: true
  1495. }
  1496. }));
  1497. points.push(new Chart.elements.Point({
  1498. _datasetindex: 2,
  1499. _index: 2,
  1500. _view: {
  1501. x: 15,
  1502. y: -10,
  1503. controlPointPreviousX: 15,
  1504. controlPointPreviousY: -10,
  1505. controlPointNextX: 15,
  1506. controlPointNextY: -10
  1507. }
  1508. }));
  1509. points.push(new Chart.elements.Point({
  1510. _datasetindex: 2,
  1511. _index: 3,
  1512. _view: {
  1513. x: 19,
  1514. y: -5,
  1515. controlPointPreviousX: 19,
  1516. controlPointPreviousY: -5,
  1517. controlPointNextX: 19,
  1518. controlPointNextY: -5
  1519. }
  1520. }));
  1521. var line = new Chart.elements.Line({
  1522. _datasetindex: 2,
  1523. _chart: {
  1524. ctx: mockContext,
  1525. },
  1526. _children: points,
  1527. _loop: true, // want the line to loop back to the first point
  1528. // Need to provide some settings
  1529. _view: {
  1530. fill: true, // don't want to fill
  1531. tension: 0, // no bezier curve for now
  1532. }
  1533. });
  1534. line.draw();
  1535. expect(mockContext.getCalls()).toEqual([{
  1536. name: 'save',
  1537. args: [],
  1538. }, {
  1539. name: 'setLineCap',
  1540. args: ['butt']
  1541. }, {
  1542. name: 'setLineDash',
  1543. args: [
  1544. []
  1545. ]
  1546. }, {
  1547. name: 'setLineDashOffset',
  1548. args: [0.0]
  1549. }, {
  1550. name: 'setLineJoin',
  1551. args: ['miter']
  1552. }, {
  1553. name: 'setLineWidth',
  1554. args: [3]
  1555. }, {
  1556. name: 'setStrokeStyle',
  1557. args: ['rgba(0,0,0,0.1)']
  1558. }, {
  1559. name: 'beginPath',
  1560. args: []
  1561. }, {
  1562. name: 'moveTo',
  1563. args: [0, 10]
  1564. }, {
  1565. name: 'moveTo',
  1566. args: [15, -10]
  1567. }, {
  1568. name: 'lineTo',
  1569. args: [19, -5]
  1570. }, {
  1571. name: 'lineTo',
  1572. args: [0, 10]
  1573. }, {
  1574. name: 'stroke',
  1575. args: [],
  1576. }, {
  1577. name: 'restore',
  1578. args: []
  1579. }]);
  1580. });
  1581. it('should be able to draw with a loop back to the beginning point when span gaps is true and there is a skip in the middle of the dataset', function() {
  1582. var mockContext = window.createMockContext();
  1583. // Create our points
  1584. var points = [];
  1585. points.push(new Chart.elements.Point({
  1586. _datasetindex: 2,
  1587. _index: 0,
  1588. _view: {
  1589. x: 0,
  1590. y: 10,
  1591. controlPointPreviousX: 0,
  1592. controlPointPreviousY: 10,
  1593. controlPointNextX: 0,
  1594. controlPointNextY: 10
  1595. }
  1596. }));
  1597. points.push(new Chart.elements.Point({
  1598. _datasetindex: 2,
  1599. _index: 1,
  1600. _view: {
  1601. x: 5,
  1602. y: 0,
  1603. controlPointPreviousX: 5,
  1604. controlPointPreviousY: 0,
  1605. controlPointNextX: 5,
  1606. controlPointNextY: 0,
  1607. skip: true
  1608. }
  1609. }));
  1610. points.push(new Chart.elements.Point({
  1611. _datasetindex: 2,
  1612. _index: 2,
  1613. _view: {
  1614. x: 15,
  1615. y: -10,
  1616. controlPointPreviousX: 15,
  1617. controlPointPreviousY: -10,
  1618. controlPointNextX: 15,
  1619. controlPointNextY: -10
  1620. }
  1621. }));
  1622. points.push(new Chart.elements.Point({
  1623. _datasetindex: 2,
  1624. _index: 3,
  1625. _view: {
  1626. x: 19,
  1627. y: -5,
  1628. controlPointPreviousX: 19,
  1629. controlPointPreviousY: -5,
  1630. controlPointNextX: 19,
  1631. controlPointNextY: -5
  1632. }
  1633. }));
  1634. var line = new Chart.elements.Line({
  1635. _datasetindex: 2,
  1636. _chart: {
  1637. ctx: mockContext,
  1638. },
  1639. _children: points,
  1640. _loop: true, // want the line to loop back to the first point
  1641. // Need to provide some settings
  1642. _view: {
  1643. fill: true, // don't want to fill
  1644. tension: 0, // no bezier curve for now
  1645. spanGaps: true
  1646. }
  1647. });
  1648. line.draw();
  1649. expect(mockContext.getCalls()).toEqual([{
  1650. name: 'save',
  1651. args: [],
  1652. }, {
  1653. name: 'setLineCap',
  1654. args: ['butt']
  1655. }, {
  1656. name: 'setLineDash',
  1657. args: [
  1658. []
  1659. ]
  1660. }, {
  1661. name: 'setLineDashOffset',
  1662. args: [0.0]
  1663. }, {
  1664. name: 'setLineJoin',
  1665. args: ['miter']
  1666. }, {
  1667. name: 'setLineWidth',
  1668. args: [3]
  1669. }, {
  1670. name: 'setStrokeStyle',
  1671. args: ['rgba(0,0,0,0.1)']
  1672. }, {
  1673. name: 'beginPath',
  1674. args: []
  1675. }, {
  1676. name: 'moveTo',
  1677. args: [0, 10]
  1678. }, {
  1679. name: 'lineTo',
  1680. args: [15, -10]
  1681. }, {
  1682. name: 'lineTo',
  1683. args: [19, -5]
  1684. }, {
  1685. name: 'lineTo',
  1686. args: [0, 10]
  1687. }, {
  1688. name: 'stroke',
  1689. args: [],
  1690. }, {
  1691. name: 'restore',
  1692. args: []
  1693. }]);
  1694. });
  1695. it('should be able to draw with a loop back to the beginning point when the first point is skipped', function() {
  1696. var mockContext = window.createMockContext();
  1697. // Create our points
  1698. var points = [];
  1699. points.push(new Chart.elements.Point({
  1700. _datasetindex: 2,
  1701. _index: 0,
  1702. _view: {
  1703. x: 0,
  1704. y: 10,
  1705. controlPointPreviousX: 0,
  1706. controlPointPreviousY: 10,
  1707. controlPointNextX: 0,
  1708. controlPointNextY: 10,
  1709. skip: true
  1710. }
  1711. }));
  1712. points.push(new Chart.elements.Point({
  1713. _datasetindex: 2,
  1714. _index: 1,
  1715. _view: {
  1716. x: 5,
  1717. y: 0,
  1718. controlPointPreviousX: 5,
  1719. controlPointPreviousY: 0,
  1720. controlPointNextX: 5,
  1721. controlPointNextY: 0,
  1722. }
  1723. }));
  1724. points.push(new Chart.elements.Point({
  1725. _datasetindex: 2,
  1726. _index: 2,
  1727. _view: {
  1728. x: 15,
  1729. y: -10,
  1730. controlPointPreviousX: 15,
  1731. controlPointPreviousY: -10,
  1732. controlPointNextX: 15,
  1733. controlPointNextY: -10
  1734. }
  1735. }));
  1736. points.push(new Chart.elements.Point({
  1737. _datasetindex: 2,
  1738. _index: 3,
  1739. _view: {
  1740. x: 19,
  1741. y: -5,
  1742. controlPointPreviousX: 19,
  1743. controlPointPreviousY: -5,
  1744. controlPointNextX: 19,
  1745. controlPointNextY: -5
  1746. }
  1747. }));
  1748. var line = new Chart.elements.Line({
  1749. _datasetindex: 2,
  1750. _chart: {
  1751. ctx: mockContext,
  1752. },
  1753. _children: points,
  1754. _loop: true, // want the line to loop back to the first point
  1755. // Need to provide some settings
  1756. _view: {
  1757. fill: true, // don't want to fill
  1758. tension: 0, // no bezier curve for now
  1759. }
  1760. });
  1761. line.draw();
  1762. expect(mockContext.getCalls()).toEqual([{
  1763. name: 'save',
  1764. args: [],
  1765. }, {
  1766. name: 'setLineCap',
  1767. args: ['butt']
  1768. }, {
  1769. name: 'setLineDash',
  1770. args: [
  1771. []
  1772. ]
  1773. }, {
  1774. name: 'setLineDashOffset',
  1775. args: [0.0]
  1776. }, {
  1777. name: 'setLineJoin',
  1778. args: ['miter']
  1779. }, {
  1780. name: 'setLineWidth',
  1781. args: [3]
  1782. }, {
  1783. name: 'setStrokeStyle',
  1784. args: ['rgba(0,0,0,0.1)']
  1785. }, {
  1786. name: 'beginPath',
  1787. args: []
  1788. }, {
  1789. name: 'moveTo',
  1790. args: [5, 0]
  1791. }, {
  1792. name: 'lineTo',
  1793. args: [15, -10]
  1794. }, {
  1795. name: 'lineTo',
  1796. args: [19, -5]
  1797. }, {
  1798. name: 'stroke',
  1799. args: [],
  1800. }, {
  1801. name: 'restore',
  1802. args: []
  1803. }]);
  1804. });
  1805. it('should be able to draw with a loop back to the beginning point when the last point is skipped', function() {
  1806. var mockContext = window.createMockContext();
  1807. // Create our points
  1808. var points = [];
  1809. points.push(new Chart.elements.Point({
  1810. _datasetindex: 2,
  1811. _index: 0,
  1812. _view: {
  1813. x: 0,
  1814. y: 10,
  1815. controlPointPreviousX: 0,
  1816. controlPointPreviousY: 10,
  1817. controlPointNextX: 0,
  1818. controlPointNextY: 10
  1819. }
  1820. }));
  1821. points.push(new Chart.elements.Point({
  1822. _datasetindex: 2,
  1823. _index: 1,
  1824. _view: {
  1825. x: 5,
  1826. y: 0,
  1827. controlPointPreviousX: 5,
  1828. controlPointPreviousY: 0,
  1829. controlPointNextX: 5,
  1830. controlPointNextY: 0,
  1831. }
  1832. }));
  1833. points.push(new Chart.elements.Point({
  1834. _datasetindex: 2,
  1835. _index: 2,
  1836. _view: {
  1837. x: 15,
  1838. y: -10,
  1839. controlPointPreviousX: 15,
  1840. controlPointPreviousY: -10,
  1841. controlPointNextX: 15,
  1842. controlPointNextY: -10
  1843. }
  1844. }));
  1845. points.push(new Chart.elements.Point({
  1846. _datasetindex: 2,
  1847. _index: 3,
  1848. _view: {
  1849. x: 19,
  1850. y: -5,
  1851. controlPointPreviousX: 19,
  1852. controlPointPreviousY: -5,
  1853. controlPointNextX: 19,
  1854. controlPointNextY: -5,
  1855. skip: true
  1856. }
  1857. }));
  1858. var line = new Chart.elements.Line({
  1859. _datasetindex: 2,
  1860. _chart: {
  1861. ctx: mockContext,
  1862. },
  1863. _children: points,
  1864. _loop: true, // want the line to loop back to the first point
  1865. // Need to provide some settings
  1866. _view: {
  1867. fill: true, // don't want to fill
  1868. tension: 0, // no bezier curve for now
  1869. }
  1870. });
  1871. line.draw();
  1872. expect(mockContext.getCalls()).toEqual([{
  1873. name: 'save',
  1874. args: [],
  1875. }, {
  1876. name: 'setLineCap',
  1877. args: ['butt']
  1878. }, {
  1879. name: 'setLineDash',
  1880. args: [
  1881. []
  1882. ]
  1883. }, {
  1884. name: 'setLineDashOffset',
  1885. args: [0.0]
  1886. }, {
  1887. name: 'setLineJoin',
  1888. args: ['miter']
  1889. }, {
  1890. name: 'setLineWidth',
  1891. args: [3]
  1892. }, {
  1893. name: 'setStrokeStyle',
  1894. args: ['rgba(0,0,0,0.1)']
  1895. }, {
  1896. name: 'beginPath',
  1897. args: []
  1898. }, {
  1899. name: 'moveTo',
  1900. args: [0, 10]
  1901. }, {
  1902. name: 'lineTo',
  1903. args: [5, 0]
  1904. }, {
  1905. name: 'lineTo',
  1906. args: [15, -10]
  1907. }, {
  1908. name: 'moveTo',
  1909. args: [0, 10]
  1910. }, {
  1911. name: 'stroke',
  1912. args: [],
  1913. }, {
  1914. name: 'restore',
  1915. args: []
  1916. }]);
  1917. });
  1918. });