summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/data/select/tests1.dat18
-rw-r--r--test/select-auto.c20
2 files changed, 33 insertions, 5 deletions
diff --git a/test/data/select/tests1.dat b/test/data/select/tests1.dat
index 5b415f3..dc9f3c7 100644
--- a/test/data/select/tests1.dat
+++ b/test/data/select/tests1.dat
@@ -64,3 +64,21 @@ border-left-color: #00000000
display: inline
#reset
+#tree
+| div
+| p*
+#author
+p:first-child { background-color: #bbc; }
+#errors
+#expected
+background-attachment: scroll
+background-color: #bbbbcc00
+background-image: none
+background-position: 0% 0%
+background-repeat: repeat
+border-top-color: #00000000
+border-right-color: #00000000
+border-bottom-color: #00000000
+border-left-color: #00000000
+display: inline
+#reset
diff --git a/test/select-auto.c b/test/select-auto.c
index 19af180..f07b5c9 100644
--- a/test/select-auto.c
+++ b/test/select-auto.c
@@ -101,6 +101,7 @@ static css_error node_has_attribute_includes(void *pw, void *node,
const uint8_t *name, size_t nlen,
const uint8_t *value, size_t vlen,
bool *match);
+static css_error node_is_first_child(void *pw, void *node, bool *match);
static css_select_handler select_handler = {
node_name,
@@ -114,7 +115,8 @@ static css_select_handler select_handler = {
node_has_attribute,
node_has_attribute_equal,
node_has_attribute_dashmatch,
- node_has_attribute_includes
+ node_has_attribute_includes,
+ node_is_first_child
};
static void *myrealloc(void *data, size_t len, void *pw)
@@ -357,6 +359,7 @@ void parse_tree_data(line_ctx *ctx, const char *data, size_t len)
ctx->current->last_child = n;
}
+ n->parent = ctx->current;
}
ctx->current = n;
@@ -532,10 +535,7 @@ void parse_pseudo_list(const char **data, size_t *len, uint64_t *elements,
p++;
/* Pseudo classes */
- if (p - start == 11 &&
- strncasecmp(start, "first-child", 11) == 0)
- *classes |= CSS_PSEUDO_CLASS_FIRST_CHILD;
- else if (p - start == 7 &&
+ if (p - start == 7 &&
strncasecmp(start, "visited", 7) == 0)
*classes |= CSS_PSEUDO_CLASS_VISITED;
else if (p - start == 6 &&
@@ -958,3 +958,13 @@ css_error node_has_attribute_includes(void *pw, void *n,
return CSS_OK;
}
+css_error node_is_first_child(void *pw, void *n, bool *match)
+{
+ node *node = n;
+
+ UNUSED(pw);
+
+ *match = (node->parent != NULL && node->parent->children == node);
+
+ return CSS_OK;
+}