flagpole
Version:
Simple and fast DOM integration, headless or headful browser, and REST API testing framework.
93 lines • 3.87 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CssResponse = void 0;
const response_1 = require("../response");
const cssrule_1 = require("./cssrule");
const util_1 = require("../util");
const css = require("css");
class CssResponse extends response_1.ProtoResponse {
get responseTypeName() {
return "Stylesheet";
}
get responseType() {
return "stylesheet";
}
init(httpResponse) {
super.init(httpResponse);
this.context.assert(this.statusCode).between(200, 299);
this.context.assert(this.header("Content-Type")).contains("text/css");
try {
this.css = css.parse(this.body.$, { silent: true });
}
catch (ex) {
this.css = null;
}
this.validate();
}
eval() {
return __awaiter(this, void 0, void 0, function* () {
throw "This type of scenario does not suport eval.";
});
}
find(path) {
return __awaiter(this, void 0, void 0, function* () {
if (this.css.stylesheet && util_1.toType(this.css.stylesheet.rules) == "array") {
const rules = this.css.stylesheet.rules;
let matchingRule = null;
rules.some((rule) => {
if (rule.type == "rule" && rule.selectors) {
rule.selectors.some((selector) => {
if (selector == path) {
matchingRule = rule;
}
return matchingRule !== null;
});
}
return matchingRule !== null;
});
return cssrule_1.CSSRule.create(matchingRule, this.context, `CSS Rule for ${path}`, path);
}
throw new Error("CSS is invalid");
});
}
findAll(path) {
return __awaiter(this, void 0, void 0, function* () {
if (this.css.stylesheet && util_1.toType(this.css.stylesheet.rules) == "array") {
const rules = this.css.stylesheet.rules;
let matchingRules = [];
rules.forEach((rule) => {
if (rule.type == "rule" && rule.selectors) {
rule.selectors.forEach((selector) => {
if (selector == path) {
const cssRule = cssrule_1.CSSRule.create(rule, this.context, `CSS Rule for ${path}`, path);
matchingRules.push(cssRule);
}
});
}
});
return matchingRules;
}
throw new Error("CSS is invalid");
});
}
validate() {
this.context
.assert("CSS is valid", this.css &&
this.css.type == "stylesheet" &&
this.css.stylesheet &&
this.css.stylesheet.parsingErrors &&
this.css.stylesheet.parsingErrors.length === 0)
.equals(true);
}
}
exports.CssResponse = CssResponse;
//# sourceMappingURL=cssresponse.js.map