diff options
Diffstat (limited to 'tests/scripts')
-rw-r--r-- | tests/scripts/python/testapi.py | 234 | ||||
-rwxr-xr-x | tests/scripts/python/testapigen.py | 74 | ||||
-rwxr-xr-x | tests/scripts/python/unparse.py | 58 | ||||
-rw-r--r-- | tests/scripts/test-scripts.cpp | 6 |
4 files changed, 322 insertions, 50 deletions
diff --git a/tests/scripts/python/testapi.py b/tests/scripts/python/testapi.py index 5e9df9a13..1370fa884 100644 --- a/tests/scripts/python/testapi.py +++ b/tests/scripts/python/testapi.py @@ -37,8 +37,8 @@ def check(result, condition, lineno): weechat.prnt('', ' TEST OK: ' + condition) else: weechat.prnt('', - 'SCRIPT_SOURCE' + ':' + lineno + ':1: ' + - 'ERROR: [' + 'SCRIPT_NAME' + '] condition is false: ' + + '{SCRIPT_SOURCE}' + ':' + lineno + ':1: ' + + 'ERROR: [' + '{SCRIPT_NAME}' + '] condition is false: ' + condition) @@ -144,6 +144,211 @@ def test_lists(): weechat.list_free(ptr_list) +def config_reload_cb(data, config_file): + """Config reload callback.""" + return weechat.WEECHAT_RC_OK + + +def section_read_cb(data, config_file, section, option_name, value): + """Section read callback.""" + return weechat.WEECHAT_RC_OK + + +def section_write_cb(data, config_file, section_name): + """Section write callback.""" + return weechat.WEECHAT_RC_OK + + +def section_write_default_cb(data, config_file, section_name): + """Section write default callback.""" + return weechat.WEECHAT_RC_OK + + +def section_create_option_cb(data, config_file, section, option_name, value): + """Section create option callback.""" + return weechat.WEECHAT_RC_OK + + +def section_delete_option_cb(data, config_file, section, option): + """Section delete option callback.""" + return weechat.WEECHAT_RC_OK + + +def option_check_value_cb(data, option, value): + """Option check value callback.""" + return 1 + + +def option_change_cb(data, option): + """Option change callback.""" + return 1 + + +def option_delete_cb(data, option): + """Option delete callback.""" + return 1 + + +def test_config(): + """Test config functions.""" + # config + ptr_config = weechat.config_new( + 'test_config_' + '{SCRIPT_LANGUAGE}', + 'config_reload_cb', 'config_reload_data', + ) + check(ptr_config != '') + # section + ptr_section = weechat.config_new_section( + ptr_config, 'section1', 0, 0, + 'section_read_cb', '', + 'section_write_cb', '', + 'section_write_default_cb', '', + 'section_create_option_cb', '', + 'section_delete_option_cb', '', + ) + check(ptr_section != '') + # search section + ptr_section2 = weechat.config_search_section(ptr_config, 'section1') + check(ptr_section2 == ptr_section) + # boolean option + ptr_opt_bool = weechat.config_new_option( + ptr_config, ptr_section, 'option_bool', 'boolean', 'bool option', + '', 0, 0, 'on', 'on', 0, + 'option_check_value_cb', '', + 'option_change_cb', '', + 'option_delete_cb', '', + ) + check(ptr_opt_bool != '') + check(weechat.config_boolean(ptr_opt_bool) == 1) + check(weechat.config_option_set(ptr_opt_bool, 'off', 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set(ptr_opt_bool, 'off', 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_boolean(ptr_opt_bool) == 0) + check(weechat.config_boolean_default(ptr_opt_bool) == 1) + check(weechat.config_option_reset(ptr_opt_bool, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_reset(ptr_opt_bool, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_boolean(ptr_opt_bool) == 1) + # integer option + ptr_opt_int = weechat.config_new_option( + ptr_config, ptr_section, 'option_int', 'integer', 'int option', + '', 0, 256, '2', '2', 0, + 'option_check_value_cb', '', + 'option_change_cb', '', + 'option_delete_cb', '', + ) + check(ptr_opt_int != '') + check(weechat.config_integer(ptr_opt_int) == 2) + check(weechat.config_option_set(ptr_opt_int, '15', 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set(ptr_opt_int, '15', 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_integer(ptr_opt_int) == 15) + check(weechat.config_integer_default(ptr_opt_int) == 2) + check(weechat.config_option_reset(ptr_opt_int, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_reset(ptr_opt_int, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_integer(ptr_opt_int) == 2) + # integer option (with string values) + ptr_opt_int_str = weechat.config_new_option( + ptr_config, ptr_section, 'option_int_str', 'integer', 'int option str', + 'val1|val2|val3', 0, 0, 'val2', 'val2', 0, + 'option_check_value_cb', '', + 'option_change_cb', '', + 'option_delete_cb', '', + ) + check(ptr_opt_int_str != '') + check(weechat.config_integer(ptr_opt_int_str) == 1) + check(weechat.config_string(ptr_opt_int_str) == 'val2') + check(weechat.config_option_set(ptr_opt_int_str, 'val1', 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set(ptr_opt_int_str, 'val1', 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_integer(ptr_opt_int_str) == 0) + check(weechat.config_string(ptr_opt_int_str) == 'val1') + check(weechat.config_integer_default(ptr_opt_int_str) == 1) + check(weechat.config_string_default(ptr_opt_int_str) == 'val2') + check(weechat.config_option_reset(ptr_opt_int_str, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_reset(ptr_opt_int_str, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_integer(ptr_opt_int_str) == 1) + check(weechat.config_string(ptr_opt_int_str) == 'val2') + # string option + ptr_opt_str = weechat.config_new_option( + ptr_config, ptr_section, 'option_str', 'string', 'str option', + '', 0, 0, 'value', 'value', 1, + 'option_check_value_cb', '', + 'option_change_cb', '', + 'option_delete_cb', '', + ) + check(ptr_opt_str != '') + check(weechat.config_string(ptr_opt_str) == 'value') + check(weechat.config_option_set(ptr_opt_str, 'value2', 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set(ptr_opt_str, 'value2', 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_string(ptr_opt_str) == 'value2') + check(weechat.config_string_default(ptr_opt_str) == 'value') + check(weechat.config_option_reset(ptr_opt_str, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_reset(ptr_opt_str, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_string(ptr_opt_str) == 'value') + check(weechat.config_option_is_null(ptr_opt_str) == 0) + check(weechat.config_option_set_null(ptr_opt_str, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set_null(ptr_opt_str, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_option_is_null(ptr_opt_str) == 1) + check(weechat.config_string(ptr_opt_str) == '') + check(weechat.config_option_unset(ptr_opt_str) == 1) # UNSET_OK_RESET + check(weechat.config_option_unset(ptr_opt_str) == 0) # UNSET_OK_NO_RESET + check(weechat.config_string(ptr_opt_str) == 'value') + check(weechat.config_option_default_is_null(ptr_opt_str) == 0) + # color option + ptr_opt_col = weechat.config_new_option( + ptr_config, ptr_section, 'option_col', 'color', 'col option', + '', 0, 0, 'lightgreen', 'lightgreen', 0, + 'option_check_value_cb', '', + 'option_change_cb', '', + 'option_delete_cb', '', + ) + check(ptr_opt_col != '') + check(weechat.config_color(ptr_opt_col) == 'lightgreen') + check(weechat.config_option_set(ptr_opt_col, 'red', 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_set(ptr_opt_col, 'red', 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_color(ptr_opt_col) == 'red') + check(weechat.config_color_default(ptr_opt_col) == 'lightgreen') + check(weechat.config_option_reset(ptr_opt_col, 1) == 2) # SET_OK_CHANGED + check(weechat.config_option_reset(ptr_opt_col, 1) == 1) # SET_OK_SAME_VALUE + check(weechat.config_color(ptr_opt_col) == 'lightgreen') + # search option + ptr_opt_bool2 = weechat.config_search_option(ptr_config, ptr_section, + 'option_bool') + check(ptr_opt_bool2 == ptr_opt_bool) + # string to boolean + check(weechat.config_string_to_boolean('') == 0) + check(weechat.config_string_to_boolean('off') == 0) + check(weechat.config_string_to_boolean('0') == 0) + check(weechat.config_string_to_boolean('on') == 1) + check(weechat.config_string_to_boolean('1') == 1) + # rename option + weechat.config_option_rename(ptr_opt_bool, 'option_bool_renamed') + # read config (create it because it does not exist yet) + check(weechat.config_read(ptr_config) == 0) # CONFIG_READ_OK + # write config + check(weechat.config_write(ptr_config) == 0) # CONFIG_WRITE_OK + # reload config + check(weechat.config_reload(ptr_config) == 0) # CONFIG_READ_OK + # free option + weechat.config_option_free(ptr_opt_bool) + # free options in section + weechat.config_section_free_options(ptr_section) + # free section + weechat.config_section_free(ptr_section) + # free config + weechat.config_free(ptr_config) + # config_get + ptr_option = weechat.config_get('weechat.look.item_time_format') + check(ptr_option != '') + check(weechat.config_string(ptr_option) == '%H:%M') + # config plugin + check(weechat.config_get_plugin('option') == '') + check(weechat.config_is_set_plugin('option') == 0) + check(weechat.config_set_plugin('option', 'value') == 1) # SET_OK_SAME_VALUE + weechat.config_set_desc_plugin('option', 'description of option') + check(weechat.config_get_plugin('option') == 'value') + check(weechat.config_is_set_plugin('option') == 1) + check(weechat.config_unset_plugin('option') == 2) # UNSET_OK_REMOVED + check(weechat.config_unset_plugin('option') == -1) # UNSET_ERROR + + def test_key(): """Test key functions.""" check( @@ -209,7 +414,7 @@ def test_display(): def completion_cb(data, completion_item, buf, completion): """Completion callback.""" check(data == 'completion_data') - check(completion_item == 'SCRIPT_NAME') + check(completion_item == '{SCRIPT_NAME}') check(weechat.completion_get_string(completion, 'args') == 'w') weechat.completion_list_add(completion, 'word_completed', 0, weechat.WEECHAT_LIST_POS_END) @@ -226,7 +431,7 @@ def command_cb(data, buf, args): def command_run_cb(data, buf, command): """Command_run callback.""" check(data == 'command_run_data') - check(command == '/cmd' + 'SCRIPT_NAME' + ' word_completed') + check(command == '/cmd' + '{SCRIPT_NAME}' + ' word_completed') return weechat.WEECHAT_RC_OK @@ -238,16 +443,16 @@ def timer_cb(data, remaining_calls): def test_hooks(): """Test function hook_command.""" # hook_completion / hook_completion_args / and hook_command - hook_cmplt = weechat.hook_completion('SCRIPT_NAME', 'description', + hook_cmplt = weechat.hook_completion('{SCRIPT_NAME}', 'description', 'completion_cb', 'completion_data') - hook_cmd = weechat.hook_command('cmd' + 'SCRIPT_NAME', 'description', + hook_cmd = weechat.hook_command('cmd' + '{SCRIPT_NAME}', 'description', 'arguments', 'description arguments', - '%(' + 'SCRIPT_NAME' + ')', + '%(' + '{SCRIPT_NAME}' + ')', 'command_cb', 'command_data') - weechat.command('', '/input insert /cmd' + 'SCRIPT_NAME' + ' w') + weechat.command('', '/input insert /cmd' + '{SCRIPT_NAME}' + ' w') weechat.command('', '/input complete_next') # hook_command_run - hook_cmd_run = weechat.hook_command_run('/cmd' + 'SCRIPT_NAME' + '*', + hook_cmd_run = weechat.hook_command_run('/cmd' + '{SCRIPT_NAME}' + '*', 'command_run_cb', 'command_run_data') weechat.command('', '/input return') weechat.unhook(hook_cmd_run) @@ -419,11 +624,12 @@ def cmd_test_cb(data, buf, args): """Run all the tests.""" weechat.prnt('', '>>>') weechat.prnt('', '>>> ------------------------------') - weechat.prnt('', '>>> Testing ' + 'SCRIPT_LANGUAGE' + ' API') - weechat.prnt('', ' > TESTS: ' + 'SCRIPT_TESTS') + weechat.prnt('', '>>> Testing ' + '{SCRIPT_LANGUAGE}' + ' API') + weechat.prnt('', ' > TESTS: ' + '{SCRIPT_TESTS}') test_plugins() test_strings() test_lists() + test_config() test_key() test_display() test_hooks() @@ -436,6 +642,6 @@ def cmd_test_cb(data, buf, args): def weechat_init(): """Main function.""" - weechat.register('SCRIPT_NAME', 'SCRIPT_AUTHOR', 'SCRIPT_VERSION', - 'SCRIPT_LICENSE', 'SCRIPT_DESCRIPTION', '', '') - weechat.hook_command('SCRIPT_NAME', '', '', '', '', 'cmd_test_cb', '') + weechat.register('{SCRIPT_NAME}', '{SCRIPT_AUTHOR}', '{SCRIPT_VERSION}', + '{SCRIPT_LICENSE}', '{SCRIPT_DESCRIPTION}', '', '') + weechat.hook_command('{SCRIPT_NAME}', '', '', '', '', 'cmd_test_cb', '') diff --git a/tests/scripts/python/testapigen.py b/tests/scripts/python/testapigen.py index 1baa62d44..43fca9ee0 100755 --- a/tests/scripts/python/testapigen.py +++ b/tests/scripts/python/testapigen.py @@ -98,56 +98,54 @@ class WeechatScript(object): # pylint: disable=too-many-instance-attributes self.output_dir = os.path.realpath(output_dir) self.language = language self.extension = extension - self.script_name = 'testapi.%s' % extension + self.script_name = 'weechat_testapi.%s' % extension self.script_path = os.path.join(self.output_dir, self.script_name) self.comment_char = comment_char self.weechat_module = weechat_module - self.rename_functions() - self.replace_variables() + self.update_tree() def comment(self, string): """Get a commented line.""" return '%s %s' % (self.comment_char, string) - def rename_functions(self): - """Rename some API functions in the tree.""" + def update_tree(self): + """Make changes in AST tree.""" functions = { 'prnt': 'print', 'prnt_date_tags': 'print_date_tags', 'prnt_y': 'print_y', 'prnt_y_date_tags': 'print_y_date_tags', } + tests_count = 0 for node in ast.walk(self.tree): - if isinstance(node, ast.Call) and \ + # rename some API functions + if self.language != 'python' and \ + isinstance(node, ast.Call) and \ isinstance(node.func, ast.Attribute) and \ node.func.value.id == 'weechat': node.func.attr = functions.get(node.func.attr, node.func.attr) - - def replace_variables(self): - """Replace script variables in string values.""" - variables = { - 'SCRIPT_SOURCE': self.source_script, - 'SCRIPT_NAME': self.script_name, - 'SCRIPT_PATH': self.script_path, - 'SCRIPT_AUTHOR': 'Sebastien Helleu', - 'SCRIPT_VERSION': '1.0', - 'SCRIPT_LICENSE': 'GPL3', - 'SCRIPT_DESCRIPTION': ('%s scripting API test' % - self.language.capitalize()), - 'SCRIPT_LANGUAGE': self.language, - } - # count the total number of tests - tests_count = 0 - for node in ast.walk(self.tree): + # count number of tests if isinstance(node, ast.Call) and \ isinstance(node.func, ast.Name) and \ node.func.id == 'check': tests_count += 1 - variables['SCRIPT_TESTS'] = str(tests_count) + + # replace script variables in string values + variables = { + '{SCRIPT_SOURCE}': self.source_script, + '{SCRIPT_NAME}': self.script_name, + '{SCRIPT_PATH}': self.script_path, + '{SCRIPT_AUTHOR}': 'Sebastien Helleu', + '{SCRIPT_VERSION}': '1.0', + '{SCRIPT_LICENSE}': 'GPL3', + '{SCRIPT_DESCRIPTION}': ('%s scripting API test' % + self.language.capitalize()), + '{SCRIPT_LANGUAGE}': self.language, + '{SCRIPT_TESTS}': str(tests_count), + } # replace variables for node in ast.walk(self.tree): - if isinstance(node, ast.Str) and \ - node.s in variables: + if isinstance(node, ast.Str) and node.s in variables: node.s = variables[node.s] def write_header(self, output): @@ -188,10 +186,6 @@ class WeechatPythonScript(WeechatScript): super(WeechatPythonScript, self).__init__( UnparsePython, tree, source_script, output_dir, 'python', 'py') - def rename_functions(self): - # nothing to rename in Python - pass - def write_header(self, output): output.write('# -*- coding: utf-8 -*-\n') super(WeechatPythonScript, self).write_header(output) @@ -224,12 +218,16 @@ class WeechatRubyScript(WeechatScript): super(WeechatRubyScript, self).__init__( UnparseRuby, tree, source_script, output_dir, 'ruby', 'rb') - def rename_functions(self): - super(WeechatRubyScript, self).rename_functions() + def update_tree(self): + super(WeechatRubyScript, self).update_tree() for node in ast.walk(self.tree): if isinstance(node, ast.Attribute) and \ node.value.id == 'weechat': node.value.id = 'Weechat' + if isinstance(node, ast.Call) \ + and isinstance(node.func, ast.Attribute) \ + and node.func.attr == 'config_new_option': + node.args = node.args[:11] + [ast.List(node.args[11:])] class WeechatLuaScript(WeechatScript): @@ -265,6 +263,18 @@ class WeechatGuileScript(WeechatScript): UnparseGuile, tree, source_script, output_dir, 'guile', 'scm', comment_char=';') + def update_tree(self): + super(WeechatGuileScript, self).update_tree() + functions_with_list = ( + 'config_new_section', + 'config_new_option', + ) + for node in ast.walk(self.tree): + if isinstance(node, ast.Call) \ + and isinstance(node.func, ast.Attribute) \ + and node.func.attr in functions_with_list: + node.args = [ast.Call('list', node.args)] + def write_footer(self, output): output.write('\n' '(weechat_init)\n') diff --git a/tests/scripts/python/unparse.py b/tests/scripts/python/unparse.py index f9afdf69a..6a7e51240 100755 --- a/tests/scripts/python/unparse.py +++ b/tests/scripts/python/unparse.py @@ -267,6 +267,14 @@ class UnparsePython(object): # ignore import pass + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + '[', + self.make_list(node.elts), + ']', + ) + def _ast_module(self, node): """Add an AST Module in output.""" self.add(node.body) @@ -478,6 +486,14 @@ class UnparsePerl(UnparsePython): '}', ) + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + '(', + self.make_list(node.elts), + ')', + ) + def _ast_pass(self, node): """Add an AST Pass in output.""" pass @@ -588,6 +604,14 @@ class UnparseRuby(UnparsePython): 'end', ) + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + 'Array[', + self.make_list(node.elts), + ']', + ) + def _ast_pass(self, node): """Add an AST Pass in output.""" pass @@ -683,6 +707,14 @@ class UnparseLua(UnparsePython): 'end', ) + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + '{', + self.make_list(node.elts), + '}', + ) + def _ast_pass(self, node): """Add an AST Pass in output.""" pass @@ -704,7 +736,7 @@ class UnparseTcl(UnparsePython): def _ast_assign(self, node): """Add an AST Assign in output.""" - exclude_types = (ast.Dict, ast.Str, ast.Subscript) + exclude_types = (ast.Dict, ast.List, ast.Str, ast.Subscript) self.add( self.fill, 'set ', @@ -836,6 +868,14 @@ class UnparseTcl(UnparsePython): '}', ) + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + '[', + self.make_list(node.elts, sep=' '), + ']', + ) + def _ast_pass(self, node): """Add an AST Pass in output.""" pass @@ -1040,6 +1080,14 @@ class UnparseGuile(UnparsePython): ) self.add(self.fill, ')') + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + '\'(', + self.make_list(node.elts, sep=' '), + ')', + ) + def _ast_pass(self, node): """Add an AST Pass in output.""" pass @@ -1228,6 +1276,14 @@ class UnparsePhp(UnparsePython): '}', ) + def _ast_list(self, node): + """Add an AST List in output.""" + self.add( + 'array(', + self.make_list(node.elts), + ')', + ) + def _ast_if(self, node): """Add an AST If in output.""" self.add( diff --git a/tests/scripts/test-scripts.cpp b/tests/scripts/test-scripts.cpp index b716ca2c9..e60f69922 100644 --- a/tests/scripts/test-scripts.cpp +++ b/tests/scripts/test-scripts.cpp @@ -221,7 +221,7 @@ TEST(Scripts, API) /* load script (run tests) */ snprintf (str_command, sizeof (str_command), - "/script load -q %s/testapi.%s", + "/script load -q %s/weechat_testapi.%s", path_testapi_output_dir, languages[i][1]); run_cmd (str_command); @@ -231,7 +231,7 @@ TEST(Scripts, API) /* run tests */ snprintf (str_command, sizeof (str_command), - "/testapi.%s", + "/weechat_testapi.%s", languages[i][1]); run_cmd (str_command); @@ -253,7 +253,7 @@ TEST(Scripts, API) /* unload script */ snprintf (str_command, sizeof (str_command), - "/script unload -q testapi.%s", + "/script unload -q weechat_testapi.%s", languages[i][1]); run_cmd (str_command); |