jsonViewer.spec.js 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. function typeTextAtPosition(lineNumber, column, text) {
  2. let rightArrow = '{rightArrow}';
  3. let leftArrow = '{leftArrow}';
  4. for (let i = 0; i < column - 1; i++) {
  5. rightArrow += '{rightArrow}';
  6. }
  7. if (lineNumber === 1) {
  8. cy.get('.lines-content').children().eq(0).type(`${leftArrow}${rightArrow}${text}`);
  9. } else {
  10. cy.get('.lines-content').children().eq(lineNumber - 2).type(`${rightArrow}${text}`);
  11. }
  12. }
  13. function undo(times) {
  14. let z = '{meta+z}';
  15. for (let i = 0; i < times - 1; i++) {
  16. z += '{meta+z}';
  17. }
  18. cy.get('.lines-content').type(z);
  19. }
  20. function redo(times) {
  21. let z = '{meta+shift+z}';
  22. for (let i = 0; i < times - 1; i++) {
  23. z += '{meta+shift+z}';
  24. }
  25. cy.get('.lines-content').type(z);
  26. }
  27. describe('jsonViewer', () => {
  28. it('scroll to bottom', () => {
  29. cy.visit('http://127.0.0.1:6006/iframe.html?path=/story/jsonviewer--default-json-viewer');
  30. cy.get('.json-viewer-container').scrollTo('bottom');
  31. cy.get('.lines-content').children().last().should('have.attr', 'data-line-number', '36');
  32. });
  33. it('scroll to top', () => {
  34. cy.visit('http://127.0.0.1:6006/iframe.html?path=/story/jsonviewer--default-json-viewer');
  35. cy.get('.json-viewer-container').scrollTo('top');
  36. cy.get('.lines-content').children().first().should('have.attr', 'data-line-number', '1');
  37. });
  38. it('fold', () => {
  39. cy.visit('http://127.0.0.1:6006/iframe.html?path=/story/jsonviewer--default-json-viewer');
  40. cy.get('.line-scroll-container').trigger('mouseover', { which: 1 });
  41. cy.get('.semi-json-viewer-line-number[data-line-number="1"]').children().should('have.length', 2);
  42. cy.get('.semi-json-viewer-line-number[data-line-number="1"]').children().eq(1).click();
  43. cy.get('.lines-content').children().should('have.length', 2);
  44. cy.get('.lines-content').children().last().should('have.attr', 'data-line-number', '36');
  45. cy.get('.line-scroll-container').trigger('mouseover', { which: 1 });
  46. cy.get('.semi-json-viewer-line-number[data-line-number="1"]').children().should('have.length', 2);
  47. cy.get('.semi-json-viewer-line-number[data-line-number="1"]').children().eq(1).click();
  48. cy.get('.lines-content').children().should('have.length', 21);
  49. cy.get('.line-scroll-container').trigger('mouseover', { which: 1 });
  50. cy.get('.semi-json-viewer-line-number[data-line-number="13"]').children().should('have.length', 2);
  51. cy.get('.semi-json-viewer-line-number[data-line-number="13"]').children().eq(1).click();
  52. cy.get('.lines-content').children().should('have.length', 15);
  53. cy.get('.line-scroll-container').trigger('mouseover', { which: 1 });
  54. cy.get('.semi-json-viewer-line-number[data-line-number="13"]').children().should('have.length', 2);
  55. cy.get('.semi-json-viewer-line-number[data-line-number="13"]').children().eq(1).click();
  56. cy.get('.lines-content').children().should('have.length', 21);
  57. });
  58. it('edit', () => {
  59. cy.visit('http://127.0.0.1:6006/iframe.html?path=/story/jsonviewer--default-json-viewer');
  60. //insert
  61. typeTextAtPosition(1, 1, '{enter}');
  62. cy.get('.lines-content').children().eq(1).children().should('have.length', 1);
  63. typeTextAtPosition(2, 2, `"`);
  64. typeTextAtPosition(2, 3, `key`);
  65. typeTextAtPosition(2, 7, `:`);
  66. typeTextAtPosition(2, 8, `1`);
  67. typeTextAtPosition(2, 9, `,`);
  68. cy.get('.lines-content').children().eq(1).children().children().should('have.length', 5);
  69. // undo redo
  70. undo(1);
  71. cy.get('.lines-content').children().eq(1).children().children().should('have.length', 4);
  72. redo(1);
  73. cy.get('.lines-content').children().eq(1).children().children().should('have.length', 5);
  74. undo(8);
  75. cy.get('.lines-content').children().eq(1).children().children().should('have.length', 6);
  76. //del
  77. typeTextAtPosition(2, 1, `{backspace}`);
  78. cy.get('.lines-content').children().eq(0).children().children().should('have.length', 7);
  79. undo(1);
  80. cy.get('.lines-content').children().eq(0).children().children().should('have.length', 1);
  81. cy.get('.lines-content').children().eq(1).children().children().should('have.length', 6);
  82. // cut
  83. // typeTextAtPosition(2, 1, `{meta+x}`);
  84. // cy.get('.lines-content').children().eq(1).children().should('have.length', 0);
  85. // cy.get('.lines-content').type('{meta+z}');
  86. // cy.get('.lines-content').children().eq(1).children().should('have.length', 6);
  87. //complete
  88. typeTextAtPosition(14, 4, '{enter}');
  89. cy.get('.lines-content').children().eq(14).children().children().should('have.length', 1);
  90. typeTextAtPosition(15, 4, `c`);
  91. cy.get('.semi-json-viewer-complete-suggestions-container').children().should('have.length', 2);
  92. cy.get('.lines-content').type('{enter}');
  93. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'none');
  94. cy.get('.lines-content').children().eq(14).children().children().should('have.length', 2);
  95. typeTextAtPosition(15, 11, `:`);
  96. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'block');
  97. cy.get('.semi-json-viewer-complete-suggestions-container').children().should('have.length', 2);
  98. cy.get('.lines-content').type('{enter}');
  99. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'none');
  100. typeTextAtPosition(15, 19, `,{enter}`);
  101. cy.get('.lines-content').children().eq(14).children().children().should('have.length', 5);
  102. typeTextAtPosition(16, 4, `a`);
  103. cy.get('.semi-json-viewer-complete-suggestions-container').children().should('have.length', 2);
  104. typeTextAtPosition(16, 5, `{rightArrow}`);
  105. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'none');
  106. typeTextAtPosition(16, 5, `g`);
  107. cy.get('.semi-json-viewer-complete-suggestions-container').children().should('have.length', 2);
  108. cy.get('.lines-content').type('{enter}');
  109. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'none');
  110. typeTextAtPosition(16, 9, `:`);
  111. cy.get('.lines-content').type('{enter}');
  112. cy.get('.semi-json-viewer-complete-container').should('have.css', 'display', 'none');
  113. cy.get('.lines-content').children().eq(15).children().children().should('have.length', 4);
  114. //search
  115. cy.get('.semi-json-viewer-search-bar-trigger').click();
  116. cy.get('.semi-json-viewer-search-bar').children().eq(0).type('a');
  117. cy.get('.semi-json-viewer-search-result').should('have.length.at.least', 1);
  118. cy.get('.semi-icon.semi-icon-default.semi-icon-whole_word').click();
  119. cy.get('.semi-json-viewer-search-result').should('have.length', 0);
  120. cy.get('.semi-icon.semi-icon-default.semi-icon-whole_word').click();
  121. cy.get('.semi-json-viewer-search-bar').children().eq(0).clear();
  122. cy.get('.semi-json-viewer-search-result').should('have.length', 0);
  123. const str = '\\d+';
  124. cy.get('.semi-json-viewer-search-bar').children().eq(0).type(str);
  125. cy.get('.semi-icon.semi-icon-default.semi-icon-reg_exp').click();
  126. cy.get('.semi-json-viewer-search-result').should('have.length.at.least', 1);
  127. cy.get('.semi-icon.semi-icon-default.semi-icon-reg_exp').click();
  128. cy.get('.semi-json-viewer-search-bar').children().eq(0).clear();
  129. //replace
  130. cy.get('.semi-json-viewer-search-bar').children().eq(0).type('a');
  131. cy.get('.semi-json-viewer-replace-bar').children().eq(0).type('x');
  132. cy.get('.semi-json-viewer-search-result').then(($el) => {
  133. let length = $el.length;
  134. cy.get('.semi-json-viewer-replace-bar').children().eq(1).click();
  135. cy.get('.semi-json-viewer-search-result').should('have.length', length - 1);
  136. cy.get('.semi-json-viewer-replace-bar').children().eq(2).click();
  137. cy.get('.semi-json-viewer-search-result').should('have.length', 0);
  138. });
  139. });
  140. });