mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	Merge pull request #13263 from ethereum/fix/lsp-checker-to-not-bail-on-missing-response
lsp: Fixes lsp.py to not bail out when no response is expected.
This commit is contained in:
		
						commit
						d003400cb0
					
				
							
								
								
									
										28
									
								
								test/lsp.py
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								test/lsp.py
									
									
									
									
									
								
							| @ -237,8 +237,10 @@ class JsonRpcProcess: | |||||||
|         self.process.stdin.write(rpc_message.encode("utf-8")) |         self.process.stdin.write(rpc_message.encode("utf-8")) | ||||||
|         self.process.stdin.flush() |         self.process.stdin.flush() | ||||||
| 
 | 
 | ||||||
|     def call_method(self, method_name: str, params: Optional[dict]) -> Any: |     def call_method(self, method_name: str, params: Optional[dict], expects_response: bool = True) -> Any: | ||||||
|         self.send_message(method_name, params) |         self.send_message(method_name, params) | ||||||
|  |         if not expects_response: | ||||||
|  |             return None | ||||||
|         return self.receive_message() |         return self.receive_message() | ||||||
| 
 | 
 | ||||||
|     def send_notification(self, name: str, params: Optional[dict] = None) -> None: |     def send_notification(self, name: str, params: Optional[dict] = None) -> None: | ||||||
| @ -484,6 +486,8 @@ class TestParser: | |||||||
|             if self.at_end(): |             if self.at_end(): | ||||||
|                 raise TestParserException(ret, "Request body not found") |                 raise TestParserException(ret, "Request body not found") | ||||||
| 
 | 
 | ||||||
|  |         if self.at_end(): | ||||||
|  |             return self.RequestAndResponse(**ret) | ||||||
| 
 | 
 | ||||||
|         # Parse response header |         # Parse response header | ||||||
|         if self.current_line().startswith(RESPONSE_START): |         if self.current_line().startswith(RESPONSE_START): | ||||||
| @ -492,8 +496,6 @@ class TestParser: | |||||||
|                 raise TestParserException(ret, "Response header malformed") |                 raise TestParserException(ret, "Response header malformed") | ||||||
|             ret["response"] = self.current_line()[len(RESPONSE_START):] + "\n" |             ret["response"] = self.current_line()[len(RESPONSE_START):] + "\n" | ||||||
|             ret["responseBegin"] = self.position() |             ret["responseBegin"] = self.position() | ||||||
|         else: |  | ||||||
|             raise TestParserException(ret, "Response header not found") |  | ||||||
| 
 | 
 | ||||||
|         self.next_line() |         self.next_line() | ||||||
| 
 | 
 | ||||||
| @ -568,7 +570,9 @@ class FileTestRunner: | |||||||
| 
 | 
 | ||||||
|             # Process diagnostics first |             # Process diagnostics first | ||||||
|             self.expected_diagnostics = next(self.parsed_testcases) |             self.expected_diagnostics = next(self.parsed_testcases) | ||||||
|             assert isinstance(self.expected_diagnostics, TestParser.Diagnostics) is True |             assert isinstance(self.expected_diagnostics, TestParser.Diagnostics) | ||||||
|  |             if not self.expected_diagnostics.has_header: | ||||||
|  |                 return | ||||||
| 
 | 
 | ||||||
|             expected_diagnostics_per_file = self.expected_diagnostics.tests |             expected_diagnostics_per_file = self.expected_diagnostics.tests | ||||||
| 
 | 
 | ||||||
| @ -723,7 +727,14 @@ class FileTestRunner: | |||||||
|         if 'textDocument' not in requestBodyJson: |         if 'textDocument' not in requestBodyJson: | ||||||
|             requestBodyJson['textDocument'] = { 'uri': self.suite.get_test_file_uri(self.test_name, self.sub_dir) } |             requestBodyJson['textDocument'] = { 'uri': self.suite.get_test_file_uri(self.test_name, self.sub_dir) } | ||||||
| 
 | 
 | ||||||
|         actualResponseJson = self.solc.call_method(testcase.method, requestBodyJson) |         actualResponseJson = self.solc.call_method( | ||||||
|  |             testcase.method, | ||||||
|  |             requestBodyJson, | ||||||
|  |             expects_response=testcase.response is not None | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  |         if testcase.response is None: | ||||||
|  |             return | ||||||
| 
 | 
 | ||||||
|         # simplify response |         # simplify response | ||||||
|         if "result" in actualResponseJson: |         if "result" in actualResponseJson: | ||||||
| @ -1445,8 +1456,11 @@ class SolidityLSPTestSuite: # {{{ | |||||||
| 
 | 
 | ||||||
|         for sub_dir in map(lambda filepath: filepath.name, sub_dirs): |         for sub_dir in map(lambda filepath: filepath.name, sub_dirs): | ||||||
|             tests = map( |             tests = map( | ||||||
|                 lambda filename, sd=sub_dir: sd + "/" + filename[:-len(".sol")], |                 lambda file_object, sd=sub_dir: sd + "/" + file_object.name[:-len(".sol")], | ||||||
|                 os.listdir(f"{self.project_root_dir}/{sub_dir}") |                 filter( | ||||||
|  |                     lambda filepath: filepath.is_file() and filepath.name.endswith('.sol'), | ||||||
|  |                     os.scandir(f"{self.project_root_dir}/{sub_dir}") | ||||||
|  |                 ) | ||||||
|             ) |             ) | ||||||
| 
 | 
 | ||||||
|             tests = map( |             tests = map( | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user