contextmenu.test.ts 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import { describe, galata, test } from '@jupyterlab/galata';
  4. import * as path from 'path';
  5. const filebrowserId = 'filebrowser';
  6. const testFileName = 'simple.md';
  7. const testNotebook = 'simple_notebook.ipynb';
  8. const testFolderName = 'test-folder';
  9. jest.setTimeout(60000);
  10. describe('Application Context Menu', () => {
  11. beforeAll(async () => {
  12. // Create some dummy content
  13. await galata.contents.moveFileToServer(
  14. path.resolve(__dirname, `./notebooks/${testNotebook}`)
  15. );
  16. await galata.contents.moveFileToServer(
  17. path.resolve(__dirname, `./notebooks/${testFileName}`)
  18. );
  19. // Create a dummy folder
  20. await galata.contents.createDirectory(testFolderName);
  21. galata.context.capturePrefix = 'contextmenu';
  22. await galata.resetUI();
  23. });
  24. afterEach(async () => {
  25. // Close menu
  26. await galata.context.page.keyboard.press('Escape');
  27. });
  28. afterAll(async () => {
  29. galata.context.capturePrefix = '';
  30. if (await galata.contents.fileExists(testNotebook)) {
  31. await galata.contents.deleteFile(testNotebook);
  32. }
  33. if (await galata.contents.fileExists(testFileName)) {
  34. await galata.contents.deleteFile(testFileName);
  35. }
  36. if (await galata.contents.directoryExists(testFolderName)) {
  37. await galata.contents.deleteDirectory(testFolderName);
  38. }
  39. });
  40. test('Open file browser context menu on folder', async () => {
  41. await galata.sidebar.openTab(filebrowserId);
  42. expect(await galata.sidebar.isTabOpen(filebrowserId)).toBeTruthy();
  43. await galata.filebrowser.refresh();
  44. await galata.context.page.click(
  45. `.jp-DirListing-item span:has-text("${testFolderName}")`,
  46. {
  47. button: 'right'
  48. }
  49. );
  50. // Context menu should be available
  51. expect(await galata.menu.isAnyOpen()).toBe(true);
  52. const imageName = `folder`;
  53. const menu = await galata.menu.getOpenMenu();
  54. await galata.capture.screenshot(imageName, menu);
  55. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  56. });
  57. test('Open file browser context menu on file', async () => {
  58. await galata.sidebar.openTab(filebrowserId);
  59. expect(await galata.sidebar.isTabOpen(filebrowserId)).toBeTruthy();
  60. await galata.context.page.click(
  61. `.jp-DirListing-item span:has-text("${testFileName}")`,
  62. {
  63. button: 'right'
  64. }
  65. );
  66. // Context menu should be available
  67. expect(await galata.menu.isAnyOpen()).toBe(true);
  68. const imageName = `file`;
  69. const menu = await galata.menu.getOpenMenu();
  70. await galata.capture.screenshot(imageName, menu);
  71. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  72. });
  73. test('Open file browser context submenu open with', async () => {
  74. await galata.sidebar.openTab(filebrowserId);
  75. expect(await galata.sidebar.isTabOpen(filebrowserId)).toBeTruthy();
  76. await galata.context.page.click(
  77. `.jp-DirListing-item span:has-text("${testFileName}")`,
  78. {
  79. button: 'right'
  80. }
  81. );
  82. // Context menu should be available
  83. expect(await galata.menu.isAnyOpen()).toBe(true);
  84. await galata.context.page.hover('text=Open With');
  85. await galata.context.page.waitForSelector(
  86. 'li[role="menuitem"]:has-text("Editor")'
  87. );
  88. const imageName = `file-openwith`;
  89. // Get the last menu -> will be submenu
  90. const menu = await galata.menu.getOpenMenu();
  91. await galata.capture.screenshot(imageName, menu);
  92. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  93. });
  94. test('Open tab context menu', async () => {
  95. await galata.context.page.click('div[role="main"] >> text=Launcher', {
  96. button: 'right'
  97. });
  98. // Context menu should be available
  99. expect(await galata.menu.isAnyOpen()).toBe(true);
  100. const imageName = `tab-launcher`;
  101. const menu = await galata.menu.getOpenMenu();
  102. await galata.capture.screenshot(imageName, menu);
  103. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  104. });
  105. describe('Notebook context menus', () => {
  106. beforeAll(async () => {
  107. await galata.notebook.openByPath(testNotebook);
  108. });
  109. afterEach(async () => {
  110. await galata.context.page.keyboard.press('Escape');
  111. });
  112. test('Open notebook tab context menu', async () => {
  113. await galata.context.page.click(
  114. 'div[role="main"] >> text=simple_notebook.ipynb',
  115. {
  116. button: 'right'
  117. }
  118. );
  119. // Context menu should be available
  120. expect(await galata.menu.isAnyOpen()).toBe(true);
  121. const imageName = `tab-notebook`;
  122. const menu = await galata.menu.getOpenMenu();
  123. await galata.capture.screenshot(imageName, menu);
  124. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  125. });
  126. test('Open context on markdown cell', async () => {
  127. await galata.context.page.click('text=Test Notebook¶', {
  128. button: 'right'
  129. });
  130. expect(await galata.menu.isAnyOpen()).toBe(true);
  131. const imageName = `notebook-md`;
  132. const menu = await galata.menu.getOpenMenu();
  133. await galata.capture.screenshot(imageName, menu);
  134. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  135. });
  136. test('Open context on code cell', async () => {
  137. await galata.context.page.click(
  138. 'text=from IPython.display import Image',
  139. { button: 'right' }
  140. );
  141. expect(await galata.menu.isAnyOpen()).toBe(true);
  142. const imageName = `notebook-code`;
  143. const menu = await galata.menu.getOpenMenu();
  144. await galata.capture.screenshot(imageName, menu);
  145. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  146. });
  147. });
  148. test('Open file editor context menu', async () => {
  149. await galata.sidebar.openTab(filebrowserId);
  150. expect(await galata.sidebar.isTabOpen(filebrowserId)).toBeTruthy();
  151. await galata.context.page.dblclick(`span:has-text("${testFileName}")`);
  152. await galata.context.page.click('text=# Title', {
  153. button: 'right'
  154. });
  155. expect(await galata.menu.isAnyOpen()).toBe(true);
  156. const imageName = `fileeditor`;
  157. const menu = await galata.menu.getOpenMenu();
  158. await galata.capture.screenshot(imageName, menu);
  159. expect(await galata.capture.compareScreenshot(imageName)).toBe('same');
  160. });
  161. });