Tests CSS.setMediaText method.
==== Initial style sheet text ====
@media screen and (min-width: 700px) and (max-device-height: 200em) {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}


Running test: testSimpleEdit
==== Style sheet text ====
@media all and (min-height: 20px) {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}


Running test: testComplexToSimpleEdit
==== Style sheet text ====
@media screen and (min-width: 700px) and (max-device-height: 200em) {
    body {
        padding: 0;
    }
}

 @media all {
    body {
        padding: 10px;
    }
}


Running test: testSimpleToComplexEdit
==== Style sheet text ====
@media all and (min-height: 20px), (max-width: 10px), handheld and (min-monochrome: 8) {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}


Running test: testInvalidParameters
Expected protocol error: Invalid parameters (range.startLine: integer value expected)

Running test: testInvalidText
Expected protocol error: SyntaxError Selector or media text is not valid.

Running test: testInvalidText2
Expected protocol error: SyntaxError Selector or media text is not valid.

Running test: testInvalidText3
Expected protocol error: SyntaxError Selector or media text is not valid.

Running test: testEditSequentially
==== Style sheet text ====
@media screen {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}

==== Style sheet text ====
@media all,
handheld and (min-height: 20px),
(min-width: 100px) and (max-width: 200px) {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}


Running test: testSimpleAfterSequentially
==== Style sheet text ====
@media all and (min-height: 20px) {
    body {
        padding: 0;
    }
}

 @media all and (orientation: portrait),
handheld and (max-width: 700px),
(max-resolution: 3dppx) {
    body {
        padding: 10px;
    }
}


