toolbar.spec.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import 'jest';
  4. import { Widget } from '@lumino/widgets';
  5. import { simulate } from 'simulate-event';
  6. import { CSVDelimiter } from '../src';
  7. const DELIMITERS = [',', ';', '\t'];
  8. describe('csvviewer/toolbar', () => {
  9. describe('CSVDelimiter', () => {
  10. describe('#constructor()', () => {
  11. it('should instantiate a `CSVDelimiter` toolbar widget', () => {
  12. const widget = new CSVDelimiter({ selected: ',' });
  13. expect(widget).toBeInstanceOf(CSVDelimiter);
  14. expect(Array.from(widget.node.classList)).toEqual(
  15. expect.arrayContaining(['jp-CSVDelimiter'])
  16. );
  17. widget.dispose();
  18. });
  19. it('should allow pre-selecting the delimiter', () => {
  20. const wanted = DELIMITERS[DELIMITERS.length - 1];
  21. const widget = new CSVDelimiter({ selected: wanted });
  22. expect(widget.selectNode.value).toBe(wanted);
  23. widget.dispose();
  24. });
  25. });
  26. describe('#delimiterChanged', () => {
  27. it('should emit a value when the dropdown value changes', () => {
  28. const widget = new CSVDelimiter({ selected: ',' });
  29. let delimiter = '';
  30. const index = DELIMITERS.length - 1;
  31. const wanted = DELIMITERS[index];
  32. widget.delimiterChanged.connect((s, value) => {
  33. delimiter = value;
  34. });
  35. Widget.attach(widget, document.body);
  36. widget.selectNode.selectedIndex = index;
  37. simulate(widget.selectNode, 'change');
  38. expect(delimiter).toBe(wanted);
  39. widget.dispose();
  40. });
  41. });
  42. describe('#selectNode', () => {
  43. it('should return the delimiter dropdown select tag', () => {
  44. const widget = new CSVDelimiter({ selected: ',' });
  45. expect(widget.selectNode.tagName.toLowerCase()).toBe('select');
  46. widget.dispose();
  47. });
  48. });
  49. describe('#dispose()', () => {
  50. it('should dispose of the resources held by the widget', () => {
  51. const widget = new CSVDelimiter({ selected: ',' });
  52. expect(widget.isDisposed).toBe(false);
  53. widget.dispose();
  54. expect(widget.isDisposed).toBe(true);
  55. });
  56. it('should be safe to call multiple times', () => {
  57. const widget = new CSVDelimiter({ selected: ',' });
  58. expect(widget.isDisposed).toBe(false);
  59. widget.dispose();
  60. widget.dispose();
  61. expect(widget.isDisposed).toBe(true);
  62. });
  63. });
  64. });
  65. });