Files
react-test/docs/src/theming.test.tsx
how2ice 005cf56baf
Some checks failed
No response / noResponse (push) Has been cancelled
CI / Continuous releases (push) Has been cancelled
CI / test-dev (macos-latest) (push) Has been cancelled
CI / test-dev (ubuntu-latest) (push) Has been cancelled
CI / test-dev (windows-latest) (push) Has been cancelled
Maintenance / main (push) Has been cancelled
Scorecards supply-chain security / Scorecards analysis (push) Has been cancelled
CodeQL / Analyze (push) Has been cancelled
init project
2025-12-12 14:26:25 +09:00

67 lines
2.1 KiB
TypeScript

import * as React from 'react';
import { expect } from 'chai';
import { createRenderer, fireEvent, screen } from '@mui/internal-test-utils';
import { ThemeProvider, createTheme, useColorScheme } from '@mui/material/styles';
import Box from '@mui/material/Box';
import { THEME_ID as JOY_THEME_ID, extendTheme } from '@mui/joy/styles';
import Button from '@mui/joy/Button';
import { DemoInstanceThemeProvider } from './theming';
function DarkMode() {
const { mode, setMode } = useColorScheme();
return <button onClick={() => setMode('dark')}>{mode}</button>;
}
function UpperProvider({ children }: React.PropsWithChildren) {
return (
<ThemeProvider
storageManager={null}
defaultMode="light"
theme={createTheme({ colorSchemes: { light: true, dark: true } })}
>
<DarkMode />
{children}
</ThemeProvider>
);
}
describe('docs demo theming', () => {
const { render } = createRenderer();
it('should inherit the theme.palette.mode from upper theme', () => {
render(
<UpperProvider>
<DemoInstanceThemeProvider runtimeTheme={undefined}>
<Box
data-testid="foo"
sx={(theme) => ({
mixBlendMode: theme.palette.mode === 'dark' ? 'darken' : 'lighten',
})}
/>
</DemoInstanceThemeProvider>
</UpperProvider>,
);
expect(screen.getByRole('button')).to.have.text('light');
expect(screen.getByTestId('foo')).toHaveComputedStyle({ mixBlendMode: 'lighten' });
fireEvent.click(screen.getByRole('button'));
expect(screen.getByRole('button')).to.have.text('dark');
expect(screen.getByTestId('foo')).toHaveComputedStyle({ mixBlendMode: 'darken' });
});
it('able to render Joy components if upper theme of Joy UI is scoped', () => {
const materialTheme = createTheme({ cssVariables: true });
expect(() =>
render(
<ThemeProvider theme={{ ...materialTheme, [JOY_THEME_ID]: extendTheme() }}>
<DemoInstanceThemeProvider runtimeTheme={undefined}>
<Button>Joy</Button>
</DemoInstanceThemeProvider>
</ThemeProvider>,
),
).not.to.throw();
});
});