Some checks failed
Test examples / Test Examples (20) (push) Has been cancelled
Test examples / Test Examples (22) (push) Has been cancelled
Lock Threads / action (push) Has been cancelled
Trigger Release / start (push) Has been cancelled
Stale issue handler / stale (push) Has been cancelled
Update Font Data / create-pull-request (push) Has been cancelled
build-and-deploy / deploy-target (push) Has been cancelled
build-and-deploy / build (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-musl - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-unknown-linux-gnu - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-pc-windows-msvc - node@16 (push) Has been cancelled
build-and-deploy / stable - aarch64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / stable - x86_64-apple-darwin - node@16 (push) Has been cancelled
build-and-deploy / build-wasm (nodejs) (push) Has been cancelled
build-and-deploy / build-wasm (web) (push) Has been cancelled
build-and-deploy / Deploy preview tarball (push) Has been cancelled
build-and-deploy / Potentially publish release (push) Has been cancelled
build-and-deploy / publish-turbopack-npm-packages (push) Has been cancelled
build-and-deploy / Deploy examples (push) Has been cancelled
build-and-deploy / thank you, build (push) Has been cancelled
build-and-deploy / Upload Turbopack Bytesize metrics to Datadog (push) Has been cancelled
Rspack Next.js development integration tests / Rspack integration tests (push) Has been cancelled
Rspack Next.js production integration tests / Rspack integration tests (push) Has been cancelled
Turbopack Next.js development integration tests / Next.js integration tests (push) Has been cancelled
Turbopack Next.js production integration tests / Next.js integration tests (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack development test manifest (push) Has been cancelled
Update Rspack test manifest / Update and upload Rspack production test manifest (push) Has been cancelled
Upload bundler test manifests to areweturboyet.com / Upload test results (push) Has been cancelled
Update React / create-pull-request (push) Has been cancelled
test-e2e-project-reset-cron / reset-test-project (push) Has been cancelled
Notify about the top 15 issues/PRs/feature requests (most reacted) in the last 90 days / run (push) Has been cancelled
98 lines
3.2 KiB
TypeScript
98 lines
3.2 KiB
TypeScript
import { nextTestSetup } from 'e2e-utils'
|
|
import { NEXT_RSC_UNION_QUERY } from 'next/dist/client/components/app-router-headers'
|
|
describe('app dir - css - experimental inline css', () => {
|
|
const { next, isNextDev } = nextTestSetup({
|
|
files: __dirname,
|
|
})
|
|
|
|
;(isNextDev ? describe.skip : describe)('Production only', () => {
|
|
it('should render page with correct styles', async () => {
|
|
const browser = await next.browser('/')
|
|
|
|
const inlineStyleTag = await browser.elementByCss('style')
|
|
expect(await inlineStyleTag.text()).toContain('color')
|
|
|
|
const p = await browser.elementByCss('p')
|
|
expect(await p.getComputedCss('color')).toBe('rgb(255, 255, 0)') // yellow
|
|
})
|
|
|
|
it('should not return rsc payload with inlined style as a dynamic client nav', async () => {
|
|
const rscPayload = await (
|
|
await next.fetch(`/a?${NEXT_RSC_UNION_QUERY}`, {
|
|
method: 'GET',
|
|
headers: {
|
|
rsc: '1',
|
|
},
|
|
})
|
|
).text()
|
|
|
|
const style = 'font-size'
|
|
|
|
expect(rscPayload).toContain('__PAGE__') // sanity check
|
|
expect(rscPayload).not.toContain(style)
|
|
|
|
expect(
|
|
await (
|
|
await next.fetch(`/a?${NEXT_RSC_UNION_QUERY}`, {
|
|
method: 'GET',
|
|
})
|
|
).text()
|
|
).toContain(style) // sanity check that HTML has the style
|
|
})
|
|
|
|
it('should have only one style tag when navigating from page with inlining to page without inlining', async () => {
|
|
const browser = await next.browser('/')
|
|
|
|
await browser.waitForElementByCss('#link-b').click()
|
|
await browser.waitForElementByCss('#page-b')
|
|
|
|
const styleTags = await browser.elementsByCss('style')
|
|
const linkTags = await browser.elementsByCss('link[rel="stylesheet"]')
|
|
|
|
expect(styleTags).toHaveLength(1)
|
|
expect(linkTags).toHaveLength(0)
|
|
})
|
|
|
|
it('should apply font styles correctly via className', async () => {
|
|
const browser = await next.browser('/')
|
|
|
|
const fontElement = await browser.elementByCss('#with-font')
|
|
const computedFontFamily = await fontElement.getComputedCss('fontFamily')
|
|
|
|
expect(computedFontFamily).toBeTruthy()
|
|
expect(computedFontFamily).not.toBe('Times')
|
|
})
|
|
|
|
it('should apply font styles correctly via CSS variable', async () => {
|
|
const browser = await next.browser('/')
|
|
|
|
const bodyElement = await browser.elementByCss('body')
|
|
const computedFontFamily = await bodyElement.getComputedCss('fontFamily')
|
|
|
|
expect(computedFontFamily).toBeTruthy()
|
|
expect(computedFontFamily).not.toBe('Times')
|
|
})
|
|
|
|
it('should inline font-face with absolute src URL', async () => {
|
|
const $ = await next.render$('/')
|
|
|
|
const styleTag = $('style')
|
|
expect(styleTag.length).toBeGreaterThan(0)
|
|
|
|
const styleContent = styleTag.html()
|
|
expect(styleContent).toMatch(/@font-face/)
|
|
expect(styleContent).toMatch(/font-family/)
|
|
|
|
const srcMatch = styleContent.match(/src:\s*url\(([^)]+)\)/)
|
|
expect(srcMatch).toBeTruthy()
|
|
|
|
const fontUrl = srcMatch[1].replace(/['"]/g, '')
|
|
expect(fontUrl).toMatch(/^\//)
|
|
|
|
const res = await next.fetch(fontUrl)
|
|
expect(res.status).toBe(200)
|
|
expect(res.headers.get('content-type')).toContain('font')
|
|
})
|
|
})
|
|
})
|