observablestring.spec.ts 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import 'jest';
  4. import { ObservableString } from '@jupyterlab/observables';
  5. describe('@jupyterlab/observables', () => {
  6. describe('ObservableString', () => {
  7. describe('#constructor()', () => {
  8. it('should accept no arguments', () => {
  9. const value = new ObservableString();
  10. expect(value instanceof ObservableString).toBe(true);
  11. });
  12. it('should accept a string argument', () => {
  13. const value = new ObservableString('hello');
  14. expect(value instanceof ObservableString).toBe(true);
  15. });
  16. it('should initialize the string value', () => {
  17. const value = new ObservableString('hello');
  18. expect(value.text).toEqual('hello');
  19. });
  20. });
  21. describe('#type', () => {
  22. it('should return `String`', () => {
  23. const value = new ObservableString();
  24. expect(value.type).toBe('String');
  25. });
  26. });
  27. describe('#changed', () => {
  28. it('should be emitted when the string changes', () => {
  29. let called = false;
  30. const value = new ObservableString();
  31. value.changed.connect(() => {
  32. called = true;
  33. });
  34. value.text = 'change';
  35. expect(called).toBe(true);
  36. });
  37. it('should have value changed args', () => {
  38. let called = false;
  39. const value = new ObservableString();
  40. value.changed.connect((sender, args) => {
  41. expect(sender).toBe(value);
  42. expect(args.type).toBe('set');
  43. expect(args.start).toBe(0);
  44. expect(args.end).toBe(3);
  45. expect(args.value).toBe('new');
  46. called = true;
  47. });
  48. value.text = 'new';
  49. expect(called).toBe(true);
  50. });
  51. });
  52. describe('#isDisposed', () => {
  53. it('should test whether the string is disposed', () => {
  54. const value = new ObservableString();
  55. expect(value.isDisposed).toBe(false);
  56. value.dispose();
  57. expect(value.isDisposed).toBe(true);
  58. });
  59. });
  60. describe('#setter()', () => {
  61. it('should set the item at a specific index', () => {
  62. const value = new ObservableString('old');
  63. value.text = 'new';
  64. expect(value.text).toEqual('new');
  65. });
  66. it('should trigger a changed signal', () => {
  67. let called = false;
  68. const value = new ObservableString('old');
  69. value.changed.connect((sender, args) => {
  70. expect(sender).toBe(value);
  71. expect(args.type).toBe('set');
  72. expect(args.start).toBe(0);
  73. expect(args.end).toBe(3);
  74. expect(args.value).toBe('new');
  75. called = true;
  76. });
  77. value.text = 'new';
  78. expect(called).toBe(true);
  79. });
  80. });
  81. describe('#insert()', () => {
  82. it('should insert an substring into the string at a specific index', () => {
  83. const value = new ObservableString('one three');
  84. value.insert(4, 'two ');
  85. expect(value.text).toEqual('one two three');
  86. });
  87. it('should trigger a changed signal', () => {
  88. let called = false;
  89. const value = new ObservableString('one three');
  90. value.changed.connect((sender, args) => {
  91. expect(sender).toBe(value);
  92. expect(args.type).toBe('insert');
  93. expect(args.start).toBe(4);
  94. expect(args.end).toBe(8);
  95. expect(args.value).toBe('two ');
  96. called = true;
  97. });
  98. value.insert(4, 'two ');
  99. expect(called).toBe(true);
  100. });
  101. });
  102. describe('#remove()', () => {
  103. it('should remove a substring from the string', () => {
  104. const value = new ObservableString('one two two three');
  105. value.remove(4, 8);
  106. expect(value.text).toEqual('one two three');
  107. });
  108. it('should trigger a changed signal', () => {
  109. let called = false;
  110. const value = new ObservableString('one two two three');
  111. value.changed.connect((sender, args) => {
  112. expect(sender).toBe(value);
  113. expect(args.type).toBe('remove');
  114. expect(args.start).toBe(4);
  115. expect(args.end).toBe(8);
  116. expect(args.value).toBe('two ');
  117. called = true;
  118. });
  119. value.remove(4, 8);
  120. expect(called).toBe(true);
  121. });
  122. });
  123. describe('#clear()', () => {
  124. it('should empty the string', () => {
  125. const value = new ObservableString('full');
  126. value.clear();
  127. expect(value.text.length).toBe(0);
  128. expect(value.text).toBe('');
  129. });
  130. it('should trigger a changed signal', () => {
  131. let called = false;
  132. const value = new ObservableString('full');
  133. value.changed.connect((sender, args) => {
  134. expect(sender).toBe(value);
  135. expect(args.type).toBe('set');
  136. expect(args.start).toBe(0);
  137. expect(args.end).toBe(0);
  138. expect(args.value).toBe('');
  139. called = true;
  140. });
  141. value.clear();
  142. expect(called).toBe(true);
  143. });
  144. });
  145. });
  146. });