Component.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. describe('Component', function() {
  2. var utHelper = window.utHelper;
  3. var testCase = utHelper.prepare(['echarts/src/model/Component']);
  4. describe('topologicalTravel', function () {
  5. testCase('topologicalTravel_base', function (ComponentModel) {
  6. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  7. ComponentModel.extend({type: 'a1'});
  8. ComponentModel.extend({type: 'a2'});
  9. var result = [];
  10. var allList = ComponentModel.getAllClassMainTypes();
  11. ComponentModel.topologicalTravel(['m1', 'a1', 'a2'], allList, function (componentType, dependencies) {
  12. result.push([componentType, dependencies]);
  13. });
  14. expect(result).toEqual([['a2', []], ['a1', []], ['m1', ['a1', 'a2']]]);
  15. });
  16. testCase('topologicalTravel_a1IsAbsent', function (ComponentModel) {
  17. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  18. ComponentModel.extend({type: 'a2'});
  19. var allList = ComponentModel.getAllClassMainTypes();
  20. var result = [];
  21. ComponentModel.topologicalTravel(['m1', 'a2'], allList, function (componentType, dependencies) {
  22. result.push([componentType, dependencies]);
  23. });
  24. expect(result).toEqual([['a2', []], ['m1', ['a1', 'a2']]]);
  25. });
  26. testCase('topologicalTravel_empty', function (ComponentModel) {
  27. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  28. ComponentModel.extend({type: 'a1'});
  29. ComponentModel.extend({type: 'a2'});
  30. var allList = ComponentModel.getAllClassMainTypes();
  31. var result = [];
  32. ComponentModel.topologicalTravel([], allList, function (componentType, dependencies) {
  33. result.push([componentType, dependencies]);
  34. });
  35. expect(result).toEqual([]);
  36. });
  37. testCase('topologicalTravel_isolate', function (ComponentModel) {
  38. ComponentModel.extend({type: 'a2'});
  39. ComponentModel.extend({type: 'a1'});
  40. ComponentModel.extend({type: 'm1', dependencies: ['a2']});
  41. var allList = ComponentModel.getAllClassMainTypes();
  42. var result = [];
  43. ComponentModel.topologicalTravel(['a1', 'a2', 'm1'], allList, function (componentType, dependencies) {
  44. result.push([componentType, dependencies]);
  45. });
  46. expect(result).toEqual([['a1', []], ['a2', []], ['m1', ['a2']]]);
  47. });
  48. testCase('topologicalTravel_diamond', function (ComponentModel) {
  49. ComponentModel.extend({type: 'a1', dependencies: []});
  50. ComponentModel.extend({type: 'a2', dependencies: ['a1']});
  51. ComponentModel.extend({type: 'a3', dependencies: ['a1']});
  52. ComponentModel.extend({type: 'm1', dependencies: ['a2', 'a3']});
  53. var allList = ComponentModel.getAllClassMainTypes();
  54. var result = [];
  55. ComponentModel.topologicalTravel(['m1', 'a1', 'a2', 'a3'], allList, function (componentType, dependencies) {
  56. result.push([componentType, dependencies]);
  57. });
  58. expect(result).toEqual([['a1', []], ['a3', ['a1']], ['a2', ['a1']], ['m1', ['a2', 'a3']]]);
  59. });
  60. testCase('topologicalTravel_loop', function (ComponentModel) {
  61. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  62. ComponentModel.extend({type: 'm2', dependencies: ['m1', 'a2']});
  63. ComponentModel.extend({type: 'a1', dependencies: ['m2', 'a2', 'a3']});
  64. ComponentModel.extend({type: 'a2'});
  65. ComponentModel.extend({type: 'a3'});
  66. var allList = ComponentModel.getAllClassMainTypes();
  67. expect(function () {
  68. ComponentModel.topologicalTravel(['m1', 'm2', 'a1'], allList);
  69. }).toThrowError(/Circl/);
  70. });
  71. testCase('topologicalTravel_multipleEchartsInstance', function (ComponentModel) {
  72. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  73. ComponentModel.extend({type: 'a1'});
  74. ComponentModel.extend({type: 'a2'});
  75. var allList = ComponentModel.getAllClassMainTypes();
  76. var result = [];
  77. ComponentModel.topologicalTravel(['m1', 'a1', 'a2'], allList, function (componentType, dependencies) {
  78. result.push([componentType, dependencies]);
  79. });
  80. expect(result).toEqual([['a2', []], ['a1', []], ['m1', ['a1', 'a2']]]);
  81. result = [];
  82. ComponentModel.extend({type: 'm2', dependencies: ['a1', 'm1']});
  83. var allList = ComponentModel.getAllClassMainTypes();
  84. ComponentModel.topologicalTravel(['m2', 'm1', 'a1', 'a2'], allList, function (componentType, dependencies) {
  85. result.push([componentType, dependencies]);
  86. });
  87. expect(result).toEqual([['a2', []], ['a1', []], ['m1', ['a1', 'a2']], ['m2', ['a1', 'm1']]]);
  88. });
  89. testCase('topologicalTravel_missingSomeNodeButHasDependencies', function (ComponentModel) {
  90. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  91. ComponentModel.extend({type: 'a2', dependencies: ['a3']});
  92. ComponentModel.extend({type: 'a3'});
  93. ComponentModel.extend({type: 'a4'});
  94. var result = [];
  95. var allList = ComponentModel.getAllClassMainTypes();
  96. ComponentModel.topologicalTravel(['a3', 'm1'], allList, function (componentType, dependencies) {
  97. result.push([componentType, dependencies]);
  98. });
  99. expect(result).toEqual([['a3', []], ['a2', ['a3']], ['m1', ['a1', 'a2']]]);
  100. var result = [];
  101. var allList = ComponentModel.getAllClassMainTypes();
  102. ComponentModel.topologicalTravel(['m1', 'a3'], allList, function (componentType, dependencies) {
  103. result.push([componentType, dependencies]);
  104. });
  105. expect(result).toEqual([['a3', []], ['a2', ['a3']], ['m1', ['a1', 'a2']]]);
  106. });
  107. testCase('topologicalTravel_subType', function (ComponentModel) {
  108. ComponentModel.extend({type: 'm1', dependencies: ['a1', 'a2']});
  109. ComponentModel.extend({type: 'a1.aaa', dependencies: ['a2']});
  110. ComponentModel.extend({type: 'a1.bbb', dependencies: ['a3', 'a4']});
  111. ComponentModel.extend({type: 'a2'});
  112. ComponentModel.extend({type: 'a3'});
  113. ComponentModel.extend({type: 'a4'});
  114. var result = [];
  115. var allList = ComponentModel.getAllClassMainTypes();
  116. ComponentModel.topologicalTravel(['m1', 'a1', 'a2', 'a4'], allList, function (componentType, dependencies) {
  117. result.push([componentType, dependencies]);
  118. });
  119. expect(result).toEqual([['a4', []], ['a2',[]], ['a1', ['a2','a3','a4']], ['m1', ['a1', 'a2']]]);
  120. });
  121. });
  122. });