diff --git a/hedy.py b/hedy.py index b3ac610a743..6aed520790f 100644 --- a/hedy.py +++ b/hedy.py @@ -2218,10 +2218,10 @@ def if_pressed_else(self, meta, args): self.process_arg_for_data_access(args[0], meta.line) key = args[0] - if_code = args[1] + if_code = self.if_pressed_code_prepend_global_vars(args[1]) if_function_name = self.make_function_name(key) - else_code = args[2] + else_code = self.if_pressed_code_prepend_global_vars(args[2]) else_function_name = self.make_function_name('else') return ( @@ -2233,6 +2233,24 @@ def if_pressed_else(self, meta, args): self.make_extension_call() ) + def if_pressed_code_prepend_global_vars(self, lines): + """ Combines if_pressed arguments into a code snippet, which will be placed inside a function. To allow + assigning and reassigning variables, all lookup entries, except for funcs and list access, are marked as + global and prepended to the snippet. For example: + points = 5 + def if_pressed(): + global points <-- without this line, we get an error + points = points + 1 + """ + lines = lines if isinstance(lines, list) else [lines] + variables = [e.name for e in self.lookup if '(' not in e.name and '[' not in e.name] + if variables and lines: + variables = sorted(list(set(variables))) + global_vars = f"global {', '.join(variables)}" + lines.insert(0, global_vars) + + return '\n'.join(lines) + @v_args(meta=True) @hedy_transpiler(level=6) @@ -2542,11 +2560,9 @@ def ifs(self, meta, args): def if_pressed(self, meta, args): self.process_arg_for_data_access(args[0], meta.line) args = [a for a in args if a != ""] # filter out in|dedent tokens - key = args[0] - if_code = '\n'.join([x for x in args[1:]]) - if_code = ConvertToPython.indent(if_code) + if_code = self.if_pressed_code_prepend_global_vars(args[1:]) if_function_name = self.make_function_name(key) return ( @@ -2555,10 +2571,9 @@ def if_pressed(self, meta, args): self.make_function(if_function_name, if_code) + '\n' ) - def if_pressed_elses(self, met, args): + def if_pressed_elses(self, meta, args): args = [a for a in args if a != ""] # filter out in|dedent tokens - else_code = '\n'.join([x for x in args[0:]]) - else_code = ConvertToPython.indent(else_code) + else_code = self.if_pressed_code_prepend_global_vars(args) else_function_name = self.make_function_name('else') return ( @@ -3034,6 +3049,16 @@ def returns(self, meta, args): except ValueError: return Value(f'''{args_str}''')""") + def add_if_key_mapping(self, key, function_name): + return textwrap.dedent(f"""\ + global {function_name} + if_pressed_mapping['{key}'] = '{function_name}'""") + + def add_else_key_mapping(self, function_name): + return textwrap.dedent(f"""\ + global {function_name} + if_pressed_mapping['else'] = '{function_name}'""") + @v_args(meta=True) @hedy_transpiler(level=13) @@ -3087,8 +3112,7 @@ def not_equal(self, meta, args): class ConvertToPython_15(ConvertToPython_14): def while_loop(self, meta, args): args = [a for a in args if a != ""] # filter out in|dedent tokens - all_lines = [ConvertToPython.indent(x) for x in args[1:]] - body = "\n".join(all_lines) + body = self.indent("\n".join(args[1:])) body = add_sleep_to_command(body, True, self.is_debug, location="after") exception = self.make_index_error_check_if_list([args[0]]) return exception + "while " + args[0] + ":" + self.add_debug_breakpoint() + "\n" + body @@ -3156,11 +3180,9 @@ def elifs(self, meta, args): def if_pressed_elifs(self, meta, args): self.process_arg_for_data_access(args[0], meta.line) args = [a for a in args if a != ""] # filter out in|dedent tokens - key = args[0] - elif_code = '\n'.join([x for x in args[1:]]) - elif_code = self.indent(elif_code) + elif_code = self.if_pressed_code_prepend_global_vars(args[1:]) elif_function_name = self.make_function_name(key) return ( diff --git a/static/vendor/skulpt-stdlib-extensions.js b/static/vendor/skulpt-stdlib-extensions.js index 81b3abb2b68..4a3dfb5f943 100644 --- a/static/vendor/skulpt-stdlib-extensions.js +++ b/static/vendor/skulpt-stdlib-extensions.js @@ -33,7 +33,15 @@ var $builtinmodule = function (name) { // If mapped key is a variable (not char), we retrieve variable value and use that // otherwise if char, use that. const charOrVar = value[0].v; - let mapLetterKey = Object.hasOwn(Sk.globals, charOrVar) ? Sk.globals[charOrVar].v : charOrVar; + + let mapLetterKey = charOrVar; + if (Object.hasOwn(Sk.globals, charOrVar)) { + if (Sk.globals[charOrVar].hasOwnProperty('v')) { + mapLetterKey = Sk.globals[charOrVar].v; + } else { + mapLetterKey = Sk.globals[charOrVar].$d.entries['data'][1].v; + } + } if (event.key === `${mapLetterKey}`){ pressed_mapped_key = true; diff --git a/tests/test_level/test_level_05.py b/tests/test_level/test_level_05.py index c54ae538b18..1a8e240b415 100644 --- a/tests/test_level/test_level_05.py +++ b/tests/test_level/test_level_05.py @@ -1125,7 +1125,7 @@ def if_pressed_else_(): self.multi_level_tester(code=code, expected=expected, max_level=7) - def test_if_pressed_x_is_variable(self): + def test_if_pressed_x_is_var(self): code = textwrap.dedent("""\ x is a if x is pressed print 'it is a letter key' else print 'it is another letter key' @@ -1137,14 +1137,60 @@ def test_if_pressed_x_is_variable(self): if_pressed_mapping['x'] = 'if_pressed_x_' if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_x_(): + global x print(f'it is a letter key') def if_pressed_else_(): + global x print(f'it is another letter key') extensions.if_pressed(if_pressed_mapping) print(f'{x}')""") self.single_level_tester(code=code, expected=expected) + def test_if_pressed_x_is_var_and_var_reassignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed x is great else x is not great + print x""") + + expected = self.dedent("""\ + x = 'a' + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_x_(): + global x + x = 'great' + def if_pressed_else_(): + global x + x = 'not great' + extensions.if_pressed(if_pressed_mapping) + print(f'{x}')""") + + self.single_level_tester(code=code, expected=expected) + + def test_if_pressed_x_is_var_and_new_var_assignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed m is great else m is not great + print m""") + + expected = self.dedent("""\ + x = 'a' + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_x_(): + global m, x + m = 'great' + def if_pressed_else_(): + global m, x + m = 'not great' + extensions.if_pressed(if_pressed_mapping) + print(f'{m}')""") + + self.single_level_tester(code=code, expected=expected) + def test_double_if_pressed(self): code = textwrap.dedent("""\ if x is pressed print 'first key' else print 'something else' diff --git a/tests/test_level/test_level_06.py b/tests/test_level/test_level_06.py index 368507d6ad7..f8889bd505e 100644 --- a/tests/test_level/test_level_06.py +++ b/tests/test_level/test_level_06.py @@ -2654,7 +2654,7 @@ def test_if_ar_number_not_list_with_latin_numbers(self): # # if pressed tests # - def test_if_pressed_x_is_variable(self): + def test_if_pressed_x_is_var(self): code = textwrap.dedent("""\ x is a if x is pressed print 'it is a letter key' else print 'it is another letter key' @@ -2666,10 +2666,56 @@ def test_if_pressed_x_is_variable(self): if_pressed_mapping['x'] = 'if_pressed_x_' if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_x_(): + global x print(f'it is a letter key') def if_pressed_else_(): + global x print(f'it is another letter key') extensions.if_pressed(if_pressed_mapping) print(f'{x}')""") self.multi_level_tester(code=code, expected=expected, max_level=7) + + def test_if_pressed_x_is_var_and_var_reassignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed x is great else x is not great + print x""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_x_(): + global x + x = Value('great') + def if_pressed_else_(): + global x + x = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'{x}')""") + + self.multi_level_tester(code=code, expected=expected, max_level=7) + + def test_if_pressed_x_is_var_and_new_var_assignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed m is great else m is not great + print m""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_x_(): + global m, x + m = Value('great') + def if_pressed_else_(): + global m, x + m = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'{m}')""") + + self.multi_level_tester(code=code, expected=expected, max_level=7) diff --git a/tests/test_level/test_level_08.py b/tests/test_level/test_level_08.py index 6e9ee7f7a62..ac372f296b8 100644 --- a/tests/test_level/test_level_08.py +++ b/tests/test_level/test_level_08.py @@ -1141,13 +1141,88 @@ def test_if_pressed_x_print(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - print(f'it is a letter key') + print(f'it is a letter key') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'other key') + print(f'other key') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester(code=code, expected=expected, max_level=11) + def test_if_pressed_x_is_var(self): + code = textwrap.dedent("""\ + x is a + if x is pressed + print 'it is a letter key' + else + print 'it is another letter key' + print x""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global x + print(f'it is a letter key') + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global x + print(f'it is another letter key') + extensions.if_pressed(if_pressed_mapping) + print(f'{x}')""") + + self.multi_level_tester(code=code, expected=expected, max_level=11) + + def test_if_pressed_x_is_var_and_var_reassignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed + x is great + else + x is not great + print x""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global x + x = Value('great') + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global x + x = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'{x}')""") + + self.multi_level_tester(code=code, expected=expected, max_level=11) + + def test_if_pressed_x_is_var_and_new_var_assignment(self): + code = textwrap.dedent("""\ + x is a + if x is pressed + m is great + else + m is not great + print m""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global m, x + m = Value('great') + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global m, x + m = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'{m}')""") + + self.multi_level_tester(code=code, expected=expected, max_level=11) + def test_double_if_pressed(self): code = textwrap.dedent("""\ if x is pressed @@ -1163,18 +1238,18 @@ def test_double_if_pressed(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - print(f'first key') + print(f'first key') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'other key') + print(f'other key') extensions.if_pressed(if_pressed_mapping) if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['y'] = 'if_pressed_y_' def if_pressed_y_(): - print(f'second key') + print(f'second key') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'other key') + print(f'other key') extensions.if_pressed(if_pressed_mapping)""") self.maxDiff = None @@ -1191,10 +1266,10 @@ def test_if_pressed_is_number_key_print(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['1'] = 'if_pressed_1_' def if_pressed_1_(): - print(f'it is a number key') + print(f'it is a number key') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'it is something else') + print(f'it is something else') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester(code=code, expected=expected, max_level=11) @@ -1215,19 +1290,19 @@ def test_if_pressed_command_in_between(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['a'] = 'if_pressed_a_' def if_pressed_a_(): - print(f'A is pressed') + print(f'A is pressed') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'other') + print(f'other') extensions.if_pressed(if_pressed_mapping) print(f'Press another button') if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['b'] = 'if_pressed_b_' def if_pressed_b_(): - print(f'B is pressed') + print(f'B is pressed') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'other') + print(f'other') extensions.if_pressed(if_pressed_mapping)""") self.maxDiff = None diff --git a/tests/test_level/test_level_09.py b/tests/test_level/test_level_09.py index ce0c20d88bd..fead4116ca4 100644 --- a/tests/test_level/test_level_09.py +++ b/tests/test_level/test_level_09.py @@ -368,12 +368,12 @@ def test_if_pressed_repeat(self): if_pressed_mapping = {{"else": "if_pressed_default_else"}} if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - for __i in range({self.int_transpiled(5)}): - print(f'doe het 5 keer!') - time.sleep(0.1) + for __i in range({self.int_transpiled(5)}): + print(f'doe het 5 keer!') + time.sleep(0.1) if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'1 keertje') + print(f'1 keertje') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester(code=code, expected=expected, max_level=11) diff --git a/tests/test_level/test_level_10.py b/tests/test_level/test_level_10.py index 059d72d351d..7e0fc01fd76 100644 --- a/tests/test_level/test_level_10.py +++ b/tests/test_level/test_level_10.py @@ -160,12 +160,14 @@ def test_if_pressed_with_list_and_for(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - for dier in lijstje.data: - print(f'{dier}') - time.sleep(0.1) + global dier, lijstje + for dier in lijstje.data: + print(f'{dier}') + time.sleep(0.1) if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'onbekend dier') + global dier, lijstje + print(f'onbekend dier') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester( diff --git a/tests/test_level/test_level_11.py b/tests/test_level/test_level_11.py index 4586b85bf60..06f29526ada 100644 --- a/tests/test_level/test_level_11.py +++ b/tests/test_level/test_level_11.py @@ -343,10 +343,12 @@ def test_if_pressed_works_in_for_loop(self): if_pressed_mapping = {"else": "if_pressed_default_else"} if_pressed_mapping['p'] = 'if_pressed_p_' def if_pressed_p_(): - print(f'press') + global i + print(f'press') if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'no!') + global i + print(f'no!') extensions.if_pressed(if_pressed_mapping) time.sleep(0.1)""", ' ')) diff --git a/tests/test_level/test_level_12.py b/tests/test_level/test_level_12.py index 07f8f363c11..f6c7abdd28b 100644 --- a/tests/test_level/test_level_12.py +++ b/tests/test_level/test_level_12.py @@ -2958,7 +2958,6 @@ def test_list_with_spaces_nested_for_loop(self): # # if pressed tests # - def test_if_pressed_with_list_and_for(self): code = textwrap.dedent("""\ lijstje is 'kip', 'haan', 'kuiken' @@ -2971,14 +2970,18 @@ def test_if_pressed_with_list_and_for(self): expected = self.dedent("""\ lijstje = Value([Value('kip'), Value('haan'), Value('kuiken')]) if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - for dier in lijstje.data: - print(f'''dier''') - time.sleep(0.1) + global dier, lijstje + for dier in lijstje.data: + print(f'''dier''') + time.sleep(0.1) + global if_pressed_else_ if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'''onbekend dier''') + global dier, lijstje + print(f'''onbekend dier''') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester( @@ -2986,6 +2989,87 @@ def if_pressed_else_(): expected=expected, max_level=15) + def test_if_pressed_x_is_var(self): + code = textwrap.dedent("""\ + x is 'a' + if x is pressed + print 'it is a letter key' + else + print 'it is another letter key' + print x""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global x + print(f'''it is a letter key''') + global if_pressed_else_ + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global x + print(f'''it is another letter key''') + extensions.if_pressed(if_pressed_mapping) + print(f'''{x}''')""") + + self.multi_level_tester(code=code, expected=expected, max_level=16) + + def test_if_pressed_x_is_var_and_var_reassignment(self): + code = textwrap.dedent("""\ + x is 'a' + if x is pressed + x is 'great' + else + x is 'not great' + print x""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global x + x = Value('great') + global if_pressed_else_ + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global x + x = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'''{x}''')""") + + self.multi_level_tester(code=code, expected=expected, max_level=16) + + def test_if_pressed_x_is_var_and_new_var_assignment(self): + code = textwrap.dedent("""\ + x is 'a' + if x is pressed + m is 'great' + else + m is 'not great' + print m""") + + expected = self.dedent("""\ + x = Value('a') + if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ + if_pressed_mapping['x'] = 'if_pressed_x_' + def if_pressed_x_(): + global m, x + m = Value('great') + global if_pressed_else_ + if_pressed_mapping['else'] = 'if_pressed_else_' + def if_pressed_else_(): + global m, x + m = Value('not great') + extensions.if_pressed(if_pressed_mapping) + print(f'''{m}''')""") + + self.multi_level_tester(code=code, expected=expected, max_level=16) + # # function tests # diff --git a/tests/test_level/test_level_15.py b/tests/test_level/test_level_15.py index 8b42ec71b05..71657af0f67 100644 --- a/tests/test_level/test_level_15.py +++ b/tests/test_level/test_level_15.py @@ -631,9 +631,10 @@ def test_if_pressed_without_else_works(self): expected = textwrap.dedent("""\ if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_p_ if_pressed_mapping['p'] = 'if_pressed_p_' def if_pressed_p_(): - print(f'''press''') + print(f'''press''') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester(code, expected=expected, max_level=16) @@ -652,14 +653,18 @@ def test_if_pressed_works_in_while_loop(self): stop = Value(0, num_sys='Latin') while stop.data!=1: if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_p_ if_pressed_mapping['p'] = 'if_pressed_p_' def if_pressed_p_(): - print(f'''press''') + global stop + print(f'''press''') extensions.if_pressed(if_pressed_mapping) if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_s_ if_pressed_mapping['s'] = 'if_pressed_s_' def if_pressed_s_(): - stop = Value(1, num_sys='Latin') + global stop + stop = Value(1, num_sys='Latin') extensions.if_pressed(if_pressed_mapping) time.sleep(0.1) print(f'''Uit de loop!''')""") @@ -681,14 +686,16 @@ def test_if_pressed_multiple_lines_body(self): expected = textwrap.dedent("""\ if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - print(f'''x''') - print(f'''lalalalala''') + print(f'''x''') + print(f'''lalalalala''') + global if_pressed_else_ if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'''not x''') - print(f'''lalalalala''') + print(f'''not x''') + print(f'''lalalalala''') extensions.if_pressed(if_pressed_mapping)""") self.multi_level_tester( diff --git a/tests/test_level/test_level_16.py b/tests/test_level/test_level_16.py index edadcb956d7..3581acb7ab2 100644 --- a/tests/test_level/test_level_16.py +++ b/tests/test_level/test_level_16.py @@ -907,11 +907,13 @@ def test_if_pressed_with_list_and_for(self): expected = self.dedent("""\ lijstje = Value([Value('kip'), Value('haan'), Value('kuiken')]) if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_x_ if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_(): - for dier in lijstje.data: - print(f'''dier''') - time.sleep(0.1) + global dier, lijstje + for dier in lijstje.data: + print(f'''dier''') + time.sleep(0.1) extensions.if_pressed(if_pressed_mapping)""") self.single_level_tester(code=code, expected=expected) diff --git a/tests/test_level/test_level_17.py b/tests/test_level/test_level_17.py index 68326feed7f..996f3a01598 100644 --- a/tests/test_level/test_level_17.py +++ b/tests/test_level/test_level_17.py @@ -573,15 +573,16 @@ def test_not_equal_with_diff_types_gives_error(self, left, right): def test_if_pressed_with_color(self): code = textwrap.dedent("""\ - if x is pressed: - color red""") + if x is pressed: + color 'red'""") expected = self.dedent( f"""\ if_pressed_mapping = {{"else": "if_pressed_default_else"}} + global if_pressed_x_ if_pressed_mapping['x'] = 'if_pressed_x_' def if_pressed_x_():""", - (self.color_transpiled('"red"'), ' '), + (self.color_transpiled('red'), ' '), "extensions.if_pressed(if_pressed_mapping)") self.multi_level_tester( @@ -705,15 +706,18 @@ def test_pressed_elif(self): expected = self.dedent("""\ if_pressed_mapping = {"else": "if_pressed_default_else"} + global if_pressed_a_ if_pressed_mapping['a'] = 'if_pressed_a_' def if_pressed_a_(): - print(f'''A''') + print(f'''A''') + global if_pressed_b_ if_pressed_mapping['b'] = 'if_pressed_b_' def if_pressed_b_(): - print(f'''B''') + print(f'''B''') + global if_pressed_else_ if_pressed_mapping['else'] = 'if_pressed_else_' def if_pressed_else_(): - print(f'''Other''') + print(f'''Other''') extensions.if_pressed(if_pressed_mapping)""") self.single_level_tester(code=code, expected=expected)