Пример #1
0
 def mutate(self, context) -> bool:
     c = Random.selector(4)
     if c == 0 or len(self.declarations) == 0:
         return self.append(context)
     elif c == 1:
         del self.declarations[Random.selector(len(self.declarations))]
         return self.append(context)
     else:
         decl = Random.choice(self.declarations)
         return decl.mutate(context)
Пример #2
0
 def insert_api(self):
     line = Random.selector(self.api_count + 1)
     self.context.shift_object_location(line)
     self.context.line = line
     api = self.generate_api()
     self.apis.insert(line, api)
     return True
Пример #3
0
 def mutate(self, context) -> bool:
     if len(self.keyframe_rules) < CSSConfig.max_css_keyframe_count \
                 and Random.selector(3) == 0:
         self.append_keyframe_rule(context)
         return True
     else:
         keyframe_name, keyframe_rule = Random.choice(
             list(self.keyframe_rules.items()))
         if Random.selector(5) == 0:
             del self.keyframe_rules[keyframe_name]
             name = self.generate_keyframe_name()
             self.keyframe_rules[name] = keyframe_rule
             keyframe_rule.name = name
             return True
         else:
             return keyframe_rule.mutate(context)
Пример #4
0
 def mutate(self, context) -> bool:
     c = Random.selector(1 + len(self.args))
     if c == 0:
         return self.this.mutate(context)
     else:
         arg = Random.choice(self.args)
         return arg.mutate(context)
Пример #5
0
 def insert_node(self):
     element_count = self.dom_tree.element_count
     if Random.selector(element_count + 1) == 0:
         element = self.dom_tree.insert_root_element(self.dom_context)
     else:
         element = self.dom_tree.insert_element(self.dom_context)
     return element is not None
Пример #6
0
 def mutate_api(self):
     if self.api_count == 0:
         return False
     line = Random.selector(self.api_count)
     self.context.line = line
     api = self.apis[line]
     return api.mutate(self.context)
Пример #7
0
def tab_index():
    c = Random.selector(3)
    if c == 0:
        return "-1"
    elif c == 1:
        return str(Random.range(0, 5))
    else:
        return Random.integer()
Пример #8
0
 def mutate(self, context):
     c = Random.selector(3)
     if c == 0:
         self.this.mutate(context)
     elif c == 1:
         self.arg.mutate(context)
     else:
         self.selector.mutate(context)
Пример #9
0
 def generate(self, _):
     c = Random.selector(3)
     if c == 0:
         self.value = "auto"
     elif c == 1:
         self.value = "auto-reverse"
     else:
         self.value = Random.integer()
Пример #10
0
 def generate(self, _):
     c = Random.selector(3)
     if c == 0:
         self.value = Random.choice(["auto", "auto-start-reverse"])
     elif c == 1:
         self.value = dv.angle()
     else:
         self.value = Random.number()
Пример #11
0
 def generate(self, context):
     c = Random.selector(5)
     if c == 0 or c == 1:
         self.generate_abs()
     elif c == 2 or c == 3:
         self.generate_rel1(context)
     else:
         self.generate_rel2(context)
Пример #12
0
 def mutate(self, context) -> bool:
     c = Random.selector(10)
     if c == 0:
         self.selector.append(context)
         return True
     elif c == 1 or c == 2:
         return self.selector.mutate(context)
     else:
         return self.declaration.mutate(context)
Пример #13
0
def coords():
    c = Random.selector(3)
    if c == 0:
        n = 4
    elif c == 1:
        n = 3
    else:
        n = Random.range(3, 5) * 2
    return seq([Random.integer() for _ in range(n)])
Пример #14
0
 def mutate(self, context) -> bool:
     c = Random.selector(3)
     if c == 0:
         # 1. mutate one
         selector = Random.choice(self.selectors)
         return selector.mutate(context)
     elif c == 1:
         # 2. replace one
         if len(self.selectors) == 0:
             return False
         del self.selectors[Random.selector(len(self.selectors))]
         self.append(context)
         return True
     else:
         if len(self.selectors) >= CSSConfig.max_css_selector_count:
             return False
         self.append(context)
         return True
Пример #15
0
 def mutate(self, context) -> bool:
     if len(self.ths) == 0 or Random.bool():
         # 1. add one
         self.append_th(context)
     else:
         # 2. replace one
         del self.ths[Random.selector(len(self.ths))]
         self.append_th(context)
     return True
Пример #16
0
def create_css_basic_selector(scope=None):
    c = Random.selector(4)
    if c == 0:
        return CSSUniversalSelector()
    elif c == 1:
        return CSSElementSelector(scope)
    elif c == 2:
        return CSSClassSelector()
    else:
        return CSSIDSelector(scope)
Пример #17
0
 def generate(self, _):
     c = Random.selector(4)
     if c == 0:
         self.value = "x"
     elif c == 1:
         self.value = dv.image_url()
     elif c == 2:
         self.value = dv.audio_url()
     else:
         self.value = dv.video_url()
Пример #18
0
def color():
    c = Random.selector(5)
    if c == 0:
        return Random.choice(["currentColor", "transparent"])
    elif c == 1:
        return Random.choice(["red", "blue", "green", "black", "white"])
    elif c == 2:
        return "#{}".format(Random.hex_digits(Random.choice([6, 8])))
    elif c == 3:
        return "rgb({})".format(seq([Random.hex_byte() for _ in range(3)]))
    else:
        return "rgba({})".format(seq([Random.hex_byte() for _ in range(4)]))
Пример #19
0
def path_cmd():
    c = Random.selector(5)
    if c == 0:
        return move_to()
    elif c == 1:
        return line_to()
    elif c == 2:
        return bezier_curve()
    elif c == 3:
        return arc_curve()
    else:
        return close_path()
Пример #20
0
 def mutate(self, context):
     c = Random.selector(4)
     if c == 0:
         return self.a.mutate(context)
     elif c == 1:
         return self.b.mutate(context)
     elif c == 2:
         ok = self.a.mutate(context)
         ok = ok or self.b.mutate(context)
         return ok
     else:
         self.generate(context)
         return True
Пример #21
0
def svg_transform():
    c = Random.selector(6)
    if c == 0:
        return dv.translate()
    elif c == 1:
        return dv.scale()
    elif c == 2:
        return dv.rotate()
    elif c == 3:
        return dv.skew_x()
    elif c == 4:
        return dv.skew_y()
    else:
        return dv.matrix()
Пример #22
0
 def replace_api(self):
     if self.api_count == 0:
         return False
     trial = 0
     while trial < self.api_count:
         line = Random.selector(self.api_count)
         self.context.line = line
         old_api = self.apis[line]
         if old_api.ret is None:
             new_api = self.generate_api()
             self.apis[line] = new_api
             return True
         trial += 1
     return False
Пример #23
0
    def insert_root_element(self, context):
        if self.full:
            return None

        if Random.selector(5) > 0:
            name = Random.choice(docs.html_general_child_elements)
        else:
            name = Random.choice(docs.html_other_child_elements)
        child = of.create_object(name)
        self.add_root_element(child)

        if child is not None:
            self.init_element(context, child)

        return child
Пример #24
0
 def fuzz_js_functions(self):
     trial = 0
     while trial < 10:
         target_func = self.main if Random.bool() else Random.choice(
             self.event_handlers)
         c = Random.selector(4)
         if c == 0:
             ok = target_func.append_api()
         elif c == 1:
             ok = target_func.insert_api()
         elif c == 2:
             ok = target_func.replace_api()
         else:
             ok = target_func.mutate_api()
         if ok:
             return True
         trial += 1
     return False
Пример #25
0
def position():
    c = Random.selector(3)
    if c == 0:
        values = [Random.choice(["left", "center", "right"])]
        if Random.bool():
            values.append(Random.choice(["top", "center", "bottom"]))
        return cat(values)
    elif c == 1:
        values = [
            Random.choice(["left", "center", "right"]),
            length_percentage()
        ]
        if Random.bool():
            values.extend([
                Random.choice(["top", "center", "bottom"]),
                length_percentage()
            ])
        return cat(values)
    else:
        return cat([length_percentage(), length_percentage()])
Пример #26
0
 def mutate(self, context) -> bool:
     c = Random.selector(4)
     if c == 0:
         prop = Random.choice(list(self.props.keys()))
         value_class = get_css_property_value(prop)
         value = value_class()
         value.generate(context)
         self.props[prop].append(value)
         return True
     elif c == 1:
         prop = Random.choice(list(self.props.keys()))
         values = self.props[prop]
         value = Random.choice(values)
         return value.mutate(context)
     elif c == 2:
         self.append_prop(context)
         return True
     else:
         # 3. replace property
         prop = Random.choice(list(self.props.keys()))
         del self.props[prop]
         self.append_prop(context)
         return True
Пример #27
0
def bezier_curve():
    c = Random.selector(3)
    if c == 0:
        cmd = Random.choice(["C", "c"])
        x1 = Random.integer()
        y1 = Random.integer()
        x2 = Random.integer()
        y2 = Random.integer()
        x = Random.integer()
        y = Random.integer()
        return "{} {},{} {},{} {},{}".format(cmd, x1, y1, x2, y2, x, y)
    elif c == 1:
        cmd = Random.choice(["Q", "q", "S", "s"])
        x2 = Random.integer()
        y2 = Random.integer()
        x = Random.integer()
        y = Random.integer()
        return "{} {},{} {},{}".format(cmd, x2, y2, x, y)
    else:
        cmd = Random.choice(["T", "t"])
        x = Random.integer()
        y = Random.integer()
        return "{} {},{}".format(cmd, x, y)
Пример #28
0
 def mutate(self, context) -> bool:
     if Random.selector(5) == 0:
         self.keyframe_rule.name = dv.keyframe_name()
         return True
     else:
         return self.keyframe_rule.mutate(context.global_context)
Пример #29
0
 def replace_css_style_rule(self, context):
     count = len(self.css_style_rules)
     if count == 0:
         return False
     del self.css_style_rules[Random.selector(count)]
     return self.append_css_style_rule(context)
Пример #30
0
 def get_token(self, token):
     return "{}{}".format(token, Random.selector(self.token_limit[token]))