def test_format_doc_no_pgsql_format(self): """ Test that the format codepath succeeds even if the configuration options aren't defined """ input_text = 'select * from foo where id in (select id from bar);' context: RequestContext = utils.MockRequestContext() self.mock_workspace_service._configuration = None workspace, script_file = self._get_test_workspace(True, input_text) self.mock_workspace_service._workspace = workspace service: LanguageService = self._init_service() format_options = FormattingOptions() format_options.insert_spaces = False format_params = DocumentFormattingParams() format_params.options = format_options format_params.text_document = self.default_text_document_id # add uri to valid uri set ensure request passes uri check # normally done in flavor change handler, but we are not testing that here service._valid_uri.add(format_params.text_document.uri) # When: I have no useful formatting defaults defined service.handle_doc_format_request(context, format_params) # Then: # ... There should be no changes to the doc context.send_response.assert_called_once() edits: List[TextEdit] = context.last_response_params self.assertTrue(len(edits) > 0) self.assert_range_equals(edits[0].range, Range.from_data(0, 0, 0, len(input_text))) self.assertEqual(edits[0].new_text, input_text)
def test_format_mysql_doc_range(self): """ Test that the format document range codepath works as expected with a mysql doc """ # set up service provider with mysql connection self.mock_service_provider = ServiceProvider(self.mock_server, {}, MYSQL_PROVIDER_NAME, None) self.mock_service_provider._services[ constants.WORKSPACE_SERVICE_NAME] = self.mock_workspace_service self.mock_service_provider._services[ constants.CONNECTION_SERVICE_NAME] = self.mock_connection_service self.mock_service_provider._is_initialized = True # If: The script file doesn't exist (there is an empty workspace) input_lines: List[str] = [ 'select * from t1', 'select * from foo where id in (select id from bar);' ] input_text = '\n'.join(input_lines) expected_output = '\n'.join([ 'SELECT *', 'FROM foo', 'WHERE id IN', '\t\t\t\t(SELECT id', '\t\t\t\t\tFROM bar);' ]) context: RequestContext = utils.MockRequestContext() config = Configuration() config.my_sql = MySQLConfiguration() config.my_sql.format.keyword_case = 'upper' self.mock_workspace_service._configuration = config workspace, script_file = self._get_test_workspace(True, input_text) self.mock_workspace_service._workspace = workspace service: LanguageService = self._init_service() format_options = FormattingOptions() format_options.insert_spaces = False format_params = DocumentRangeFormattingParams() format_params.options = format_options format_params.text_document = self.default_text_document_id # add uri to valid uri set ensure request passes uri check # normally done in flavor change handler, but we are not testing that here service._valid_uri.add(format_params.text_document.uri) # When: I request format the 2nd line of a document format_params.range = Range.from_data(1, 0, 1, len(input_lines[1])) service.handle_doc_range_format_request(context, format_params) # Then: # ... only the 2nd line should be formatted context.send_response.assert_called_once() edits: List[TextEdit] = context.last_response_params self.assertTrue(len(edits) > 0) self.assert_range_equals(edits[0].range, format_params.range) self.assertEqual(edits[0].new_text, expected_output)
def test_format_mysql_doc(self): """ Test that the format document codepath works as expected with a mysql doc """ # set up service provider with mysql connection self.mock_service_provider = ServiceProvider(self.mock_server, {}, MYSQL_PROVIDER_NAME, None) self.mock_service_provider._services[ constants.WORKSPACE_SERVICE_NAME] = self.mock_workspace_service self.mock_service_provider._services[ constants.CONNECTION_SERVICE_NAME] = self.mock_connection_service self.mock_service_provider._is_initialized = True # If: We have a basic string to be formatted input_text = 'select * from foo where id in (select id from bar);' # Note: sqlparse always uses '\n\ for line separator even on windows. # For now, respecting this behavior and leaving as-is expected_output = '\n'.join([ 'SELECT *', 'FROM foo', 'WHERE id IN', '\t\t\t\t(SELECT id', '\t\t\t\t\tFROM bar);' ]) context: RequestContext = utils.MockRequestContext() config = Configuration() config.my_sql = MySQLConfiguration() config.my_sql.format.keyword_case = 'upper' self.mock_workspace_service._configuration = config workspace, script_file = self._get_test_workspace(True, input_text) self.mock_workspace_service._workspace = workspace service: LanguageService = self._init_service() format_options = FormattingOptions() format_options.insert_spaces = False format_params = DocumentFormattingParams() format_params.options = format_options format_params.text_document = self.default_text_document_id # add uri to valid uri set ensure request passes uri check # normally done in flavor change handler, but we are not testing that here service._valid_uri.add(format_params.text_document.uri) # When: I request document formatting service.handle_doc_format_request(context, format_params) # Then: # ... The entire document text should be formatted context.send_response.assert_called_once() edits: List[TextEdit] = context.last_response_params self.assertTrue(len(edits) > 0) self.assert_range_equals(edits[0].range, Range.from_data(0, 0, 0, len(input_text))) self.assertEqual(edits[0].new_text, expected_output)