Some checks failed
Verify / Install node dependencies (push) Failing after 2s
Verify / Build packages (push) Has been skipped
Verify / Check linting & formatting (push) Has been skipped
Verify / Run unit tests (push) Has been skipped
Verify / Run e2e tests (shard 1/4) (push) Has been skipped
Verify / Run e2e tests (shard 2/4) (push) Has been skipped
Verify / Run e2e tests (shard 3/4) (push) Has been skipped
Verify / Run e2e tests (shard 4/4) (push) Has been skipped
Publish / Resolve publish config (push) Failing after 2s
Publish / Send notification to Slack (push) Has been skipped
Publish / Send failure notification to Slack (push) Failing after 8s
Verify / Merge e2e reports (push) Has been skipped
Publish / Build (push) Has been skipped
Publish / Bump Versions OR Release to Registry (push) Has been skipped
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import { Mention } from './mention.js'
|
|
import { describe, expect, it } from 'vite-plus/test'
|
|
|
|
describe('mention Markdown', () => {
|
|
it('parses mapped attributes', () => {
|
|
const tokenizer = Mention.config.markdownTokenizer
|
|
expect(tokenizer).toBeDefined()
|
|
|
|
const token = tokenizer?.tokenize('[@ id="feature" char="#"]', [], null as any)
|
|
|
|
expect(token).toMatchObject({
|
|
attributes: {
|
|
id: 'feature',
|
|
mentionSuggestionChar: '#',
|
|
},
|
|
})
|
|
})
|
|
|
|
it('parses malformed attributes in linear time', () => {
|
|
const tokenizer = Mention.config.markdownTokenizer
|
|
expect(tokenizer).toBeDefined()
|
|
|
|
const measure = (attributes: string) => {
|
|
const startedAt = performance.now()
|
|
tokenizer?.tokenize(`[@ ${attributes}]`, [], null as any)
|
|
return performance.now() - startedAt
|
|
}
|
|
|
|
measure('warmup="true"')
|
|
const sizes = [12_288, 24_576]
|
|
sizes.forEach(size => {
|
|
const attack = '0'.repeat(size)
|
|
const control = '-'.repeat(attack.length)
|
|
const controlDuration = measure(control)
|
|
const attackDuration = measure(attack)
|
|
|
|
expect(attackDuration).toBeLessThan(controlDuration * 20 + 100)
|
|
})
|
|
})
|
|
|
|
it('only parses attributes at attribute boundaries', () => {
|
|
const tokenizer = Mention.config.markdownTokenizer
|
|
|
|
const token = tokenizer?.tokenize('[@ id="feature" prefix:char="#"]', [], null as any)
|
|
|
|
expect(token).toMatchObject({ attributes: { id: 'feature' } })
|
|
})
|
|
})
|