test.js 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. // CodeMirror, copyright (c) by Marijn Haverbeke and others
  2. // Distributed under an MIT license: https://codemirror.net/LICENSE
  3. ;(function () {
  4. var mode = CodeMirror.getMode({ indentUnit: 2 }, 'jsx')
  5. function MT(name) {
  6. test.mode(name, mode, Array.prototype.slice.call(arguments, 1))
  7. }
  8. MT('selfclose', '[keyword var] [def x] [operator =] [bracket&tag <] [tag foo] [bracket&tag />] [operator +] [number 1];')
  9. MT('openclose', '([bracket&tag <][tag foo][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])')
  10. MT('openclosefragment', '([bracket&tag <><][tag foo][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag ></>][operator ++])')
  11. MT('attr', "([bracket&tag <][tag foo] [attribute abc]=[string 'value'][bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])")
  12. MT('braced_attr', '([bracket&tag <][tag foo] [attribute abc]={[number 10]}[bracket&tag >]hello [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])')
  13. MT('braced_text', '([bracket&tag <][tag foo][bracket&tag >]hello {[number 10]} [atom &amp;][bracket&tag </][tag foo][bracket&tag >][operator ++])')
  14. MT('nested_tag', '([bracket&tag <][tag foo][bracket&tag ><][tag bar][bracket&tag ></][tag bar][bracket&tag ></][tag foo][bracket&tag >][operator ++])')
  15. MT(
  16. 'nested_jsx',
  17. '[keyword return] (',
  18. ' [bracket&tag <][tag foo][bracket&tag >]',
  19. ' say {[number 1] [operator +] [bracket&tag <][tag bar] [attribute attr]={[number 10]}[bracket&tag />]}!',
  20. ' [bracket&tag </][tag foo][bracket&tag >][operator ++]',
  21. ')'
  22. )
  23. MT('preserve_js_context', '[variable x] [operator =] [string-2 `quasi${][bracket&tag <][tag foo][bracket&tag />][string-2 }quoted`]')
  24. MT('string_interpolation', '[variable x] [operator =] [string-2 `quasi<code>${] [number 10] [string-2 }</code>`]')
  25. MT('line_comment', '([bracket&tag <][tag foo] [comment // hello]', ' [bracket&tag ></][tag foo][bracket&tag >][operator ++])')
  26. MT('line_comment_not_in_tag', '([bracket&tag <][tag foo][bracket&tag >] // hello', ' [bracket&tag </][tag foo][bracket&tag >][operator ++])')
  27. MT('block_comment', '([bracket&tag <][tag foo] [comment /* hello]', '[comment line 2]', '[comment line 3 */] [bracket&tag ></][tag foo][bracket&tag >][operator ++])')
  28. MT('block_comment_not_in_tag', '([bracket&tag <][tag foo][bracket&tag >]/* hello', ' line 2', ' line 3 */ [bracket&tag </][tag foo][bracket&tag >][operator ++])')
  29. MT('missing_attr', '([bracket&tag <][tag foo] [attribute selected][bracket&tag />][operator ++])')
  30. MT(
  31. 'indent_js',
  32. '([bracket&tag <][tag foo][bracket&tag >]',
  33. ' [bracket&tag <][tag bar] [attribute baz]={[keyword function]() {',
  34. ' [keyword return] [number 10]',
  35. ' }}[bracket&tag />]',
  36. ' [bracket&tag </][tag foo][bracket&tag >])'
  37. )
  38. MT('spread', '([bracket&tag <][tag foo] [attribute bar]={[meta ...][variable baz] [operator /][number 2]}[bracket&tag />])')
  39. MT('tag_attribute', '([bracket&tag <][tag foo] [attribute bar]=[bracket&tag <][tag foo][bracket&tag />/>][operator ++])')
  40. MT('in_array', '[[', ' [bracket&tag <][tag Something][bracket&tag />],', ' [string-2 `${][variable x][string-2 }`],', ' [variable y]', ']]')
  41. var ts_mode = CodeMirror.getMode({ indentUnit: 2 }, 'text/typescript-jsx')
  42. function TS(name) {
  43. test.mode(name, ts_mode, Array.prototype.slice.call(arguments, 1))
  44. }
  45. TS(
  46. 'tsx_react_integration',
  47. '[keyword interface] [def Props] {',
  48. ' [property foo]: [type string];',
  49. '}',
  50. '[keyword class] [def MyComponent] [keyword extends] [type React].[type Component] [operator <] [type Props], [type any] [operator >] {',
  51. ' [property render]() {',
  52. ' [keyword return] [bracket&tag <][tag span][bracket&tag >]{[keyword this].[property props].[property foo]}[bracket&tag </][tag span][bracket&tag >]',
  53. ' }',
  54. '}',
  55. '[bracket&tag <][tag MyComponent] [attribute foo]=[string "bar"] [bracket&tag />]; [comment //ok]',
  56. '[bracket&tag <][tag MyComponent] [attribute foo]={[number 0]} [bracket&tag />]; [comment //error]'
  57. )
  58. })()