import rule from '@next/eslint-plugin-next/lib/rules/no-page-custom-font' import { RuleTester } from 'eslint' ;(RuleTester as any).setDefaultConfig({ parserOptions: { ecmaVersion: 2018, sourceType: 'module', ecmaFeatures: { modules: true, jsx: true, }, }, }) const ruleTester = new RuleTester() const filename = 'pages/_document.js' ruleTester.run('no-page-custom-font', rule, { valid: [ { code: `import Document, { Html, Head } from "next/document"; class MyDocument extends Document { render() { return ( ); } } export default MyDocument;`, filename, }, { code: `import NextDocument, { Html, Head } from "next/document"; class Document extends NextDocument { render() { return ( ); } } export default Document; `, filename, }, { code: `export default function CustomDocument() { return ( ) }`, filename, }, { code: `function CustomDocument() { return ( ) } export default CustomDocument; `, filename, }, { code: ` import Document, { Html, Head } from "next/document"; class MyDocument { render() { return ( ); } } export default MyDocument;`, filename, }, { code: `export default function() { return ( ) }`, filename, }, ], invalid: [ { code: ` import Head from 'next/head' export default function IndexPage() { return (

Hello world!

) } `, filename: 'pages/index.tsx', errors: [ { message: 'Custom fonts not added in `pages/_document.js` will only load for a single page. This is discouraged. See: https://nextjs.org/docs/messages/no-page-custom-font', type: 'JSXOpeningElement', }, ], }, { code: ` import Head from 'next/head' function Links() { return ( <> ) } export default function IndexPage() { return (

Hello world!

) } `, filename, errors: [ { message: 'Using `` outside of `` will disable automatic font optimization. This is discouraged. See: https://nextjs.org/docs/messages/no-page-custom-font', }, { message: 'Using `` outside of `` will disable automatic font optimization. This is discouraged. See: https://nextjs.org/docs/messages/no-page-custom-font', }, ], }, ], })