@@ -1873,6 +1873,30 @@ describe('Test CSS Type: @media queries', () => {
1873
1873
expect ( MediaQuery . parser . parseToEnd ( query ) . toString ( ) ) . toEqual ( query ) ;
1874
1874
} ) ;
1875
1875
1876
+ // nested not queries are broken
1877
+ test . skip ( '@media not (not (not (min-width: 400px)))' , ( ) => {
1878
+ const query = '@media not (not (not (min-width: 400px)))' ;
1879
+ const mediaQuery = MediaQuery . parser . parseToEnd ( query ) ;
1880
+ expect ( mediaQuery ) . toMatchInlineSnapshot ( `
1881
+ MediaQuery {
1882
+ "queries": {
1883
+ "rule": {
1884
+ "key": "min-width",
1885
+ "type": "pair",
1886
+ "value": {
1887
+ "signCharacter": undefined,
1888
+ "type": "integer",
1889
+ "unit": "px",
1890
+ "value": 400,
1891
+ },
1892
+ },
1893
+ "type": "not",
1894
+ },
1895
+ }
1896
+ ` ) ;
1897
+ expect ( mediaQuery . toString ( ) ) . toEqual ( '@media (min-width: 400px)' ) ;
1898
+ } ) ;
1899
+
1876
1900
// not queries with multiple clauses are broken
1877
1901
test . skip ( '@media not ((min-width: 500px) and (max-width: 600px) and (max-width: 400px))' , ( ) => {
1878
1902
const query =
@@ -1918,4 +1942,70 @@ describe('Test CSS Type: @media queries', () => {
1918
1942
` ) ;
1919
1943
expect ( MediaQuery . parser . parseToEnd ( query ) . toString ( ) ) . toEqual ( query ) ;
1920
1944
} ) ;
1945
+ test ( 'flattens nested and rules' , ( ) => {
1946
+ const query =
1947
+ '@media (min-width: 400px) and ((max-width: 700px) and (orientation: landscape))' ;
1948
+ const mediaQuery = MediaQuery . parser . parseToEnd ( query ) ;
1949
+ expect ( mediaQuery ) . toMatchInlineSnapshot ( `
1950
+ MediaQuery {
1951
+ "queries": {
1952
+ "rules": [
1953
+ {
1954
+ "key": "min-width",
1955
+ "type": "pair",
1956
+ "value": {
1957
+ "signCharacter": undefined,
1958
+ "type": "integer",
1959
+ "unit": "px",
1960
+ "value": 400,
1961
+ },
1962
+ },
1963
+ {
1964
+ "key": "max-width",
1965
+ "type": "pair",
1966
+ "value": {
1967
+ "signCharacter": undefined,
1968
+ "type": "integer",
1969
+ "unit": "px",
1970
+ "value": 700,
1971
+ },
1972
+ },
1973
+ {
1974
+ "key": "orientation",
1975
+ "type": "pair",
1976
+ "value": "landscape",
1977
+ },
1978
+ ],
1979
+ "type": "and",
1980
+ },
1981
+ }
1982
+ ` ) ;
1983
+ expect ( mediaQuery . toString ( ) ) . toEqual (
1984
+ '@media (min-width: 400px) and (max-width: 700px) and (orientation: landscape)' ,
1985
+ ) ;
1986
+ } ) ;
1987
+
1988
+ // blocked by double not fix above
1989
+ test . skip ( 'removes duplicate nots' , ( ) => {
1990
+ const query = '@media not (not (min-width: 400px))' ;
1991
+ const mediaQuery = MediaQuery . parser . parseToEnd ( query ) ;
1992
+ expect ( mediaQuery ) . toMatchInlineSnapshot ( `
1993
+ MediaQuery {
1994
+ "queries": {
1995
+ "rule": {
1996
+ "key": "min-width",
1997
+ "type": "pair",
1998
+ "value": {
1999
+ "signCharacter": undefined,
2000
+ "type": "integer",
2001
+ "unit": "px",
2002
+ "value": 400,
2003
+ },
2004
+ },
2005
+ "type": "not",
2006
+ },
2007
+ }
2008
+ ` ) ;
2009
+ expect ( mediaQuery . toString ( ) ) . toEqual ( '@media (min-width: 400px)' ) ;
2010
+ } ) ;
1921
2011
} ) ;
0 commit comments