Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

code.test.ts 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import state from 'state'
  2. import { generateFromCode } from 'state/code/generate'
  3. import { getShapes } from 'utils'
  4. import * as json from './__mocks__/document.json'
  5. jest.useRealTimers()
  6. state.reset()
  7. state.send('MOUNTED').send('LOADED_FROM_FILE', { json: JSON.stringify(json) })
  8. state.send('CLEARED_PAGE')
  9. describe('selection', () => {
  10. it('opens and closes the code panel', () => {
  11. expect(state.data.settings.isCodeOpen).toBe(false)
  12. state.send('TOGGLED_CODE_PANEL_OPEN')
  13. expect(state.data.settings.isCodeOpen).toBe(true)
  14. state.send('TOGGLED_CODE_PANEL_OPEN')
  15. expect(state.data.settings.isCodeOpen).toBe(false)
  16. })
  17. it('saves changes to code', () => {
  18. expect(getShapes(state.data).length).toBe(0)
  19. const code = `// hello world!`
  20. state.send('SAVED_CODE', { code })
  21. expect(state.data.document.code[state.data.currentCodeFileId].code).toBe(
  22. code
  23. )
  24. })
  25. it('generates shapes', async () => {
  26. const code = `
  27. const rectangle = new Rectangle({
  28. id: "test-rectangle",
  29. name: 'Test Rectangle',
  30. point: [100, 100],
  31. size: [200, 200],
  32. style: {
  33. size: SizeStyle.Medium,
  34. color: ColorStyle.Red,
  35. dash: DashStyle.Dotted,
  36. },
  37. })
  38. `
  39. const { controls, shapes } = await generateFromCode(state.data, code)
  40. state.send('GENERATED_FROM_CODE', { controls, shapes })
  41. expect(getShapes(state.data)).toMatchSnapshot(
  42. 'generated rectangle from code'
  43. )
  44. })
  45. it('creates a code control', async () => {
  46. const code = `
  47. const rectangle = new Rectangle({
  48. id: "test-rectangle",
  49. name: 'Test Rectangle',
  50. point: [100, 100],
  51. size: [200, 200],
  52. style: {
  53. size: SizeStyle.Medium,
  54. color: ColorStyle.Red,
  55. dash: DashStyle.Dotted,
  56. },
  57. })
  58. `
  59. const { controls, shapes } = await generateFromCode(state.data, code)
  60. state.send('GENERATED_FROM_CODE', { controls, shapes })
  61. expect(state.data.codeControls).toMatchSnapshot(
  62. 'generated code controls from code'
  63. )
  64. })
  65. it('updates a code control', async () => {
  66. const code = `
  67. const rectangle = new Rectangle({
  68. id: "test-rectangle",
  69. name: 'Test Rectangle',
  70. point: [100, 100],
  71. size: [200, 200],
  72. style: {
  73. size: SizeStyle.Medium,
  74. color: ColorStyle.Red,
  75. dash: DashStyle.Dotted,
  76. },
  77. })
  78. new NumberControl({
  79. id: "test-number-control",
  80. label: "x"
  81. })
  82. new VectorControl({
  83. id: "test-vector-control",
  84. label: "size"
  85. })
  86. `
  87. const { controls, shapes } = await generateFromCode(state.data, code)
  88. state.send('GENERATED_FROM_CODE', { controls, shapes })
  89. state.send('CHANGED_CODE_CONTROL', { 'test-number-control': 100 })
  90. expect(state.data.codeControls).toMatchSnapshot(
  91. 'data in state after changing control'
  92. )
  93. })
  94. /* -------------------- Readonly -------------------- */
  95. it('does not saves changes to code when readonly', () => {
  96. state.send('CLEARED_PAGE')
  97. expect(getShapes(state.data).length).toBe(0)
  98. const code = `// hello world!`
  99. state
  100. .send('SAVED_CODE', { code })
  101. .send('TOGGLED_READ_ONLY')
  102. .send('SAVED_CODE', { code: '' })
  103. expect(state.data.document.code[state.data.currentCodeFileId].code).toBe(
  104. code
  105. )
  106. })
  107. })