edit_operation.test.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. const { expect } = require('chai')
  2. const EditOperationBuilder = require('../lib/operation/edit_operation_builder')
  3. const TextOperation = require('../lib/operation/text_operation')
  4. const EditOperationTransformer = require('../lib/operation/edit_operation_transformer')
  5. const EditOperation = require('../lib/operation/edit_operation')
  6. const randomTextOperation = require('./support/random_text_operation')
  7. const random = require('./support/random')
  8. describe('EditOperation', function () {
  9. it('Cannot be instantiated', function () {
  10. expect(() => new EditOperation()).to.throw(
  11. 'Cannot instantiate abstract class'
  12. )
  13. })
  14. })
  15. describe('EditOperationTransformer', function () {
  16. it('Transforms two TextOperations', function () {
  17. const a = new TextOperation().insert('foo')
  18. const b = new TextOperation().insert('bar')
  19. const [aPrime, bPrime] = EditOperationTransformer.transform(a, b)
  20. expect(aPrime).to.be.an.instanceof(TextOperation)
  21. expect(bPrime).to.be.an.instanceof(TextOperation)
  22. })
  23. })
  24. describe('EditOperationBuilder', function () {
  25. it('Constructs TextOperation from JSON', function () {
  26. const raw = {
  27. textOperation: [1, 'foo', 3],
  28. }
  29. const op = EditOperationBuilder.fromJSON(raw)
  30. expect(op).to.be.an.instanceof(TextOperation)
  31. expect(op.toJSON()).to.deep.equal(raw)
  32. })
  33. it('Throws error for unsupported operation', function () {
  34. const raw = {
  35. unsupportedOperation: {
  36. op: 'foo',
  37. },
  38. }
  39. expect(() => EditOperationBuilder.fromJSON(raw)).to.throw(
  40. 'Unsupported operation in EditOperationBuilder.fromJSON'
  41. )
  42. })
  43. it('Constructs TextOperation from JSON (randomised)', function () {
  44. const str = random.string(50)
  45. const randomOperation = randomTextOperation(str)
  46. const op = EditOperationBuilder.fromJSON(randomOperation.toJSON())
  47. expect(op).to.be.an.instanceof(TextOperation)
  48. expect(op.equals(randomOperation)).to.be.true
  49. })
  50. })