The test verifies functionality of protocol method CSS.addRule.
==== Initial style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}



Running test: testAddRuleToStyleSheetBeginning
==== Style sheet text ====
#test { content: 'EDITED'; }#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    content: 'EDITED';
}
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleToStyleSheetEnding
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}
#test { content: 'EDITED'; }

Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
*#test* {    regular
    content: 'EDITED';
}
Dumping inherited rules: 

Running test: testAddRuleToStyleSheetCenter
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}
#test { content: 'EDITED'; }
@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
*#test* {    regular
    content: 'EDITED';
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleToRuleEnding
==== Style sheet text ====
#test {
    box-sizing: border-box;
}#test{
    content: 'EDITED';
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    content: 'EDITED';
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleWithFormatting
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test{
    content: 'EDITED';
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    content: 'EDITED';
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleToMediaRuleBeginning
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {#test { content: 'EDITED'; }
    #test {
        font-size: 200%;
    }

    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        content: 'EDITED';
    }
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleToMediaRuleCenter
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }
#test { content: 'EDITED'; }
    #test {
    }
}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
        content: 'EDITED';
    }
@media (min-width: 1px)
    *#test* {    regular
    }
Dumping inherited rules: 

Running test: testAddRuleToMediaRuleEnd
==== Style sheet text ====
#test {
    box-sizing: border-box;
}

#test {
    /* resetting some properties */
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex; /* flex FTW! */
}

@media (min-width: 1px) {
    #test {
        font-size: 200%;
    }

    #test {
    }
#test { content: 'EDITED'; }}


Dumping matched rules: 
*#test* {    regular
    box-sizing: border-box;
}
*#test* {    regular
    line-height: 1;
    font-family: "Arial";
    color: blue;
    display: flex;
}
@media (min-width: 1px)
    *#test* {    regular
        font-size: 200%;
    }
@media (min-width: 1px)
    *#test* {    regular
    }
@media (min-width: 1px)
    *#test* {    regular
        content: 'EDITED';
    }
Dumping inherited rules: 

Running test: testInvalidRule
Expected protocol error: SyntaxError Rule text is not valid.

Running test: testInvalidRule2
Expected protocol error: SyntaxError Rule text is not valid.

Running test: testInvalidRule3
Expected protocol error: SyntaxError Rule text is not valid.

Running test: testAddingRuleInsideSelector
Expected protocol error: NotFoundError Cannot insert rule inside rule selector.

Running test: testAddingRuleBeforeRuleBody
Expected protocol error: NotFoundError Cannot insert rule inside rule selector.

Running test: testAddingRuleInsideMedia1
Expected protocol error: NotFoundError Cannot insert rule inside rule selector.

Running test: testAddingRuleInsideMedia2
Expected protocol error: NotFoundError Cannot insert rule inside rule selector.

Running test: testAddingRuleBeforeMediaBody
Expected protocol error: NotFoundError Cannot insert rule inside rule selector.

Running test: testAddingRuleInsideStyleRule
Expected protocol error: NotFoundError Cannot insert rule in non-media rule.

