mirror of
https://github.com/pengzhanbo/vuepress-theme-plume.git
synced 2026-04-23 10:58:13 +08:00
132 lines
3.2 KiB
TypeScript
132 lines
3.2 KiB
TypeScript
import type { NpmToOptions } from '../src/shared/npmTo.js'
|
|
import MarkdownIt from 'markdown-it'
|
|
import { describe, expect, it } from 'vitest'
|
|
import { codeTabs } from '../src/node/container/codeTabs.js'
|
|
import { npmToPlugins, parseLine } from '../src/node/container/npmTo.js'
|
|
|
|
function createMarkdown(options?: NpmToOptions) {
|
|
return new MarkdownIt({
|
|
highlight: (str, lang) => `<div class="language-${lang}"><pre><code>${str}</code></pre></div>`,
|
|
}).use(codeTabs).use(npmToPlugins, options)
|
|
}
|
|
|
|
const FENCE = '```'
|
|
|
|
describe('npmToPlugin', () => {
|
|
const code = `\
|
|
::: npm-to
|
|
${FENCE}sh
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
npm install
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}shell
|
|
npm install
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}bash
|
|
npm install
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
cross-env NODE_ENV=production npm run docs
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
npm i -D package1 package2
|
|
npm i --save-peer package3
|
|
npm run docs
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
npm install && npm run docs
|
|
mkdir foo
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
npm run docs -- --clean-cache --clean-temp
|
|
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to tabs=","
|
|
${FENCE}sh
|
|
npm create vuepress-theme-plume@latest
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to tabs="npm,pnpm,yarn,bun,deno"
|
|
${FENCE}sh
|
|
npx vp-update
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
${FENCE}sh
|
|
mkdir foo
|
|
${FENCE}
|
|
:::
|
|
|
|
::: npm-to
|
|
anything
|
|
${FENCE}sh
|
|
${FENCE}
|
|
:::
|
|
`
|
|
it('should work with default options', () => {
|
|
const md = createMarkdown()
|
|
|
|
expect(md.render(code)).toMatchSnapshot()
|
|
})
|
|
|
|
it('should work width options: { tabs: [npm, yarn, pnpm] }', () => {
|
|
const md = createMarkdown({ tabs: ['npm', 'yarn', 'pnpm'] })
|
|
|
|
expect(md.render(code)).toMatchSnapshot()
|
|
})
|
|
|
|
it('should work width options: [npm, yarn, pnpm]', () => {
|
|
const md = createMarkdown(['npm', 'yarn', 'pnpm'])
|
|
|
|
expect(md.render(code)).toMatchSnapshot()
|
|
})
|
|
})
|
|
|
|
describe('parseLine', () => {
|
|
it('should work', () => {
|
|
expect(parseLine('npm install')).toMatchObject({ env: '', cli: 'npm install', cmd: '' })
|
|
expect(parseLine('npx vp-update')).toMatchObject({ env: '', cli: 'npx', cmd: 'vp-update' })
|
|
expect(parseLine('npx vp-update --foo')).toMatchObject({ env: '', cli: 'npx', cmd: 'vp-update', scriptArgs: '--foo' })
|
|
expect(parseLine('npm run docs')).toMatchObject({ env: '', cli: 'npm run', cmd: 'docs' })
|
|
expect(parseLine('npm i -D package1 -- --foo'))
|
|
.toMatchObject({ env: '', cli: 'npm i', cmd: 'package1', args: '-D', scriptArgs: '--foo' })
|
|
expect(parseLine('npm install -y')).toMatchObject({ env: '', cli: 'npm install', cmd: '', args: '-y' })
|
|
expect(parseLine('npm create vuepress-theme-plume my-blog')).toMatchObject({ env: '', cli: 'npm create', cmd: 'vuepress-theme-plume my-blog' })
|
|
expect(parseLine('npm create "vuepress-theme-plume my-blog"')).toMatchObject({ env: '', cli: 'npm create', cmd: '"vuepress-theme-plume my-blog"' })
|
|
expect(parseLine('npm create vuepress-theme-plume my-blog --foo -B')).toMatchObject({ env: '', cli: 'npm create', cmd: 'vuepress-theme-plume my-blog', args: '--foo -B' })
|
|
|
|
expect(parseLine('npm run -w="my-workspace" docs')).toMatchObject({ env: '', cli: 'npm run', cmd: 'docs', args: '-w="my-workspace"' })
|
|
})
|
|
|
|
it('should not match', () => {
|
|
expect(parseLine('mkdir foo')).toBe(false)
|
|
expect(parseLine('')).toBe(false)
|
|
})
|
|
})
|