Tests that InspectorCSSAgent formats the CSS style text based on the CSS model modifications.


Running: initFormattedStyle

Running: testFormattedInsertStart
raw cssText:
{
          /* leading comment */
          firstProperty: rgba(1, 2, 3, 0);
          color: red;   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedRemoveStart
raw cssText:
{
          /* leading comment */
          color: red;   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedInsertMiddle
raw cssText:
{
          /* leading comment */
          color: red;   /* comment1 */
          middleProperty: middleValue /* comment */;
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedRemoveMiddle
raw cssText:
{
          /* leading comment */
          color: red;   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedInsertEnd
raw cssText:
{
          /* leading comment */
          color: red;   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
          endProperty: endValue;
      }

Running: testFormattedRemoveEnd
raw cssText:
{
          /* leading comment */
          color: red;   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedDisableStart
raw cssText:
{
          /* leading comment */
          /* color: red; */   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
      }

Running: testFormattedDisableEnd
raw cssText:
{
          /* leading comment */
          /* color: red; */   /* comment1 */
          zoom: 1;/* comment2 */ /* like: property */
          /* padding: 0; */
      }

Running: testFormattedDisableMiddle
raw cssText:
{
          /* leading comment */
          /* color: red; */   /* comment1 */
          /* zoom: 1; *//* comment2 */ /* like: property */
          /* padding: 0; */
      }

Running: testFormattedInsert1
raw cssText:
{
          /* leading comment */
          propA: valA;
          /* color: red; */   /* comment1 */
          /* zoom: 1; *//* comment2 */ /* like: property */
          /* padding: 0; */
      }

Running: testFormattedInsert2
raw cssText:
{
          /* leading comment */
          propA: valA;
          /* color: red; */   /* comment1 */
          propB: valB;
          /* zoom: 1; *//* comment2 */ /* like: property */
          /* padding: 0; */
      }

Running: testFormattedInsert3
raw cssText:
{
          /* leading comment */
          propA: valA;
          /* color: red; */   /* comment1 */
          propB: valB;
          /* zoom: 1; *//* comment2 */ /* like: property */
          /* padding: 0; */
          propC: valC;
      }

Running: testFormattedEnableStart
raw cssText:
{
          /* leading comment */
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          /* zoom: 1; *//* comment2 */ /* like: property */
          /* padding: 0; */
          propC: valC;
      }

Running: testFormattedEnableEnd
raw cssText:
{
          /* leading comment */
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          /* zoom: 1; *//* comment2 */ /* like: property */
          padding: 0;
          propC: valC;
      }

Running: testFormattedEnableMiddle
raw cssText:
{
          /* leading comment */
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
          propC: valC;
      }

Running: testFormattedWithMeta
raw cssText:
{
          /* leading comment */
          -webkit-animation: linear;
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
          propC: valC;
      }

Running: testFormattedWithMetaValue
raw cssText:
{
          /* leading comment */
          -webkit-animation: linear;
          unicode-bidi: webkit-isolate;
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
          propC: valC;
      }

Running: testFormattedWithAtoms
raw cssText:
{
          /* leading comment */
          border-left: 1px solid rgb(1,1,1);
          -webkit-animation: linear;
          unicode-bidi: webkit-isolate;
          propA: valA;
          color: red;   /* comment1 */
          propB: valB;
          zoom: 1;/* comment2 */ /* like: property */
          padding: 0;
          propC: valC;
      }

Running: initUnformattedStyle

Running: testUnformattedInsertStart
raw cssText:
{/*leading comment*/firstProperty: firstValue;color:red;zoom:1;padding:0;}

Running: testUnformattedRemoveStart
raw cssText:
{/*leading comment*/color:red;zoom:1;padding:0;}

Running: testUnformattedInsertMiddle
raw cssText:
{/*leading comment*/color:red;middleProperty: middleValue;zoom:1;padding:0;}

Running: testUnformattedRemoveMiddle
raw cssText:
{/*leading comment*/color:red;zoom:1;padding:0;}

Running: testUnformattedInsertEnd
raw cssText:
{/*leading comment*/color:red;zoom:1;padding:0;endProperty: endValue;}

Running: testUnformattedRemoveEnd
raw cssText:
{/*leading comment*/color:red;zoom:1;padding:0;}

Running: testUnformattedDisableStart
raw cssText:
{/*leading comment*//* color:red; */zoom:1;padding:0;}

Running: testUnformattedDisableEnd
raw cssText:
{/*leading comment*//* color:red; */zoom:1;/* padding:0; */}

Running: testUnformattedDisableMiddle
raw cssText:
{/*leading comment*//* color:red; *//* zoom:1; *//* padding:0; */}

Running: testUnformattedEnableStart
raw cssText:
{/*leading comment*/color:red;/* zoom:1; *//* padding:0; */}

Running: testUnformattedEnableEnd
raw cssText:
{/*leading comment*/color:red;/* zoom:1; */padding:0;}

Running: testUnformattedEnableMiddle
raw cssText:
{/*leading comment*/color:red;zoom:1;padding:0;}

