--- /dev/null
+Describe lsp#uivim#code_lens
+ Describe lsp#ui#vim#code_lens#_get_subtitle
+ It should generate subtitle from response of rust-analyzer
+ " Example response of Code Lens extracted from #1118
+ let item = {
+ \ 'codelens': {
+ \ 'command': {
+ \ 'arguments': [
+ \ {
+ \ 'args': {
+ \ 'cargoArgs': ['test', '--package', 'tmp', '--lib'],
+ \ 'cargoExtraArgs': [],
+ \ 'executableArgs': ['tests::it_works', '--exact', '--nocapture'],
+ \ 'overrideCargo': v:null,
+ \ 'workspaceRoot': '/tmp'
+ \ },
+ \ 'kind': 'cargo',
+ \ 'label': 'test tests::it_works',
+ \ 'location': {
+ \ 'targetRange': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}},
+ \ 'targetSelectionRange': {'end': {'character': 15, 'line': 12}, 'start': {'character': 7, 'line': 12}},
+ \ 'targetUri': 'file:////tmp/src/lib.rs'
+ \ }
+ \ }
+ \ ],
+ \ 'command': 'rust-analyzer.runSingle',
+ \ 'title': '▶︎ Run Test'
+ \ },
+ \ 'range': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}}
+ \ },
+ \ 'server': 'rust-analyzer'
+ \ }
+
+ let subtitle = lsp#ui#vim#code_lens#_get_subtitle(item)
+ Assert Equals(subtitle, ': test tests::it_works')
+ End
+
+ It should generate subtitle from multiple labels of command arguments
+ let item = {
+ \ 'codelens': {
+ \ 'command': {
+ \ 'arguments': [
+ \ {
+ \ 'args': {},
+ \ 'kind': 'kind1',
+ \ 'label': 'do command1',
+ \ 'location': {}
+ \ },
+ \ {
+ \ 'args': {},
+ \ 'kind': 'kind2',
+ \ 'label': 'do command2',
+ \ 'location': {}
+ \ }
+ \ ],
+ \ 'command': 'server.someCommand',
+ \ 'title': 'lens title'
+ \ },
+ \ 'range': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}}
+ \ },
+ \ 'server': 'rust-analyzer'
+ \ }
+
+ let subtitle = lsp#ui#vim#code_lens#_get_subtitle(item)
+ Assert Equals(subtitle, ': do command1 > do command2')
+ End
+
+ It should return empty string when 'arguments' field is not found
+ let item = {
+ \ 'codelens': {
+ \ 'command': {
+ \ 'command': 'server.someCommand',
+ \ 'title': 'lens title'
+ \ },
+ \ 'range': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}}
+ \ },
+ \ 'server': 'rust-analyzer'
+ \ }
+
+ let subtitle = lsp#ui#vim#code_lens#_get_subtitle(item)
+ Assert Equals(subtitle, '')
+ End
+
+ It should return empty string when 'arguments' field is not an object
+ let item = {
+ \ 'codelens': {
+ \ 'command': {
+ \ 'arguments': [
+ \ 'command1',
+ \ 'command2',
+ \ 'command3'
+ \ ],
+ \ 'command': 'server.someCommand',
+ \ 'title': 'lens title'
+ \ },
+ \ 'range': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}}
+ \ },
+ \ 'server': 'rust-analyzer'
+ \ }
+
+ let subtitle = lsp#ui#vim#code_lens#_get_subtitle(item)
+ Assert Equals(subtitle, '')
+ End
+
+ It should return empty string when at least one of elements in 'arguments' field does not have 'label' field
+ let item = {
+ \ 'codelens': {
+ \ 'command': {
+ \ 'arguments': [
+ \ {
+ \ 'args': {},
+ \ 'kind': 'kind1',
+ \ 'label': 'do command1',
+ \ 'location': {}
+ \ },
+ \ {
+ \ 'args': {},
+ \ 'kind': 'kind2',
+ \ 'location': {}
+ \ }
+ \ ],
+ \ 'command': 'server.someCommand',
+ \ 'title': 'lens title'
+ \ },
+ \ 'range': {'end': {'character': 5, 'line': 14}, 'start': {'character': 4, 'line': 11}}
+ \ },
+ \ 'server': 'rust-analyzer'
+ \ }
+
+ let subtitle = lsp#ui#vim#code_lens#_get_subtitle(item)
+ Assert Equals(subtitle, '')
+ End
+ End
+End