Пример #1
0
def ellipse():
    values = []
    if Random.bool():
        values.extend([shape_radius(), shape_radius()])
        if Random.bool():
            values.extend(["at", position()])
    return "ellipse({})".format(cat(values))
Пример #2
0
def srcset():
    values = [image_url()]
    if Random.bool():
        values.append("{}w".format(Random.integer()))
    if Random.bool():
        values.append("{}x".format(Random.integer()))
    return cat(values)
Пример #3
0
def circle():
    values = []
    if Random.bool():
        values.append(shape_radius())
        if Random.bool():
            values.extend(["at", position()])
    return "circle({})".format(cat(values))
Пример #4
0
 def generate(self, _):
     if Random.bool():
         self.value = "accumulate"
     else:
         values = ["new"]
         if Random.bool():
             values.extend([Random.integer() for _ in range(4)])
         self.value = cat(values)
Пример #5
0
def length(relative=False):
    if (not relative) or Random.bool():
        if Random.bool():
            return "{}px".format(Random.integer())
        else:
            return "{}em".format(Random.number())
    else:
        return "{}{}".format(Random.integer(),
                             Random.choice(["vw", "vh", "vmin", "vmax"]))
Пример #6
0
 def single():
     values = [
         "'{}'".format(
             Random.choice([
                 "smcp", "c2sc", "zero", "hist", "liga", "tnum", "frac",
                 "swsh", "ss07", "dlig", "vert", "hwid", "twid", "qwid",
                 "kern", "onum"
             ]))
     ]
     if Random.bool():
         if Random.bool():
             values.append(Random.choice(["on", "off"]))
         else:
             values.append(Random.integer())
     return cat(values)
Пример #7
0
def list_size():
    if Random.bool():
        return Random.range(1, 5)
    else:
        # Special sizes that may trigger realloc
        # See ./animations/crash-when-animation-is-running-while-getting-value.html
        return Random.choice([7, 8, 9, 15, 16, 17, 31, 32, 33, 63, 64, 65])
Пример #8
0
    def fuzz_css(self):
        class CSSMode(Enum):
            Mutate = 1
            Append = 2
            Replace = 3
            Misc = 4

        css_modes = [
            CSSMode.Mutate, CSSMode.Append, CSSMode.Replace, CSSMode.Misc
        ]
        css_weights = [10, 5, 1, 1]

        trial = 0
        while trial < 10:
            c = Random.choices(css_modes, css_weights)[0]
            if c == CSSMode.Mutate:
                ok = self.css.mutate_css_style_rule(self.dom_context)
            elif c == CSSMode.Append:
                ok = self.css.append_css_style_rule(self.dom_context)
            elif c == CSSMode.Replace:
                ok = self.css.replace_css_style_rule(self.dom_context)
            else:
                if Random.bool():
                    ok = self.css.mutate_css_keyframes_rule(self.dom_context)
                else:
                    ok = self.css.mutate_css_variable(self.dom_context)
            assert ok is not None
            if ok:
                return True
            trial += 1
        return False
Пример #9
0
 def generate(self, context):
     if Random.bool():
         self.cla = context.global_context.get_token("class")
         self.elem = None
     else:
         self.cla = None
         self.elem = context.global_context.get_object(docs.elements)
Пример #10
0
def polygon():
    values = []
    if Random.bool():
        values.append(fill_rule())
    num = Random.range(2, 5)
    for _ in range(num):
        values.append("{} {}".format(length_percentage(), length_percentage()))
    return "polygon({})".format(seq(values))
Пример #11
0
def border_radius():
    num = Random.range(1, 4)
    values = [length_percentage() for _ in range(num)]
    if Random.bool():
        values.append("/")
        num = Random.range(1, 4)
        values.extend([length_percentage() for _ in range(num)])
    return cat(values)
Пример #12
0
def get_svg_animatable_attribute(elem):
    has_regular = elem in svg_animatable_regular_attributes
    has_presentation = elem in svg_animatable_presentation_attributes

    if (not has_presentation) or (has_regular and Random.bool()):
        return Random.choice(svg_animatable_regular_attributes[elem])
    else:
        return Random.choice(svg_animatable_presentation_attributes[elem])
Пример #13
0
 def mutate(self, context) -> bool:
     if Random.bool():
         # 1. mutate selector value
         return self.selector.mutate(context.global_context)
     else:
         # 2. change to another selector
         self.generate(context)
         return True
Пример #14
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
Пример #15
0
def font_stretch_value():
    if Random.bool():
        return Random.choice([
            "normal", "ultra-condensed", "extra-condensed", "condensed",
            "semi-condensed", "semi-expanded", "expanded", "extra-expanded",
            "ultra-expanded"
        ])
    else:
        return percentage()
Пример #16
0
 def generate_abs(self):
     self.elem = None
     self.action = None
     self.repeat_num = None
     self.event = None
     if Random.bool():
         self.abs = dv.clock()
     else:
         self.abs = "indefinite"
Пример #17
0
def line_to():
    if Random.bool():
        cmd = Random.choice(["L", "l"])
        x = Random.integer()
        y = Random.integer()
        return "{} {},{}".format(cmd, x, y)
    else:
        cmd = Random.choice(["H", "h", "V", "v"])
        x = Random.integer()
        return "{} {}".format(cmd, x)
Пример #18
0
 def generate(self, _):
     values = [
         Random.choice([
             "xMinYMin", "xMidYMin", "xMaxYMin", "xMinYMid", "xMidYMid",
             "xMaxYMid", "xMinYMax", "xMidYMax", "xMaxYMax"
         ])
     ]
     if Random.bool():
         values.append(Random.choice(["meet", "slice"]))
     self.value = cat(values)
Пример #19
0
    def __init__(self, name):
        super().__init__(name)
        self.value_class = None
        self.value_count = None
        self.type = None

        if self.name == "SVGAnimateMotionElement":
            self.value_class = svg.CoordinateValue
        if self.name != "SVGSetElement":
            if Random.bool():
                self.value_count = max(1, dv.list_size())
Пример #20
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()])
Пример #21
0
 def mutate_text(self) -> bool:
     if Random.bool():
         if docs.is_svg_text_element(self.name):
             self.last_text = Random.string()
             return True
         return False
     else:
         if self.parent is None or docs.is_svg_text_element(
                 self.parent.name):
             self.ahead_text = Random.string()
             return True
         return False
Пример #22
0
    def generate_dynamic(self, context):
        self.fill_value = None

        self.paint_server = context.get_object(docs.svg_paint_server_elements)
        if self.paint_server is None:
            self.generate_static()
            return

        if Random.bool():
            self.color = dv.color()
        else:
            self.color = None
Пример #23
0
 def generate(self, _):
     if Random.bool():
         self.value = "normal"
     else:
         selectors = Random.selectors(3)
         values = []
         if selectors[0]:
             values.append("fill")
         if selectors[1]:
             values.append("stroke")
         if selectors[2]:
             values.append("markers")
         self.value = cat(values)
Пример #24
0
def media_query():
    media_type = Random.choice(["all", "print", "screen"])
    if Random.bool():
        return media_type

    media_feature = Random.choice(
        ["min-width", "max-width", "min-height", "max-height", "orientation"])
    if media_feature == "orientation":
        media_feature_value = Random.choice(["portrait", "landscape"])
    else:
        media_feature_value = "{}px".format(Random.integer())
    return "{} and ({}:{})".format(media_type, media_feature,
                                   media_feature_value)
Пример #25
0
    def generate_nodes(self, context):
        if Random.bool():
            self.generate_html_elements(context, TreeConfig.root_element_count)
        else:
            self.generate_html_elements(context, TreeConfig.root_element_count)
            self.generate_svg_elements(context, TreeConfig.root_element_count)
        # else:
        #    self.generate_svg_elements(context, TreeConfig.root_element_count)

        for _ in range(self.max_element_count):
            element = self.insert_element(context)
            if element is not None:
                element.generate_text()
Пример #26
0
    def merge(self, other, merge_map):
        p = q = 0
        while p < self.api_count and q < other.api_count:
            if Random.bool():
                p += 1
                continue

            other_api = other.apis[q]
            other_api.merge_fix(merge_map)
            self.merge_api(other_api, p)
            p += 1
            q += 1

        if q < other.api_count:
            for i in range(q, other.api_count):
                self.merge_api(other.apis[i], p)
                p += 1
Пример #27
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
Пример #28
0
def auto_complete():
    if Random.bool():
        return Random.choice(["on", "off"])
    else:
        return Random.choice([
            "name", "honorific-prefix", "given-name", "additional-name",
            "family-name", "honorific-suffix", "nickname", "email", "username",
            "new-password", "current-password", "one-time-code",
            "organization-title", "organization", "street-address",
            "address-line1", "address-line2", "address-line3",
            "address-level1", "address-level2", "address-level3",
            "address-level4", "country", "country-name", "postal-code",
            "cc-name", "cc-given-name", "cc-additional-name", "cc-family-name",
            "cc-number", "cc-exp", "cc-exp-month", "cc-exp-year", "cc-csc",
            "cc-type", "transaction-currency", "transaction-amount",
            "language", "bday", "bday-day", "bday-month", "bday-year", "sex",
            "tel", "tel-country-code", "tel-national", "tel-area-code",
            "tel-local", "tel-extension", "impp", "url", "photo"
        ])
Пример #29
0
 def generate(self, _):
     if Random.bool():
         self.value = "x"
     else:
         self.value = dv.frame_url()
Пример #30
0
 def generate(self, _):
     if Random.bool():
         self.value = "auto"
     else:
         self.value = Random.number()