api.region-spec.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. describe('c3 api region', function () {
  2. 'use strict';
  3. var chart, args;
  4. beforeEach(function (done) {
  5. chart = window.initChart(chart, args, done);
  6. });
  7. describe('api.region', function () {
  8. beforeAll(function () {
  9. args = {
  10. data: {
  11. columns: [
  12. ['data1', 30, 200, 100, 400, 150, 250],
  13. ]
  14. },
  15. regions: [
  16. {
  17. axis: 'y',
  18. start: 300,
  19. end: 400,
  20. class: 'green',
  21. },
  22. {
  23. axis: 'y',
  24. start: 0,
  25. end: 100,
  26. class: 'green',
  27. }
  28. ]
  29. };
  30. });
  31. it('updates regions', function (done) {
  32. var main = chart.internal.main,
  33. expectedRegions = [
  34. {
  35. axis: 'y',
  36. start: 250,
  37. end: 350,
  38. class: 'red'
  39. },
  40. {
  41. axis: 'y',
  42. start: 25,
  43. end: 75,
  44. class: 'red'
  45. }
  46. ],
  47. regions;
  48. // Call regions API
  49. chart.regions(expectedRegions);
  50. setTimeout(function () {
  51. regions = main.selectAll('.c3-region');
  52. expect(regions.size()).toBe(expectedRegions.length);
  53. regions.each(function (d, i) {
  54. var region = d3.select(this),
  55. y = +region.attr('y'),
  56. height = +region.attr('height'),
  57. expectedClass = 'red',
  58. unexpectedClass = 'green',
  59. expectedStart = Math.round(chart.internal.y(expectedRegions[i].start)),
  60. expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
  61. expectedY = expectedEnd,
  62. expectedHeight = expectedStart - expectedEnd;
  63. expect(y).toBeCloseTo(expectedY, -1);
  64. expect(height).toBeCloseTo(expectedHeight, -1);
  65. expect(region.classed(expectedClass)).toBeTruthy();
  66. expect(region.classed(unexpectedClass)).toBeFalsy();
  67. });
  68. }, 500);
  69. setTimeout(function () {
  70. done();
  71. }, 1000);
  72. });
  73. });
  74. describe('api.region.add', function () {
  75. beforeAll(function () {
  76. args = {
  77. data: {
  78. columns: [
  79. ['data1', 30, 200, 100, 400, 150, 250],
  80. ]
  81. },
  82. regions: [
  83. {
  84. axis: 'y',
  85. start: 300,
  86. end: 400,
  87. class: 'green',
  88. },
  89. {
  90. axis: 'y',
  91. start: 0,
  92. end: 100,
  93. class: 'green',
  94. }
  95. ]
  96. };
  97. });
  98. it('should add regions', function (done) {
  99. var main = chart.internal.main,
  100. expectedRegions = [
  101. {
  102. axis: 'y',
  103. start: 300,
  104. end: 400,
  105. class: 'green',
  106. },
  107. {
  108. axis: 'y',
  109. start: 0,
  110. end: 100,
  111. class: 'green',
  112. },
  113. {
  114. axis: 'y',
  115. start: 250,
  116. end: 350,
  117. class: 'red'
  118. },
  119. {
  120. axis: 'y',
  121. start: 25,
  122. end: 75,
  123. class: 'red'
  124. }
  125. ],
  126. expectedClasses = [
  127. 'green',
  128. 'green',
  129. 'red',
  130. 'red',
  131. ],
  132. regions;
  133. // Call regions API
  134. chart.regions(expectedRegions);
  135. setTimeout(function () {
  136. regions = main.selectAll('.c3-region');
  137. expect(regions.size()).toBe(expectedRegions.length);
  138. regions.each(function (d, i) {
  139. var region = d3.select(this),
  140. y = +region.attr('y'),
  141. height = +region.attr('height'),
  142. expectedClass = expectedClasses[i],
  143. expectedStart = Math.round(chart.internal.y(expectedRegions[i].start)),
  144. expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
  145. expectedY = expectedEnd,
  146. expectedHeight = expectedStart - expectedEnd;
  147. expect(y).toBeCloseTo(expectedY, -1);
  148. expect(height).toBeCloseTo(expectedHeight, -1);
  149. expect(region.classed(expectedClass)).toBeTruthy();
  150. });
  151. }, 500);
  152. setTimeout(function () {
  153. done();
  154. }, 1000);
  155. });
  156. });
  157. describe('api.region.remove', function () {
  158. beforeAll(function () {
  159. args = {
  160. data: {
  161. columns: [
  162. ['data1', 30, 200, 100, 400, 150, 250],
  163. ]
  164. },
  165. regions: [
  166. {
  167. axis: 'y',
  168. start: 300,
  169. end: 400,
  170. class: 'green',
  171. },
  172. {
  173. axis: 'y',
  174. start: 0,
  175. end: 100,
  176. class: 'green',
  177. },
  178. {
  179. axis: 'y',
  180. start: 250,
  181. end: 350,
  182. class: 'red'
  183. },
  184. ]
  185. };
  186. });
  187. it('should remove regions', function (done) {
  188. var main = chart.internal.main,
  189. expectedRegions = [
  190. {
  191. axis: 'y',
  192. start: 250,
  193. end: 350,
  194. class: 'red'
  195. },
  196. ],
  197. expectedClasses = ['red'],
  198. regions;
  199. // Call regions API
  200. chart.regions(expectedRegions);
  201. setTimeout(function () {
  202. regions = main.selectAll('.c3-region');
  203. expect(regions.size()).toBe(expectedRegions.length);
  204. regions.each(function (d, i) {
  205. var region = d3.select(this),
  206. y = +region.attr('y'),
  207. height = +region.attr('height'),
  208. expectedClass = expectedClasses[i],
  209. expectedStart = Math.round(chart.internal.y(expectedRegions[i].start)),
  210. expectedEnd = Math.round(chart.internal.y(expectedRegions[i].end)),
  211. expectedY = expectedEnd,
  212. expectedHeight = expectedStart - expectedEnd;
  213. expect(y).toBeCloseTo(expectedY, -1);
  214. expect(height).toBeCloseTo(expectedHeight, -1);
  215. expect(region.classed(expectedClass)).toBeTruthy();
  216. });
  217. }, 500);
  218. setTimeout(function () {
  219. done();
  220. }, 1000);
  221. });
  222. });
  223. });