chrome-devtools-frontend
Version:
Chrome DevTools UI
217 lines (186 loc) • 5.67 kB
text/typescript
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import * as FormatterWorker from './formatter_worker.js';
function formatCSS(text: string): string {
return FormatterWorker.FormatterWorker.format('text/css', text, ' ').content;
}
describe('CSSFormatter', () => {
it('formats simple selector correctly', () => {
const formattedCode = formatCSS('a{color:red;}');
assert.strictEqual(formattedCode, `a {
color: red;
}
`);
});
it('formats selector with quotes', () => {
const formattedCode = formatCSS('a[href=\'/\']');
assert.strictEqual(formattedCode, 'a[href=\'/\']');
});
it('formats compound selector', () => {
const formattedCode = formatCSS('#content > a:hover');
assert.strictEqual(formattedCode, '#content > a:hover');
});
it('formats color values', () => {
const formattedCode = formatCSS(
'p { color: color; red: red; color: #000; color: #FFF; color: #123AbC; color: #faebfe; color:papayawhip; }');
assert.strictEqual(formattedCode, `p {
color: color;
red: red;
color: #000;
color: #FFF;
color: #123AbC;
color: #faebfe;
color: papayawhip;
}
`);
});
it('formats important declaration', () => {
const formattedCode = formatCSS('p { margin: -10px !important; }');
assert.strictEqual(formattedCode, `p {
margin: -10px !important;
}
`);
});
it('formats with comments correctly', () => {
const formattedCode =
formatCSS('a { /* pre-comment */ color /* after name */ : /* before value */ red /* post-comment */ }');
assert.strictEqual(formattedCode, `a {
/* pre-comment */
color /* after name */ : /* before value */ red /* post-comment */
}
`);
});
it('formats media queries correctly', () => {
const formattedCode = formatCSS(
'@media screen{ html{color:green;foo-property:bar-value}} body{background-color:black;} @media screen,print{body{line-height:1.2}}span{line-height:10px}');
assert.strictEqual(formattedCode, `@media screen {
html {
color: green;
foo-property: bar-value
}
}
body {
background-color: black;
}
@media screen,print {
body {
line-height: 1.2
}
}
span {
line-height: 10px
}
`);
});
it('formats styles with prepending new lines correctly', () => {
const formattedCode = formatCSS(`
div { color: red; }`);
assert.strictEqual(formattedCode, `div {
color: red;
}
`);
});
it('formats complex selectors correctly', () => {
const formattedCode = formatCSS('a.b.c:hover,.d.e.f.g::before,h.i{color:red;}');
assert.strictEqual(formattedCode, `a.b.c:hover,.d.e.f.g::before,h.i {
color: red;
}
`);
});
it('formats font-face selectors correctly', () => {
const formattedCode = formatCSS(
'@font-face{font-family:MyHelvetica;src:local(\'Helvetica Neue Bold\'),local(\'HelveticaNeue-Bold\'),url(MgOpenModernaBold.ttf);font-weight:bold;}div{color:red}');
assert.strictEqual(formattedCode, `@font-face {
font-family: MyHelvetica;
src: local(\'Helvetica Neue Bold\'),local(\'HelveticaNeue-Bold\'),url(MgOpenModernaBold.ttf);
font-weight: bold;
}
div {
color: red
}
`);
});
it('formats charset rule correctly', () => {
const formattedCode = formatCSS('@charset \'iso-8859-15\';p{margin:0}');
assert.strictEqual(formattedCode, `@charset \'iso-8859-15\';p {
margin: 0
}
`);
});
it('formats import rule correctly', () => {
const formattedCode = formatCSS('@import url(\'bluish.css\') projection,tv;span{border:1px solid black}');
assert.strictEqual(formattedCode, `@import url(\'bluish.css\') projection,tv;span {
border: 1px solid black
}
`);
});
it('formats import rule with media query correctly', () => {
const formattedCode =
formatCSS('@import url(\'landscape.css\') screen and (orientation:landscape);article{background:yellow}');
assert.strictEqual(formattedCode, `@import url(\'landscape.css\') screen and (orientation: landscape);
article {
background: yellow
}
`);
});
it('formats import rule with media query correctly', () => {
const formattedCode = formatCSS(
'p{animation-duration:3s;}@keyframes slidein{from{margin-left:100%;width:300%;}to{margin-left:0%;width:100%;}}p{animation-name:slidein}');
assert.strictEqual(formattedCode, `p {
animation-duration: 3s;
}
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
p {
animation-name: slidein
}
`);
});
it('formats namespace rule correctly', () => {
const formattedCode = formatCSS('@namespace svg url(http://www.w3.org/2000/svg);g{color:red}');
assert.strictEqual(formattedCode, `@namespace svg url(http://www.w3.org/2000/svg);g {
color: red
}
`);
});
it('formats page rule correctly', () => {
const formattedCode = formatCSS('@page :first{margin:2in 3in;}span{color:blue}');
assert.strictEqual(formattedCode, `@page :first {
margin: 2in 3in;
}
span {
color: blue
}
`);
});
it('formats supports rule correctly', () => {
const formattedCode = formatCSS('@supports(--foo:green){body{color:green;}}#content{font-size:14px}');
assert.strictEqual(formattedCode, `@supports(--foo: green) {
body {
color:green;
}
}
#content {
font-size: 14px
}
`);
});
it('formats css-variable definitions and usages correctly', () => {
const formattedCode = formatCSS('html { --foo: bar; --color: red; background-color: var(--foo); }');
assert.strictEqual(formattedCode, `html {
--foo: bar;
--color: red;
background-color: var(--foo);
}
`);
});
});