@@ -23,25 +23,57 @@ import { expect, test } from 'vitest';
2323
2424import LinearProgress from './LinearProgress.svelte' ;
2525
26- test ( 'should render a progress element ' , ( ) => {
26+ test ( 'should render with role="progressbar" ' , ( ) => {
2727 render ( LinearProgress ) ;
28- const progress = screen . getByRole ( 'progressbar' ) ;
29- expect ( progress ) . toBeInTheDocument ( ) ;
28+ const progressBar = screen . getByRole ( 'progressbar' ) ;
29+ expect ( progressBar ) . toBeInTheDocument ( ) ;
3030} ) ;
3131
32- test ( 'should use color-registry text color instead of hardcoded Tailwind color ' , ( ) => {
32+ test ( 'should have correct ARIA attributes for indeterminate mode ' , ( ) => {
3333 render ( LinearProgress ) ;
34- const progress = screen . getByRole ( 'progressbar' ) ;
35- expect ( progress ) . toHaveClass ( 'text-(--pd-progressBar-text)' ) ;
36- expect ( progress ) . not . toHaveClass ( 'text-purple-500' ) ;
34+ const progressBar = screen . getByRole ( 'progressbar' ) ;
35+ expect ( progressBar ) . toHaveAttribute ( 'aria-valuemin' , '0' ) ;
36+ expect ( progressBar ) . toHaveAttribute ( 'aria-valuemax' , '100' ) ;
37+ expect ( progressBar ) . not . toHaveAttribute ( 'aria-valuenow' ) ;
3738} ) ;
3839
39- test ( 'should have full width and correct base classes' , ( ) => {
40+ test ( 'should use color-registry background token on outer container' , ( ) => {
41+ const { container } = render ( LinearProgress ) ;
42+ expect ( container . children [ 0 ] ) . toHaveClass ( 'bg-(--pd-progressBar-bg)' ) ;
43+ } ) ;
44+
45+ test ( 'should use color-registry tokens on animated bar' , ( ) => {
46+ render ( LinearProgress ) ;
47+ const progressBar = screen . getByRole ( 'progressbar' ) ;
48+ expect ( progressBar ) . toHaveClass ( 'bg-(--pd-progressBar-in-progress-bg)' ) ;
49+ expect ( progressBar ) . toHaveClass ( 'outline-(--pd-progressBar-in-progress-border)' ) ;
50+ } ) ;
51+
52+ test ( 'should have full width on outer container' , ( ) => {
53+ const { container } = render ( LinearProgress ) ;
54+ expect ( container . children [ 0 ] ) . toHaveClass ( 'w-full' ) ;
55+ } ) ;
56+
57+ test ( 'should have indeterminate animation class' , ( ) => {
4058 render ( LinearProgress ) ;
41- const progress = screen . getByRole ( 'progressbar' ) ;
42- expect ( progress ) . toHaveClass ( 'w-full' ) ;
43- expect ( progress ) . toHaveClass ( 'appearance-none' ) ;
44- expect ( progress ) . toHaveClass ( 'border-none' ) ;
45- expect ( progress ) . toHaveClass ( 'h-0.5' ) ;
46- expect ( progress ) . toHaveClass ( 'pure-material-progress-linear' ) ;
59+ const progressBar = screen . getByRole ( 'progressbar' ) ;
60+ expect ( progressBar ) . toHaveClass ( 'linear-progress-indeterminate' ) ;
61+ } ) ;
62+
63+ test ( 'should have high-contrast guide line element' , ( ) => {
64+ const { container } = render ( LinearProgress ) ;
65+ const outerDiv = container . children [ 0 ] ;
66+ const hcLine = outerDiv . querySelector ( '.bg-\\(--pd-progressBar-hc-line-bg\\)' ) ;
67+ expect ( hcLine ) . toBeInTheDocument ( ) ;
68+ } ) ;
69+
70+ test ( 'should propagate class to outer container' , ( ) => {
71+ const { container } = render ( LinearProgress , { class : 'custom-class' } ) ;
72+ expect ( container . children [ 0 ] ) . toHaveClass ( 'custom-class' ) ;
73+ } ) ;
74+
75+ test ( 'should propagate aria-label to progressbar element' , ( ) => {
76+ render ( LinearProgress , { 'aria-label' : 'Loading page' } ) ;
77+ const progressBar = screen . getByRole ( 'progressbar' ) ;
78+ expect ( progressBar ) . toHaveAttribute ( 'aria-label' , 'Loading page' ) ;
4779} ) ;
0 commit comments