Source: python-pyscss Version: 1.4.0-2 Severity: serious Tags: ftbfs https://buildd.debian.org/status/logs.php?pkg=python-pyscss&ver=1.4.0-2%2Bb1
... ============================= test session starts ============================== platform linux -- Python 3.11.0+, pytest-7.1.2, pluggy-1.0.0+repack rootdir: /<<PKGBUILDDIR>>/scss collected 249 items / 1 skipped ../../../scss/tests/test_cli.py . [ 0%] ../../../scss/tests/test_expression.py FFFFF [ 2%] ../../../scss/tests/test_interactive.py .. [ 3%] ../../../scss/tests/test_misc.py FFF... [ 5%] ../../../scss/tests/test_types.py ....... [ 8%] ../../../scss/tests/extension/test_core.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFF [ 20%] FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF [ 33%] ../../../scss/tests/extension/test_extra.py .... [ 34%] ../../../scss/tests/extension/compass/test_gradients.py .x [ 35%] ../../../scss/tests/extension/compass/test_helpers.py FFFFFFFFFFFFFFFF [ 42%] ../../../scss/tests/extension/compass/test_images.py FFF [ 43%] ../../../scss/tests/files/bugs/append.scss F [ 43%] ../../../scss/tests/files/bugs/argspec-named-arguments.scss F [ 44%] ../../../scss/tests/files/bugs/argspec-slurpy-arguments.scss F [ 44%] ../../../scss/tests/files/bugs/at-rules-1.scss F [ 44%] ../../../scss/tests/files/bugs/at-rules-2.scss . [ 45%] ../../../scss/tests/files/bugs/at-rules-compressed-semicolon.scss F [ 45%] ../../../scss/tests/files/bugs/at-rules-duplicate-media-queries.scss . [ 46%] ../../../scss/tests/files/bugs/at-rules-interpolation.scss F [ 46%] ../../../scss/tests/files/bugs/base64url.scss F [ 46%] ../../../scss/tests/files/bugs/colors-preserve-names.scss F [ 47%] ../../../scss/tests/files/bugs/division-in-assignment.scss . [ 47%] ../../../scss/tests/files/bugs/division-vs-literal-slash.scss . [ 48%] ../../../scss/tests/files/bugs/extend-child-selector.scss F [ 48%] ../../../scss/tests/files/bugs/extend-common-prefix-complex.scss F [ 48%] ../../../scss/tests/files/bugs/extend-common-prefix.scss . [ 49%] ../../../scss/tests/files/bugs/extend-selector-order.scss F [ 49%] ../../../scss/tests/files/bugs/for-to-vs-through.scss . [ 50%] ../../../scss/tests/files/bugs/if-with-parentheses.scss F [ 50%] ../../../scss/tests/files/bugs/interpolation-timing.scss F [ 51%] ../../../scss/tests/files/bugs/names-equivalence.scss F [ 51%] ../../../scss/tests/files/bugs/selectors-adjacent-is-not-include.scss . [ 51%] ../../../scss/tests/files/bugs/trailing-combinators.scss F [ 52%] ../../../scss/tests/files/bugs/unit-float-precision.scss F [ 52%] ../../../scss/tests/files/bugs/variables-font-face-default.scss F [ 53%] ../../../scss/tests/files/compass/current-color.scss F [ 53%] ../../../scss/tests/files/compass/gradients.scss F [ 53%] ../../../scss/tests/files/general/000-smoketest.scss F [ 54%] ../../../scss/tests/files/general/css-calc.scss . [ 54%] ../../../scss/tests/files/general/each-destructuring-2.scss F [ 55%] ../../../scss/tests/files/general/each-destructuring-3.scss F [ 55%] ../../../scss/tests/files/general/each-destructuring.scss F [ 55%] ../../../scss/tests/files/general/empty-list-included.scss F [ 56%] ../../../scss/tests/files/general/global-variable-exists.scss F [ 56%] ../../../scss/tests/files/general/if-lazy.scss F [ 57%] ../../../scss/tests/files/general/interpolation-acid.scss F [ 57%] ../../../scss/tests/files/general/interpolation-mixin-name.scss F [ 57%] ../../../scss/tests/files/general/maps-complex-keys.scss F [ 58%] ../../../scss/tests/files/general/maps-example-lists.scss F [ 58%] ../../../scss/tests/files/general/maps-example.scss F [ 59%] ../../../scss/tests/files/general/names-loop-variable.scss F [ 59%] ../../../scss/tests/files/general/null-values.scss F [ 59%] ../../../scss/tests/files/general/scoping-mixin-2.scss F [ 60%] ../../../scss/tests/files/general/scoping-mixin.scss F [ 60%] ../../../scss/tests/files/general/scoping-nested-2.scss F [ 61%] ../../../scss/tests/files/general/scoping-nested.scss F [ 61%] ../../../scss/tests/files/general/slurpy-keyword-args.scss F [ 61%] ../../../scss/tests/files/kronuz/args.scss F [ 62%] ../../../scss/tests/files/kronuz/functions-context.scss F [ 62%] ../../../scss/tests/files/kronuz/image-colors.scss F [ 63%] ../../../scss/tests/files/kronuz/imports-unused.scss F [ 63%] ../../../scss/tests/files/kronuz/linear-gradient.scss F [ 63%] ../../../scss/tests/files/kronuz/lists-circular-nth.scss F [ 64%] ../../../scss/tests/files/kronuz/lists-operations.scss . [ 64%] ../../../scss/tests/files/kronuz/mixin-varargs.scss F [ 65%] ../../../scss/tests/files/kronuz/mixins-context.scss F [ 65%] ../../../scss/tests/files/kronuz/mul-em.scss . [ 65%] ../../../scss/tests/files/kronuz/mul-list.scss . [ 66%] ../../../scss/tests/files/kronuz/order-test-each.scss . [ 66%] ../../../scss/tests/files/kronuz/order-test-for.scss . [ 67%] ../../../scss/tests/files/kronuz/order-test.scss F [ 67%] ../../../scss/tests/files/kronuz/reversed-for.scss . [ 67%] ../../../scss/tests/files/kronuz/reversed-range.scss F [ 68%] ../../../scss/tests/files/kronuz/rgba-colors.scss F [ 68%] ../../../scss/tests/files/kronuz/scope-loop-variables.scss F [ 69%] ../../../scss/tests/files/kronuz/scoping-control.scss F [ 69%] ../../../scss/tests/files/kronuz/selectors-append-nest.scss F [ 69%] ../../../scss/tests/files/kronuz/selectors-nest.scss F [ 70%] ../../../scss/tests/files/kronuz/selectors-special.scss F [ 70%] ../../../scss/tests/files/kronuz/sprite-map.scss F [ 71%] ../../../scss/tests/files/kronuz/style-nested.scss F [ 71%] ../../../scss/tests/files/kronuz/while-test.scss . [ 71%] ../../../scss/tests/files/original-doctests/000-general.scss F [ 72%] ../../../scss/tests/files/original-doctests/001-variables.scss F [ 72%] ../../../scss/tests/files/original-doctests/002-nesting-children.scss F [ 73%] ../../../scss/tests/files/original-doctests/003-nesting-children-2.scss F [ 73%] [ 73%] ../../../scss/tests/files/original-doctests/004-nesting-children-3.scss F [ 73%] [ 73%] ../../../scss/tests/files/original-doctests/005-extends.scss . [ 74%] ../../../scss/tests/files/original-doctests/006-extends-2.scss . [ 74%] ../../../scss/tests/files/original-doctests/007-extends-3.scss F [ 75%] ../../../scss/tests/files/original-doctests/008-extends-4.scss F [ 75%] ../../../scss/tests/files/original-doctests/009-extends-5.scss F [ 75%] ../../../scss/tests/files/original-doctests/010-math.scss . [ 76%] ../../../scss/tests/files/original-doctests/011-math-2.scss . [ 76%] ../../../scss/tests/files/original-doctests/012-math-3.scss . [ 77%] ../../../scss/tests/files/original-doctests/013-nesting.scss F [ 77%] ../../../scss/tests/files/original-doctests/014-nesting-2.scss F [ 77%] ../../../scss/tests/files/original-doctests/015-nesting-3.scss . [ 78%] ../../../scss/tests/files/original-doctests/016-variables.scss F [ 78%] ../../../scss/tests/files/original-doctests/017-interpolation.scss F [ 79%] ../../../scss/tests/files/original-doctests/018-mixins.scss F [ 79%] ../../../scss/tests/files/original-doctests/019-mixins-2.scss F [ 79%] ../../../scss/tests/files/original-doctests/020-mixins-3.scss F [ 80%] ../../../scss/tests/files/original-doctests/021-extend.scss F [ 80%] ../../../scss/tests/files/original-doctests/022-extend-multiple.scss . [ 81%] ../../../scss/tests/files/original-doctests/023-extend-multiple-2.scss F [ 81%] [ 81%] ../../../scss/tests/files/original-doctests/024-extend-placeholder.scss F [ 81%] [ 81%] ../../../scss/tests/files/original-doctests/025-forum.scss . [ 82%] ../../../scss/tests/files/original-doctests/026-forum-2.scss F [ 82%] ../../../scss/tests/files/original-doctests/027-forum-3.scss . [ 83%] ../../../scss/tests/files/original-doctests/028-errors.scss F [ 83%] ../../../scss/tests/files/original-doctests/029-errors-2.scss F [ 83%] ../../../scss/tests/files/original-doctests/030-errors-3.scss . [ 84%] ../../../scss/tests/files/original-doctests/031-test.scss F [ 84%] ../../../scss/tests/files/original-doctests/032-test-2.scss F [ 85%] ../../../scss/tests/files/original-doctests/033-test-3.scss F [ 85%] ../../../scss/tests/files/original-doctests/034-test-4.scss F [ 85%] ../../../scss/tests/files/original-doctests/035-test-5.scss F [ 86%] ../../../scss/tests/files/original-doctests/036-test-6.scss F [ 86%] ../../../scss/tests/files/original-doctests/037-test-7.scss F [ 87%] ../../../scss/tests/files/original-doctests/038-test-8.scss F [ 87%] ../../../scss/tests/files/original-doctests/039-hover-extend.scss F [ 87%] ../../../scss/tests/files/original-doctests/039-math-4.scss . [ 88%] ../../../scss/tests/files/original-doctests/040-complex-sequence-extend.scss F [ 88%] [ 88%] ../../../scss/tests/files/original-doctests/041-another-extend.scss . [ 89%] ../../../scss/tests/files/regressions/args-vars.scss F [ 89%] ../../../scss/tests/files/regressions/argspec-default-arguments.scss F [ 89%] ../../../scss/tests/files/regressions/argspec-no-arguments.scss F [ 90%] ../../../scss/tests/files/regressions/argspec-trailing-comma.scss F [ 90%] ../../../scss/tests/files/regressions/interpolation-2.scss F [ 91%] ../../../scss/tests/files/regressions/interpolation.scss F [ 91%] ../../../scss/tests/files/regressions/issue-10.scss F [ 91%] ../../../scss/tests/files/regressions/issue-110.scss F [ 92%] ../../../scss/tests/files/regressions/issue-2.scss F [ 92%] ../../../scss/tests/files/regressions/issue-21.scss F [ 93%] ../../../scss/tests/files/regressions/issue-258.scss F [ 93%] ../../../scss/tests/files/regressions/issue-32.scss . [ 93%] ../../../scss/tests/files/regressions/issue-334-a.scss F [ 94%] ../../../scss/tests/files/regressions/issue-334-b.scss F [ 94%] ../../../scss/tests/files/regressions/issue-334-c.scss F [ 95%] ../../../scss/tests/files/regressions/issue-334-d.scss F [ 95%] ../../../scss/tests/files/regressions/issue-334-e.scss F [ 95%] ../../../scss/tests/files/regressions/issue-334-f.scss F [ 96%] ../../../scss/tests/files/regressions/issue-334-g.scss F [ 96%] ../../../scss/tests/files/regressions/issue-334-h.scss F [ 97%] ../../../scss/tests/files/regressions/issue-4.scss . [ 97%] ../../../scss/tests/files/regressions/issue-40.scss F [ 97%] ../../../scss/tests/files/regressions/issue-5.scss F [ 98%] ../../../scss/tests/files/regressions/issue-52.scss F [ 98%] ../../../scss/tests/files/regressions/issue-6.scss F [ 99%] ../../../scss/tests/files/regressions/issue-7.scss . [ 99%] ../../../scss/tests/files/regressions/nth-inside-each.scss F [100%] =================================== FAILURES =================================== __________________________ test_reference_operations ___________________________ def test_reference_operations(): """Test the example expressions in the reference document: http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#operations """ # TODO: break this into its own file and add the entire reference guide # Need to build the calculator manually to get at its namespace, and need # to use calculate() instead of evaluate_expression() so interpolation # works ns = CoreExtension.namespace.derive() calc = Calculator(ns).calculate # Simple example > assert calc('1in + 8pt') == Number(1.1111111111111112, "in") ../../../scss/tests/test_expression.py:44: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../../../scss/calculator.py:116: in calculate result = self.evaluate_expression(expression, divide=divide) ../../../scss/calculator.py:134: in evaluate_expression ast = self.parse_expression(expr) ../../../scss/calculator.py:166: in parse_expression parser = SassExpression(SassExpressionScanner(expr)) ../../../scss/grammar/expression.py:104: in __init__ self.patterns.append((t, re.compile(p))) /usr/lib/python3.11/re/__init__.py:227: in compile return _compile(pattern, flags) /usr/lib/python3.11/re/__init__.py:294: in _compile p = _compiler.compile(pattern, flags) /usr/lib/python3.11/re/_compiler.py:743: in compile p = _parser.parse(p, flags) /usr/lib/python3.11/re/_parser.py:980: in parse p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0) /usr/lib/python3.11/re/_parser.py:455: in _parse_sub itemsappend(_parse(source, state, verbose, nested + 1, /usr/lib/python3.11/re/_parser.py:863: in _parse p = _parse_sub(source, state, sub_verbose, nested + 1) /usr/lib/python3.11/re/_parser.py:455: in _parse_sub itemsappend(_parse(source, state, verbose, nested + 1, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ source = <re._parser.Tokenizer object at 0x7fc44e8cd6d0> state = <re._parser.State object at 0x7fc44e8cda90>, verbose = 0, nested = 3 first = False def _parse(source, state, verbose, nested, first=False): # parse a simple pattern subpattern = SubPattern(state) # precompute constants into local variables subpatternappend = subpattern.append sourceget = source.get sourcematch = source.match _len = len _ord = ord while True: this = source.next if this is None: break # end of pattern if this in "|)": break # end of subpattern sourceget() if verbose: # skip whitespace and comments if this in WHITESPACE: continue if this == "#": while True: this = sourceget() if this is None or this == "\n": break continue if this[0] == "\\": code = _escape(source, this, state) subpatternappend(code) elif this not in SPECIAL_CHARS: subpatternappend((LITERAL, _ord(this))) elif this == "[": here = source.tell() - 1 # character set set = [] setappend = set.append ## if sourcematch(":"): ## pass # handle character classes if source.next == '[': import warnings warnings.warn( 'Possible nested set at position %d' % source.tell(), FutureWarning, stacklevel=nested + 6 ) negate = sourcematch("^") # check remaining characters while True: this = sourceget() if this is None: raise source.error("unterminated character set", source.tell() - here) if this == "]" and set: break elif this[0] == "\\": code1 = _class_escape(source, this) else: if set and this in '-&~|' and source.next == this: import warnings warnings.warn( 'Possible set %s at position %d' % ( 'difference' if this == '-' else 'intersection' if this == '&' else 'symmetric difference' if this == '~' else 'union', source.tell() - 1), FutureWarning, stacklevel=nested + 6 ) code1 = LITERAL, _ord(this) if sourcematch("-"): # potential range that = sourceget() if that is None: raise source.error("unterminated character set", source.tell() - here) if that == "]": if code1[0] is IN: code1 = code1[1][0] setappend(code1) setappend((LITERAL, _ord("-"))) break if that[0] == "\\": code2 = _class_escape(source, that) else: if that == '-': import warnings warnings.warn( 'Possible set difference at position %d' % ( source.tell() - 2), FutureWarning, stacklevel=nested + 6 ) code2 = LITERAL, _ord(that) if code1[0] != LITERAL or code2[0] != LITERAL: msg = "bad character range %s-%s" % (this, that) raise source.error(msg, len(this) + 1 + len(that)) lo = code1[1] hi = code2[1] if hi < lo: msg = "bad character range %s-%s" % (this, that) raise source.error(msg, len(this) + 1 + len(that)) setappend((RANGE, (lo, hi))) else: if code1[0] is IN: code1 = code1[1][0] setappend(code1) set = _uniq(set) # XXX: <fl> should move set optimization to compiler! if _len(set) == 1 and set[0][0] is LITERAL: # optimization if negate: subpatternappend((NOT_LITERAL, set[0][1])) else: subpatternappend(set[0]) else: if negate: set.insert(0, (NEGATE, None)) # charmap optimization can't be added here because # global flags still are not known subpatternappend((IN, set)) elif this in REPEAT_CHARS: # repeat previous item here = source.tell() if this == "?": min, max = 0, 1 elif this == "*": min, max = 0, MAXREPEAT elif this == "+": min, max = 1, MAXREPEAT elif this == "{": if source.next == "}": subpatternappend((LITERAL, _ord(this))) continue min, max = 0, MAXREPEAT lo = hi = "" while source.next in DIGITS: lo += sourceget() if sourcematch(","): while source.next in DIGITS: hi += sourceget() else: hi = lo if not sourcematch("}"): subpatternappend((LITERAL, _ord(this))) source.seek(here) continue if lo: min = int(lo) if min >= MAXREPEAT: raise OverflowError("the repetition number is too large") if hi: max = int(hi) if max >= MAXREPEAT: raise OverflowError("the repetition number is too large") if max < min: raise source.error("min repeat greater than max repeat", source.tell() - here) else: raise AssertionError("unsupported quantifier %r" % (char,)) # figure out which item to repeat if subpattern: item = subpattern[-1:] else: item = None if not item or item[0][0] is AT: raise source.error("nothing to repeat", source.tell() - here + len(this)) if item[0][0] in _REPEATCODES: raise source.error("multiple repeat", source.tell() - here + len(this)) if item[0][0] is SUBPATTERN: group, add_flags, del_flags, p = item[0][1] if group is None and not add_flags and not del_flags: item = p if sourcematch("?"): # Non-Greedy Match subpattern[-1] = (MIN_REPEAT, (min, max, item)) elif sourcematch("+"): # Possessive Match (Always Greedy) subpattern[-1] = (POSSESSIVE_REPEAT, (min, max, item)) else: # Greedy Match subpattern[-1] = (MAX_REPEAT, (min, max, item)) elif this == ".": subpatternappend((ANY, None)) elif this == "(": start = source.tell() - 1 capture = True atomic = False name = None add_flags = 0 del_flags = 0 if sourcematch("?"): # options char = sourceget() if char is None: raise source.error("unexpected end of pattern") if char == "P": # python extensions if sourcematch("<"): # named group: skip forward to end of name name = source.getuntil(">", "group name") source.checkgroupname(name, 1, nested) elif sourcematch("="): # named backreference name = source.getuntil(")", "group name") source.checkgroupname(name, 1, nested) gid = state.groupdict.get(name) if gid is None: msg = "unknown group name %r" % name raise source.error(msg, len(name) + 1) if not state.checkgroup(gid): raise source.error("cannot refer to an open group", len(name) + 1) state.checklookbehindgroup(gid, source) subpatternappend((GROUPREF, gid)) continue else: char = sourceget() if char is None: raise source.error("unexpected end of pattern") raise source.error("unknown extension ?P" + char, len(char) + 2) elif char == ":": # non-capturing group capture = False elif char == "#": # comment while True: if source.next is None: raise source.error("missing ), unterminated comment", source.tell() - start) if sourceget() == ")": break continue elif char in "=!<": # lookahead assertions dir = 1 if char == "<": char = sourceget() if char is None: raise source.error("unexpected end of pattern") if char not in "=!": raise source.error("unknown extension ?<" + char, len(char) + 2) dir = -1 # lookbehind lookbehindgroups = state.lookbehindgroups if lookbehindgroups is None: state.lookbehindgroups = state.groups p = _parse_sub(source, state, verbose, nested + 1) if dir < 0: if lookbehindgroups is None: state.lookbehindgroups = None if not sourcematch(")"): raise source.error("missing ), unterminated subpattern", source.tell() - start) if char == "=": subpatternappend((ASSERT, (dir, p))) else: subpatternappend((ASSERT_NOT, (dir, p))) continue elif char == "(": # conditional backreference group condname = source.getuntil(")", "group name") if condname.isidentifier(): source.checkgroupname(condname, 1, nested) condgroup = state.groupdict.get(condname) if condgroup is None: msg = "unknown group name %r" % condname raise source.error(msg, len(condname) + 1) else: try: condgroup = int(condname) if condgroup < 0: raise ValueError except ValueError: msg = "bad character in group name %r" % condname raise source.error(msg, len(condname) + 1) from None if not condgroup: raise source.error("bad group number", len(condname) + 1) if condgroup >= MAXGROUPS: msg = "invalid group reference %d" % condgroup raise source.error(msg, len(condname) + 1) if condgroup not in state.grouprefpos: state.grouprefpos[condgroup] = ( source.tell() - len(condname) - 1 ) if not (condname.isdecimal() and condname.isascii()): import warnings warnings.warn( "bad character in group name %s at position %d" % (repr(condname) if source.istext else ascii(condname), source.tell() - len(condname) - 1), DeprecationWarning, stacklevel=nested + 6 ) state.checklookbehindgroup(condgroup, source) item_yes = _parse(source, state, verbose, nested + 1) if source.match("|"): item_no = _parse(source, state, verbose, nested + 1) if source.next == "|": raise source.error("conditional backref with more than two branches") else: item_no = None if not source.match(")"): raise source.error("missing ), unterminated subpattern", source.tell() - start) subpatternappend((GROUPREF_EXISTS, (condgroup, item_yes, item_no))) continue elif char == ">": # non-capturing, atomic group capture = False atomic = True elif char in FLAGS or char == "-": # flags flags = _parse_flags(source, state, char) if flags is None: # global flags if not first or subpattern: > raise source.error('global flags not at the > start ' 'of the expression', source.tell() - start) E re.error: global flags not at the start of the expression at position 1 /usr/lib/python3.11/re/_parser.py:841: error ... ===== 200 failed, 48 passed, 1 skipped, 1 xfailed, 217 warnings in 25.94s ====== E: pybuild pybuild:379: test: plugin distutils failed with: exit code=1: cd /<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pyscss/build; python3.11 -m pytest {dir}/scss/tests ...