diff --git a/packages/astro/test/astro-get-static-paths.test.js b/packages/astro/test/astro-get-static-paths.test.js index 9914eb938..6294e1926 100644 --- a/packages/astro/test/astro-get-static-paths.test.js +++ b/packages/astro/test/astro-get-static-paths.test.js @@ -51,7 +51,7 @@ describe('getStaticPaths - dev calls', () => { }); after(async () => { - devServer.stop(); + await devServer.stop(); }); it('only calls getStaticPaths once', async () => { diff --git a/packages/astro/test/astro-markdown-plugins.test.js b/packages/astro/test/astro-markdown-plugins.test.js index 63f6eda67..c545f3c7a 100644 --- a/packages/astro/test/astro-markdown-plugins.test.js +++ b/packages/astro/test/astro-markdown-plugins.test.js @@ -3,14 +3,20 @@ import * as cheerio from 'cheerio'; import { loadFixture } from './test-utils.js'; import addClasses from './fixtures/astro-markdown-plugins/add-classes.mjs'; -async function buildFixture(config) { - const fixture = await loadFixture({ - root: './fixtures/astro-markdown-plugins/', - ...config, - }); - await fixture.build(); - return fixture; -} +const defaultMarkdownConfig = { + gfm: true, + smartypants: true, + remarkPlugins: [ + remarkExamplePlugin, + 'remark-code-titles', + ['rehype-autolink-headings', { behavior: 'prepend' }], + ], + rehypePlugins: [ + 'rehype-slug', + ['rehype-toc', { headings: ['h2', 'h3'] }], + [addClasses, { 'h1,h2,h3': 'title' }], + ], +}; function remarkExamplePlugin() { return (tree) => { @@ -22,97 +28,96 @@ function remarkExamplePlugin() { } describe('Astro Markdown plugins', () => { - it('Can render markdown with plugins', async () => { - const fixture = await buildFixture({ - markdown: { - remarkPlugins: [ - 'remark-code-titles', - ['rehype-autolink-headings', { behavior: 'prepend' }], - ], - rehypePlugins: [ - 'rehype-slug', - ['rehype-toc', { headings: ['h2', 'h3'] }], - [addClasses, { 'h1,h2,h3': 'title' }], - ], - }, - }); - const html = await fixture.readFile('/index.html'); - const $ = cheerio.load(html); + describe('Default test plugins', () => { + let fixture; - // test 1: Added a TOC - expect($('.toc')).to.have.lengthOf(1); - - // test 2: Added .title to h1 - expect($('#hello-world').hasClass('title')).to.equal(true); - }); - - // Asserts Astro 1.0 behavior is removed. Test can be removed in Astro 3.0. - it('Still applies default plugins when user plugins are provided', async () => { - const fixture = await buildFixture({ - markdown: { - remarkPlugins: [remarkExamplePlugin], - rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]], - }, - }); - const gfmHtml = await fixture.readFile('/with-gfm/index.html'); - const $1 = cheerio.load(gfmHtml); - expect($1('a[href="https://example.com"]')).to.have.lengthOf(1); - - const smartypantsHtml = await fixture.readFile('/with-smartypants/index.html'); - const $2 = cheerio.load(smartypantsHtml); - expect($2('p').html()).to.equal('“Smartypants” is — awesome'); - - testRemark(gfmHtml); - testRehype(gfmHtml, '#github-flavored-markdown-test'); - }); - - for (const gfm of [true, false]) { - it(`Handles GFM when gfm = ${gfm}`, async () => { - const fixture = await buildFixture({ - markdown: { - remarkPlugins: [remarkExamplePlugin], - rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]], - gfm, - }, + before(async () => { + fixture = await loadFixture({ + root: './fixtures/astro-markdown-plugins/', + markdown: defaultMarkdownConfig, }); + await fixture.build(); + }); + + it('Can render markdown with plugins', async () => { + const html = await fixture.readFile('/index.html'); + const $ = cheerio.load(html); + + // test 1: Added a TOC + expect($('.toc')).to.have.lengthOf(1); + + // test 2: Added .title to h1 + expect($('#hello-world').hasClass('title')).to.equal(true); + }); + + // Asserts Astro 1.0 behavior is removed. Test can be removed in Astro 3.0. + it('Still applies default plugins when user plugins are provided', async () => { + const gfmHtml = await fixture.readFile('/with-gfm/index.html'); + const $1 = cheerio.load(gfmHtml); + expect($1('a[href="https://example.com"]')).to.have.lengthOf(1); + + const smartypantsHtml = await fixture.readFile('/with-smartypants/index.html'); + const $2 = cheerio.load(smartypantsHtml); + expect($2('p').html()).to.equal('“Smartypants” is — awesome'); + + testRemark(gfmHtml); + testRehype(gfmHtml, '#github-flavored-markdown-test'); + }); + + it(`Handles GFM when gfm = true`, async () => { const html = await fixture.readFile('/with-gfm/index.html'); const $ = cheerio.load(html); // test 1: GFM autolink applied correctly - if (gfm === true) { - expect($('a[href="https://example.com"]')).to.have.lengthOf(1); - } else { - expect($('a[href="https://example.com"]')).to.have.lengthOf(0); - } + expect($('a[href="https://example.com"]')).to.have.lengthOf(1); testRemark(html); testRehype(html, '#github-flavored-markdown-test'); }); - } - for (const smartypants of [true, false]) { - it(`Handles SmartyPants when smartypants = ${smartypants}`, async () => { - const fixture = await buildFixture({ - markdown: { - remarkPlugins: [remarkExamplePlugin], - rehypePlugins: [[addClasses, { 'h1,h2,h3': 'title' }]], - smartypants, - }, - }); + it(`Handles SmartyPants when smartypants = true`, async () => { const html = await fixture.readFile('/with-smartypants/index.html'); const $ = cheerio.load(html); - // test 1: GFM autolink applied correctly - if (smartypants === true) { - expect($('p').html()).to.equal('“Smartypants” is — awesome'); - } else { - expect($('p').html()).to.equal('"Smartypants" is -- awesome'); - } + // test 1: smartypants applied correctly + expect($('p').html()).to.equal('“Smartypants” is — awesome'); testRemark(html); testRehype(html, '#smartypants-test'); }); - } + }); + + it(`Handles GFM when gfm = false`, async () => { + const fixture = await loadFixture({ + root: './fixtures/astro-markdown-plugins/', + markdown: { ...defaultMarkdownConfig, gfm: false }, + }); + await fixture.build(); + + const html = await fixture.readFile('/with-gfm/index.html'); + const $ = cheerio.load(html); + + expect($('a[href="https://example.com"]')).to.have.lengthOf(0); + + testRemark(html); + testRehype(html, '#github-flavored-markdown-test'); + }); + + it(`Handles SmartyPants when smartypants = false`, async () => { + const fixture = await loadFixture({ + root: './fixtures/astro-markdown-plugins/', + markdown: { ...defaultMarkdownConfig, smartypants: false }, + }); + await fixture.build(); + + const html = await fixture.readFile('/with-smartypants/index.html'); + const $ = cheerio.load(html); + + expect($('p').html()).to.equal('"Smartypants" is -- awesome'); + + testRemark(html); + testRehype(html, '#smartypants-test'); + }); }); function testRehype(html, headingId) { diff --git a/packages/astro/test/cli.test.js b/packages/astro/test/cli.test.js index 09918a451..7626cc495 100644 --- a/packages/astro/test/cli.test.js +++ b/packages/astro/test/cli.test.js @@ -183,23 +183,3 @@ describe('astro cli', () => { }); }); }); - -describe('astro cli i18n', () => { - const LOCALES = ['en_US', 'sv_SE', 'es_419.UTF-8', 'es_ES@euro', 'C']; - LOCALES.forEach((locale) => { - it(`astro does NOT throw on "${locale}" locales`, async () => { - const projectRootURL = new URL('./fixtures/astro-basic/', import.meta.url); - let error = null; - try { - const proc = cli('dev', '--root', fileURLToPath(projectRootURL), { - env: { LANG: locale }, - }); - await parseCliDevStart(proc); - } catch (e) { - console.log(e); - error = e.message; - } - expect(error).to.be.null; - }); - }); -}); diff --git a/packages/astro/test/client-address.test.js b/packages/astro/test/client-address.test.js index a3c65835d..e351b44cd 100644 --- a/packages/astro/test/client-address.test.js +++ b/packages/astro/test/client-address.test.js @@ -1,7 +1,6 @@ import { expect } from 'chai'; -import { loadFixture } from './test-utils.js'; +import { loadFixture, silentLogging } from './test-utils.js'; import testAdapter from './test-adapter.js'; -import { nodeLogDestination } from '../dist/core/logger/node.js'; import * as cheerio from 'cheerio'; describe('Astro.clientAddress', () => { @@ -110,11 +109,7 @@ describe('Astro.clientAddress', () => { before(async () => { // We expect an error, so silence the output - const logging = { - dest: nodeLogDestination, - level: 'silent', - }; - devServer = await fixture.startDevServer({ logging }); + devServer = await fixture.startDevServer({ logging: silentLogging }); }); after(async () => { diff --git a/packages/astro/test/core-image.test.js b/packages/astro/test/core-image.test.js index 4fec48284..f7a537e98 100644 --- a/packages/astro/test/core-image.test.js +++ b/packages/astro/test/core-image.test.js @@ -2,10 +2,10 @@ import { expect } from 'chai'; import * as cheerio from 'cheerio'; import { basename } from 'node:path'; import { Writable } from 'node:stream'; -import { fileURLToPath } from 'node:url'; import { removeDir } from '../dist/core/fs/index.js'; import testAdapter from './test-adapter.js'; import { loadFixture } from './test-utils.js'; +import { testImageService } from './test-image-service.js'; describe('astro:image', () => { /** @type {import('./test-utils').Fixture} */ @@ -23,6 +23,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService({ foo: 'bar' }), + }, }); devServer = await fixture.startDevServer({ @@ -377,6 +380,32 @@ describe('astro:image', () => { expect($('img').attr('src').includes('/src')).to.equal(true); }); }); + + describe('custom service', () => { + it('custom service implements getHTMLAttributes', async () => { + const response = await fixture.fetch('/'); + const html = await response.text(); + + const $ = cheerio.load(html); + expect($('#local img').attr('data-service')).to.equal('my-custom-service'); + }); + + it('custom service works in Markdown', async () => { + const response = await fixture.fetch('/post'); + const html = await response.text(); + + const $ = cheerio.load(html); + expect($('img').attr('data-service')).to.equal('my-custom-service'); + }); + + it('gets service config', async () => { + const response = await fixture.fetch('/'); + const html = await response.text(); + + const $ = cheerio.load(html); + expect($('#local img').attr('data-service-config')).to.equal('bar'); + }); + }); }); describe('proper errors', () => { @@ -391,6 +420,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, }); devServer = await fixture.startDevServer({ @@ -456,6 +488,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, base: '/blog', }); await fixture.build(); @@ -509,6 +544,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, base: '/blog', }); await fixtureWithBase.build(); @@ -530,6 +568,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, }); // Remove cache directory removeDir(new URL('./fixtures/core-image-ssg/node_modules/.astro', import.meta.url)); @@ -693,6 +734,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, }); devServer = await fixture.startDevServer(); }); @@ -717,6 +761,9 @@ describe('astro:image', () => { experimental: { assets: true, }, + image: { + service: testImageService(), + }, }); await fixture.build(); }); @@ -746,50 +793,4 @@ describe('astro:image', () => { expect(imgData).to.be.an.instanceOf(Buffer); }); }); - - describe('custom service', () => { - /** @type {import('./test-utils').DevServer} */ - let devServer; - before(async () => { - fixture = await loadFixture({ - root: './fixtures/core-image/', - experimental: { - assets: true, - }, - image: { - service: { - entrypoint: fileURLToPath( - new URL('./fixtures/core-image/service.mjs', import.meta.url) - ), - config: { foo: 'bar' }, - }, - }, - }); - devServer = await fixture.startDevServer(); - }); - - it('custom service implements getHTMLAttributes', async () => { - const response = await fixture.fetch('/'); - const html = await response.text(); - - const $ = cheerio.load(html); - expect($('#local img').attr('data-service')).to.equal('my-custom-service'); - }); - - it('custom service works in Markdown', async () => { - const response = await fixture.fetch('/post'); - const html = await response.text(); - - const $ = cheerio.load(html); - expect($('img').attr('data-service')).to.equal('my-custom-service'); - }); - - it('gets service config', async () => { - const response = await fixture.fetch('/'); - const html = await response.text(); - - const $ = cheerio.load(html); - expect($('#local img').attr('data-service-config')).to.equal('bar'); - }); - }); }); diff --git a/packages/astro/test/fixtures/core-image/service.mjs b/packages/astro/test/fixtures/core-image/service.mjs deleted file mode 100644 index 646622f51..000000000 --- a/packages/astro/test/fixtures/core-image/service.mjs +++ /dev/null @@ -1,23 +0,0 @@ -import squoosh from 'astro/assets/services/squoosh'; - -const service = { - validateOptions(options) { - return squoosh.validateOptions(options); - }, - getURL(options) { - return squoosh.getURL(options); - }, - getHTMLAttributes(options, serviceConfig) { - options['data-service'] = 'my-custom-service'; - options['data-service-config'] = serviceConfig.foo; - return squoosh.getHTMLAttributes(options); - }, - parseURL(url) { - return squoosh.parseURL(url); - }, - transform(buffer, options) { - return squoosh.transform(buffer, options); - }, -}; - -export default service; diff --git a/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro b/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro index 5ed54c3b8..36f64e846 100644 --- a/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro +++ b/packages/astro/test/fixtures/reexport-astro-containing-client-component/src/pages/index.astro @@ -4,6 +4,6 @@ import { One as OneWrapper } from '../components/One';
', () => {
it('uses the bundles themes for built-in themes', async () => {
const { resolveHighlighterOptions } = mod;
- const opts = await resolveHighlighterOptions({ theme: 'css-variables' });
+ // NOTE: pass empty `langs` to prevent Shiki from loading all langs by default, which slows down the test
+ const opts = await resolveHighlighterOptions({ theme: 'css-variables', langs: [] });
const themes = opts.themes;
expect(themes).to.have.a.lengthOf(1);
@@ -29,7 +30,8 @@ describe('
', () => {
it('uses the string theme name for custom themes', async () => {
const { resolveHighlighterOptions } = mod;
- const opts = await resolveHighlighterOptions({ theme: 'some-custom-theme' });
+ // NOTE: pass empty `langs` to prevent Shiki from loading all langs by default, which slows down the test
+ const opts = await resolveHighlighterOptions({ theme: 'some-custom-theme', langs: [] });
const themes = opts.themes;
expect(themes).to.have.a.lengthOf(1);