| const { parse } = require('../../lib/index.cjs'); |
| |
| test('description only', () => { |
| const parsed = parse(` |
| /** |
| * Description |
| */`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' * Description', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('description one-liner', () => { |
| const parsed = parse(` |
| /** Description */ |
| var a`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /** Description */', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description ', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('block closed on same line', () => { |
| const parsed = parse(` |
| /** |
| * Description */`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' * Description */', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description ', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('no mid stars', () => { |
| const parsed = parse(` |
| /** |
| Description |
| */`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' Description', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('skip surrounding empty lines while preserving line numbers', () => { |
| const parsed = parse(` |
| /** |
| * |
| * |
| * Description first line |
| * |
| * Description second line |
| * |
| */ |
| var a`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description first line Description second line', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' * Description first line', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description first line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 5, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 6, |
| source: ' * Description second line', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description second line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 7, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 8, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('description on the first line', () => { |
| const parsed = parse(` |
| /** Description first line |
| * |
| * Description second line |
| */ |
| var a`); |
| expect(parsed).toEqual([ |
| { |
| description: 'Description first line Description second line', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /** Description first line', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description first line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * Description second line', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description second line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('multiple blocks', () => { |
| const parsed = parse(` |
| /** |
| * Description first line |
| */ |
| var a |
| |
| /** |
| * Description second line |
| */ |
| var b`); |
| |
| expect(parsed).toHaveLength(2); |
| |
| expect(parsed).toEqual([ |
| { |
| description: 'Description first line', |
| tags: [], |
| source: [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' * Description first line', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description first line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| { |
| description: 'Description second line', |
| tags: [], |
| source: [ |
| { |
| number: 6, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 7, |
| source: ' * Description second line', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'Description second line', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 8, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ], |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('skip `/* */` blocks', () => { |
| const parsed = parse(` |
| /* |
| * |
| */ |
| var a`); |
| expect(parsed).toHaveLength(0); |
| }); |
| |
| test('skip `/*** */` blocks', () => { |
| const parsed = parse(` |
| /*** |
| * |
| */ |
| var a`); |
| expect(parsed).toHaveLength(0); |
| }); |
| |
| test('tag only one-liner', () => { |
| const parsed = parse(`/** @my-tag */`); |
| const source = [ |
| { |
| number: 0, |
| source: '/** @my-tag */', |
| tokens: { |
| start: '', |
| delimiter: '/**', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: '', |
| type: '', |
| optional: false, |
| description: '', |
| problems: [], |
| source, |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag only', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: '', |
| type: '', |
| optional: false, |
| description: '', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag and type only', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type}', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: '', |
| postName: '', |
| type: '{my.type}', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: '', |
| type: 'my.type', |
| optional: false, |
| description: '', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag and name only', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag my-name |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag my-name', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: '', |
| optional: false, |
| description: '', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag, type, and name', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} my-name |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type} my-name', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: '', |
| type: '{my.type}', |
| postType: ' ', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: '', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag, type, name, and description', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} my-name description text |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type} my-name description text', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: ' ', |
| type: '{my.type}', |
| postType: ' ', |
| description: 'description text', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: 'description text', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('description contains /**', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} my-name description text /** |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type} my-name description text /**', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: ' ', |
| type: '{my.type}', |
| postType: ' ', |
| description: 'description text /**', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: 'description text /**', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag, type, name, and description separated by mixed spaces', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag\t {my.type}\t my-name\t description text |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag\t {my.type}\t my-name\t description text', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: '\t ', |
| name: 'my-name', |
| postName: '\t ', |
| type: '{my.type}', |
| postType: '\t ', |
| description: 'description text', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: 'description text', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('tag with multiline description', () => { |
| const parsed = parse(` |
| /** |
| * @my-tag {my.type} my-name description line 1 |
| * description line 2 |
| * description line 3 |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' * @my-tag {my.type} my-name description line 1', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: ' ', |
| type: '{my.type}', |
| postType: ' ', |
| description: 'description line 1', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * description line 2', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'description line 2', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' * description line 3', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'description line 3', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 5, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: |
| 'description line 1 description line 2 description line 3', |
| problems: [], |
| source: source.slice(1), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('optional name', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} [my-name] description text |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type} [my-name] description text', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: '[my-name]', |
| postName: ' ', |
| type: '{my.type}', |
| postType: ' ', |
| description: 'description text', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: true, |
| description: 'description text', |
| problems: [], |
| source: source.slice(2), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |
| |
| test('report name errors', () => { |
| const parsed = parse(` |
| /** |
| * |
| * @my-tag {my.type} [my-name description text |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: ' *', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' * @my-tag {my.type} [my-name description text', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: '', |
| postName: '', |
| type: '{my.type}', |
| postType: ' ', |
| description: '[my-name description text', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| const problems = [ |
| { |
| code: 'spec:name:unpaired-brackets', |
| critical: true, |
| message: 'unpaired brackets', |
| line: 3, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: '', |
| type: 'my.type', |
| optional: false, |
| description: '', |
| source: source.slice(2), |
| problems, |
| }, |
| ], |
| source, |
| problems, |
| }, |
| ]); |
| }); |
| |
| test('misaligned block', () => { |
| const parsed = parse(` |
| /** |
| * @my-tag {my.type} my-name description line 1 |
| description line 2 |
| * description line 3 |
| */ |
| var a`); |
| const source = [ |
| { |
| number: 1, |
| source: ' /**', |
| tokens: { |
| start: ' ', |
| delimiter: '/**', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 2, |
| source: '* @my-tag {my.type} my-name description line 1', |
| tokens: { |
| start: '', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '@my-tag', |
| postTag: ' ', |
| name: 'my-name', |
| postName: ' ', |
| type: '{my.type}', |
| postType: ' ', |
| description: 'description line 1', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 3, |
| source: ' description line 2', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'description line 2', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 4, |
| source: ' * description line 3', |
| tokens: { |
| start: ' ', |
| delimiter: '*', |
| postDelimiter: ' ', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: 'description line 3', |
| end: '', |
| lineEnd: '', |
| }, |
| }, |
| { |
| number: 5, |
| source: ' */', |
| tokens: { |
| start: ' ', |
| delimiter: '', |
| postDelimiter: '', |
| tag: '', |
| postTag: '', |
| name: '', |
| postName: '', |
| type: '', |
| postType: '', |
| description: '', |
| end: '*/', |
| lineEnd: '', |
| }, |
| }, |
| ]; |
| expect(parsed).toEqual([ |
| { |
| description: '', |
| tags: [ |
| { |
| tag: 'my-tag', |
| name: 'my-name', |
| type: 'my.type', |
| optional: false, |
| description: |
| 'description line 1 description line 2 description line 3', |
| problems: [], |
| source: source.slice(1), |
| }, |
| ], |
| source, |
| problems: [], |
| }, |
| ]); |
| }); |