core.interaction.tests.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. // Tests of the interaction handlers in Core.Interaction
  2. // Test the rectangle element
  3. describe('Core.Interaction', function() {
  4. describe('point mode', function() {
  5. beforeEach(function() {
  6. this.chart = window.acquireChart({
  7. type: 'line',
  8. data: {
  9. datasets: [{
  10. label: 'Dataset 1',
  11. data: [10, 20, 30],
  12. pointHoverBorderColor: 'rgb(255, 0, 0)',
  13. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  14. }, {
  15. label: 'Dataset 2',
  16. data: [40, 20, 40],
  17. pointHoverBorderColor: 'rgb(0, 0, 255)',
  18. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  19. }],
  20. labels: ['Point 1', 'Point 2', 'Point 3']
  21. }
  22. });
  23. });
  24. it ('should return all items under the point', function() {
  25. var chart = this.chart;
  26. var meta0 = chart.getDatasetMeta(0);
  27. var meta1 = chart.getDatasetMeta(1);
  28. var point = meta0.data[1];
  29. var evt = {
  30. type: 'click',
  31. chart: chart,
  32. native: true, // needed otherwise things its a DOM event
  33. x: point._model.x,
  34. y: point._model.y,
  35. };
  36. var elements = Chart.Interaction.modes.point(chart, evt);
  37. expect(elements).toEqual([point, meta1.data[1]]);
  38. });
  39. it ('should return an empty array when no items are found', function() {
  40. var chart = this.chart;
  41. var evt = {
  42. type: 'click',
  43. chart: chart,
  44. native: true, // needed otherwise things its a DOM event
  45. x: 0,
  46. y: 0
  47. };
  48. var elements = Chart.Interaction.modes.point(chart, evt);
  49. expect(elements).toEqual([]);
  50. });
  51. });
  52. describe('index mode', function() {
  53. describe('intersect: true', function() {
  54. beforeEach(function() {
  55. this.chart = window.acquireChart({
  56. type: 'line',
  57. data: {
  58. datasets: [{
  59. label: 'Dataset 1',
  60. data: [10, 20, 30],
  61. pointHoverBorderColor: 'rgb(255, 0, 0)',
  62. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  63. }, {
  64. label: 'Dataset 2',
  65. data: [40, 40, 40],
  66. pointHoverBorderColor: 'rgb(0, 0, 255)',
  67. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  68. }],
  69. labels: ['Point 1', 'Point 2', 'Point 3']
  70. }
  71. });
  72. });
  73. it ('gets correct items', function() {
  74. var chart = this.chart;
  75. var meta0 = chart.getDatasetMeta(0);
  76. var meta1 = chart.getDatasetMeta(1);
  77. var point = meta0.data[1];
  78. var evt = {
  79. type: 'click',
  80. chart: chart,
  81. native: true, // needed otherwise things its a DOM event
  82. x: point._model.x,
  83. y: point._model.y,
  84. };
  85. var elements = Chart.Interaction.modes.index(chart, evt, {intersect: true});
  86. expect(elements).toEqual([point, meta1.data[1]]);
  87. });
  88. it ('returns empty array when nothing found', function() {
  89. var chart = this.chart;
  90. var evt = {
  91. type: 'click',
  92. chart: chart,
  93. native: true, // needed otherwise things its a DOM event
  94. x: 0,
  95. y: 0,
  96. };
  97. var elements = Chart.Interaction.modes.index(chart, evt, {intersect: true});
  98. expect(elements).toEqual([]);
  99. });
  100. });
  101. describe ('intersect: false', function() {
  102. var data = {
  103. datasets: [{
  104. label: 'Dataset 1',
  105. data: [10, 20, 30],
  106. pointHoverBorderColor: 'rgb(255, 0, 0)',
  107. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  108. }, {
  109. label: 'Dataset 2',
  110. data: [40, 40, 40],
  111. pointHoverBorderColor: 'rgb(0, 0, 255)',
  112. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  113. }],
  114. labels: ['Point 1', 'Point 2', 'Point 3']
  115. };
  116. beforeEach(function() {
  117. this.chart = window.acquireChart({
  118. type: 'line',
  119. data: data
  120. });
  121. });
  122. it ('axis: x gets correct items', function() {
  123. var chart = this.chart;
  124. var meta0 = chart.getDatasetMeta(0);
  125. var meta1 = chart.getDatasetMeta(1);
  126. var evt = {
  127. type: 'click',
  128. chart: chart,
  129. native: true, // needed otherwise things its a DOM event
  130. x: 0,
  131. y: 0
  132. };
  133. var elements = Chart.Interaction.modes.index(chart, evt, {intersect: false});
  134. expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
  135. });
  136. it ('axis: y gets correct items', function() {
  137. var chart = window.acquireChart({
  138. type: 'horizontalBar',
  139. data: data
  140. });
  141. var meta0 = chart.getDatasetMeta(0);
  142. var meta1 = chart.getDatasetMeta(1);
  143. var center = meta0.data[0].getCenterPoint();
  144. var evt = {
  145. type: 'click',
  146. chart: chart,
  147. native: true, // needed otherwise things its a DOM event
  148. x: center.x,
  149. y: center.y + 30,
  150. };
  151. var elements = Chart.Interaction.modes.index(chart, evt, {axis: 'y', intersect: false});
  152. expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
  153. });
  154. it ('axis: xy gets correct items', function() {
  155. var chart = this.chart;
  156. var meta0 = chart.getDatasetMeta(0);
  157. var meta1 = chart.getDatasetMeta(1);
  158. var evt = {
  159. type: 'click',
  160. chart: chart,
  161. native: true, // needed otherwise things its a DOM event
  162. x: 0,
  163. y: 0
  164. };
  165. var elements = Chart.Interaction.modes.index(chart, evt, {axis: 'xy', intersect: false});
  166. expect(elements).toEqual([meta0.data[0], meta1.data[0]]);
  167. });
  168. });
  169. });
  170. describe('dataset mode', function() {
  171. describe('intersect: true', function() {
  172. beforeEach(function() {
  173. this.chart = window.acquireChart({
  174. type: 'line',
  175. data: {
  176. datasets: [{
  177. label: 'Dataset 1',
  178. data: [10, 20, 30],
  179. pointHoverBorderColor: 'rgb(255, 0, 0)',
  180. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  181. }, {
  182. label: 'Dataset 2',
  183. data: [40, 40, 40],
  184. pointHoverBorderColor: 'rgb(0, 0, 255)',
  185. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  186. }],
  187. labels: ['Point 1', 'Point 2', 'Point 3']
  188. }
  189. });
  190. });
  191. it ('should return all items in the dataset of the first item found', function() {
  192. var chart = this.chart;
  193. var meta = chart.getDatasetMeta(0);
  194. var point = meta.data[1];
  195. var evt = {
  196. type: 'click',
  197. chart: chart,
  198. native: true, // needed otherwise things its a DOM event
  199. x: point._model.x,
  200. y: point._model.y
  201. };
  202. var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true});
  203. expect(elements).toEqual(meta.data);
  204. });
  205. it ('should return an empty array if nothing found', function() {
  206. var chart = this.chart;
  207. var evt = {
  208. type: 'click',
  209. chart: chart,
  210. native: true, // needed otherwise things its a DOM event
  211. x: 0,
  212. y: 0
  213. };
  214. var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: true});
  215. expect(elements).toEqual([]);
  216. });
  217. });
  218. describe('intersect: false', function() {
  219. var data = {
  220. datasets: [{
  221. label: 'Dataset 1',
  222. data: [10, 20, 30],
  223. pointHoverBorderColor: 'rgb(255, 0, 0)',
  224. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  225. }, {
  226. label: 'Dataset 2',
  227. data: [40, 40, 40],
  228. pointHoverBorderColor: 'rgb(0, 0, 255)',
  229. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  230. }],
  231. labels: ['Point 1', 'Point 2', 'Point 3']
  232. };
  233. beforeEach(function() {
  234. this.chart = window.acquireChart({
  235. type: 'line',
  236. data: data
  237. });
  238. });
  239. it ('axis: x gets correct items', function() {
  240. var chart = window.acquireChart({
  241. type: 'horizontalBar',
  242. data: data
  243. });
  244. var evt = {
  245. type: 'click',
  246. chart: chart,
  247. native: true, // needed otherwise things its a DOM event
  248. x: 0,
  249. y: 0
  250. };
  251. var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'x', intersect: false});
  252. var meta = chart.getDatasetMeta(0);
  253. expect(elements).toEqual(meta.data);
  254. });
  255. it ('axis: y gets correct items', function() {
  256. var chart = this.chart;
  257. var evt = {
  258. type: 'click',
  259. chart: chart,
  260. native: true, // needed otherwise things its a DOM event
  261. x: 0,
  262. y: 0
  263. };
  264. var elements = Chart.Interaction.modes.dataset(chart, evt, {axis: 'y', intersect: false});
  265. var meta = chart.getDatasetMeta(1);
  266. expect(elements).toEqual(meta.data);
  267. });
  268. it ('axis: xy gets correct items', function() {
  269. var chart = this.chart;
  270. var evt = {
  271. type: 'click',
  272. chart: chart,
  273. native: true, // needed otherwise things its a DOM event
  274. x: 0,
  275. y: 0
  276. };
  277. var elements = Chart.Interaction.modes.dataset(chart, evt, {intersect: false});
  278. var meta = chart.getDatasetMeta(1);
  279. expect(elements).toEqual(meta.data);
  280. });
  281. });
  282. });
  283. describe('nearest mode', function() {
  284. describe('intersect: false', function() {
  285. beforeEach(function() {
  286. this.chart = window.acquireChart({
  287. type: 'line',
  288. data: {
  289. datasets: [{
  290. label: 'Dataset 1',
  291. data: [10, 40, 30],
  292. pointRadius: [5, 5, 5],
  293. pointHoverBorderColor: 'rgb(255, 0, 0)',
  294. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  295. }, {
  296. label: 'Dataset 2',
  297. data: [40, 40, 40],
  298. pointRadius: [10, 10, 10],
  299. pointHoverBorderColor: 'rgb(0, 0, 255)',
  300. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  301. }],
  302. labels: ['Point 1', 'Point 2', 'Point 3']
  303. }
  304. });
  305. });
  306. it ('axis: xy should return the nearest item', function() {
  307. var chart = this.chart;
  308. var evt = {
  309. type: 'click',
  310. chart: chart,
  311. native: true, // needed otherwise things its a DOM event
  312. x: 0,
  313. y: 0
  314. };
  315. // Nearest to 0,0 (top left) will be first point of dataset 2
  316. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
  317. var meta = chart.getDatasetMeta(1);
  318. expect(elements).toEqual([meta.data[0]]);
  319. });
  320. it ('should return the smallest item if more than 1 are at the same distance', function() {
  321. var chart = this.chart;
  322. var meta0 = chart.getDatasetMeta(0);
  323. var meta1 = chart.getDatasetMeta(1);
  324. // Halfway between 2 mid points
  325. var pt = {
  326. x: meta0.data[1]._view.x,
  327. y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
  328. };
  329. var evt = {
  330. type: 'click',
  331. chart: chart,
  332. native: true, // needed otherwise things its a DOM event
  333. x: pt.x,
  334. y: pt.y
  335. };
  336. // Nearest to 0,0 (top left) will be first point of dataset 2
  337. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
  338. expect(elements).toEqual([meta0.data[1]]);
  339. });
  340. it ('should return the lowest dataset index if size and area are the same', function() {
  341. var chart = this.chart;
  342. // Make equal sized points at index: 1
  343. chart.data.datasets[0].pointRadius[1] = 10;
  344. chart.update();
  345. // Trigger an event over top of the
  346. var meta0 = chart.getDatasetMeta(0);
  347. var meta1 = chart.getDatasetMeta(1);
  348. // Halfway between 2 mid points
  349. var pt = {
  350. x: meta0.data[1]._view.x,
  351. y: (meta0.data[1]._view.y + meta1.data[1]._view.y) / 2
  352. };
  353. var evt = {
  354. type: 'click',
  355. chart: chart,
  356. native: true, // needed otherwise things its a DOM event
  357. x: pt.x,
  358. y: pt.y
  359. };
  360. // Nearest to 0,0 (top left) will be first point of dataset 2
  361. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: false});
  362. expect(elements).toEqual([meta0.data[1]]);
  363. });
  364. });
  365. describe('intersect: true', function() {
  366. beforeEach(function() {
  367. this.chart = window.acquireChart({
  368. type: 'line',
  369. data: {
  370. datasets: [{
  371. label: 'Dataset 1',
  372. data: [10, 20, 30],
  373. pointHoverBorderColor: 'rgb(255, 0, 0)',
  374. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  375. }, {
  376. label: 'Dataset 2',
  377. data: [40, 40, 40],
  378. pointHoverBorderColor: 'rgb(0, 0, 255)',
  379. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  380. }],
  381. labels: ['Point 1', 'Point 2', 'Point 3']
  382. }
  383. });
  384. });
  385. it ('should return the nearest item', function() {
  386. var chart = this.chart;
  387. var meta = chart.getDatasetMeta(1);
  388. var point = meta.data[1];
  389. var evt = {
  390. type: 'click',
  391. chart: chart,
  392. native: true, // needed otherwise things its a DOM event
  393. x: point._view.x + 15,
  394. y: point._view.y
  395. };
  396. // Nothing intersects so find nothing
  397. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
  398. expect(elements).toEqual([]);
  399. evt = {
  400. type: 'click',
  401. chart: chart,
  402. native: true,
  403. x: point._view.x,
  404. y: point._view.y
  405. };
  406. elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
  407. expect(elements).toEqual([point]);
  408. });
  409. it ('should return the nearest item even if 2 intersect', function() {
  410. var chart = this.chart;
  411. chart.data.datasets[0].pointRadius = [5, 30, 5];
  412. chart.data.datasets[0].data[1] = 39;
  413. chart.data.datasets[1].pointRadius = [10, 10, 10];
  414. // Trigger an event over top of the
  415. var meta0 = chart.getDatasetMeta(0);
  416. // Halfway between 2 mid points
  417. var pt = {
  418. x: meta0.data[1]._view.x,
  419. y: meta0.data[1]._view.y
  420. };
  421. var evt = {
  422. type: 'click',
  423. chart: chart,
  424. native: true, // needed otherwise things its a DOM event
  425. x: pt.x,
  426. y: pt.y
  427. };
  428. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
  429. expect(elements).toEqual([meta0.data[1]]);
  430. });
  431. it ('should return the smallest item if more than 1 are at the same distance', function() {
  432. var chart = this.chart;
  433. chart.data.datasets[0].pointRadius = [5, 5, 5];
  434. chart.data.datasets[0].data[1] = 40;
  435. chart.data.datasets[1].pointRadius = [10, 10, 10];
  436. // Trigger an event over top of the
  437. var meta0 = chart.getDatasetMeta(0);
  438. // Halfway between 2 mid points
  439. var pt = {
  440. x: meta0.data[1]._view.x,
  441. y: meta0.data[1]._view.y
  442. };
  443. var evt = {
  444. type: 'click',
  445. chart: chart,
  446. native: true, // needed otherwise things its a DOM event
  447. x: pt.x,
  448. y: pt.y
  449. };
  450. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
  451. expect(elements).toEqual([meta0.data[1]]);
  452. });
  453. it ('should return the item at the lowest dataset index if distance and area are the same', function() {
  454. var chart = this.chart;
  455. chart.data.datasets[0].pointRadius = [5, 10, 5];
  456. chart.data.datasets[0].data[1] = 40;
  457. chart.data.datasets[1].pointRadius = [10, 10, 10];
  458. // Trigger an event over top of the
  459. var meta0 = chart.getDatasetMeta(0);
  460. // Halfway between 2 mid points
  461. var pt = {
  462. x: meta0.data[1]._view.x,
  463. y: meta0.data[1]._view.y
  464. };
  465. var evt = {
  466. type: 'click',
  467. chart: chart,
  468. native: true, // needed otherwise things its a DOM event
  469. x: pt.x,
  470. y: pt.y
  471. };
  472. // Nearest to 0,0 (top left) will be first point of dataset 2
  473. var elements = Chart.Interaction.modes.nearest(chart, evt, {intersect: true});
  474. expect(elements).toEqual([meta0.data[1]]);
  475. });
  476. });
  477. });
  478. describe('x mode', function() {
  479. beforeEach(function() {
  480. this.chart = window.acquireChart({
  481. type: 'line',
  482. data: {
  483. datasets: [{
  484. label: 'Dataset 1',
  485. data: [10, 40, 30],
  486. pointRadius: [5, 10, 5],
  487. pointHoverBorderColor: 'rgb(255, 0, 0)',
  488. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  489. }, {
  490. label: 'Dataset 2',
  491. data: [40, 40, 40],
  492. pointRadius: [10, 10, 10],
  493. pointHoverBorderColor: 'rgb(0, 0, 255)',
  494. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  495. }],
  496. labels: ['Point 1', 'Point 2', 'Point 3']
  497. }
  498. });
  499. });
  500. it('should return items at the same x value when intersect is false', function() {
  501. var chart = this.chart;
  502. var meta0 = chart.getDatasetMeta(0);
  503. var meta1 = chart.getDatasetMeta(1);
  504. // Halfway between 2 mid points
  505. var pt = {
  506. x: meta0.data[1]._view.x,
  507. y: meta0.data[1]._view.y
  508. };
  509. var evt = {
  510. type: 'click',
  511. chart: chart,
  512. native: true, // needed otherwise things its a DOM event
  513. x: pt.x,
  514. y: 0
  515. };
  516. var elements = Chart.Interaction.modes.x(chart, evt, {intersect: false});
  517. expect(elements).toEqual([meta0.data[1], meta1.data[1]]);
  518. evt = {
  519. type: 'click',
  520. chart: chart,
  521. native: true, // needed otherwise things its a DOM event
  522. x: pt.x + 20,
  523. y: 0
  524. };
  525. elements = Chart.Interaction.modes.x(chart, evt, {intersect: false});
  526. expect(elements).toEqual([]);
  527. });
  528. it('should return items at the same x value when intersect is true', function() {
  529. var chart = this.chart;
  530. var meta0 = chart.getDatasetMeta(0);
  531. var meta1 = chart.getDatasetMeta(1);
  532. // Halfway between 2 mid points
  533. var pt = {
  534. x: meta0.data[1]._view.x,
  535. y: meta0.data[1]._view.y
  536. };
  537. var evt = {
  538. type: 'click',
  539. chart: chart,
  540. native: true, // needed otherwise things its a DOM event
  541. x: pt.x,
  542. y: 0
  543. };
  544. var elements = Chart.Interaction.modes.x(chart, evt, {intersect: true});
  545. expect(elements).toEqual([]); // we don't intersect anything
  546. evt = {
  547. type: 'click',
  548. chart: chart,
  549. native: true, // needed otherwise things its a DOM event
  550. x: pt.x,
  551. y: pt.y
  552. };
  553. elements = Chart.Interaction.modes.x(chart, evt, {intersect: true});
  554. expect(elements).toEqual([meta0.data[1], meta1.data[1]]);
  555. });
  556. });
  557. describe('y mode', function() {
  558. beforeEach(function() {
  559. this.chart = window.acquireChart({
  560. type: 'line',
  561. data: {
  562. datasets: [{
  563. label: 'Dataset 1',
  564. data: [10, 40, 30],
  565. pointRadius: [5, 10, 5],
  566. pointHoverBorderColor: 'rgb(255, 0, 0)',
  567. pointHoverBackgroundColor: 'rgb(0, 255, 0)'
  568. }, {
  569. label: 'Dataset 2',
  570. data: [40, 40, 40],
  571. pointRadius: [10, 10, 10],
  572. pointHoverBorderColor: 'rgb(0, 0, 255)',
  573. pointHoverBackgroundColor: 'rgb(0, 255, 255)'
  574. }],
  575. labels: ['Point 1', 'Point 2', 'Point 3']
  576. }
  577. });
  578. });
  579. it('should return items at the same y value when intersect is false', function() {
  580. var chart = this.chart;
  581. var meta0 = chart.getDatasetMeta(0);
  582. var meta1 = chart.getDatasetMeta(1);
  583. // Halfway between 2 mid points
  584. var pt = {
  585. x: meta0.data[1]._view.x,
  586. y: meta0.data[1]._view.y
  587. };
  588. var evt = {
  589. type: 'click',
  590. chart: chart,
  591. native: true,
  592. x: 0,
  593. y: pt.y,
  594. };
  595. var elements = Chart.Interaction.modes.y(chart, evt, {intersect: false});
  596. expect(elements).toEqual([meta0.data[1], meta1.data[0], meta1.data[1], meta1.data[2]]);
  597. evt = {
  598. type: 'click',
  599. chart: chart,
  600. native: true,
  601. x: pt.x,
  602. y: pt.y + 20, // out of range
  603. };
  604. elements = Chart.Interaction.modes.y(chart, evt, {intersect: false});
  605. expect(elements).toEqual([]);
  606. });
  607. it('should return items at the same y value when intersect is true', function() {
  608. var chart = this.chart;
  609. var meta0 = chart.getDatasetMeta(0);
  610. var meta1 = chart.getDatasetMeta(1);
  611. // Halfway between 2 mid points
  612. var pt = {
  613. x: meta0.data[1]._view.x,
  614. y: meta0.data[1]._view.y
  615. };
  616. var evt = {
  617. type: 'click',
  618. chart: chart,
  619. native: true,
  620. x: 0,
  621. y: pt.y
  622. };
  623. var elements = Chart.Interaction.modes.y(chart, evt, {intersect: true});
  624. expect(elements).toEqual([]); // we don't intersect anything
  625. evt = {
  626. type: 'click',
  627. chart: chart,
  628. native: true,
  629. x: pt.x,
  630. y: pt.y,
  631. };
  632. elements = Chart.Interaction.modes.y(chart, evt, {intersect: true});
  633. expect(elements).toEqual([meta0.data[1], meta1.data[0], meta1.data[1], meta1.data[2]]);
  634. });
  635. });
  636. });