mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| #!/usr/bin/env python
 | |
| 
 | |
| import unittest
 | |
| 
 | |
| from textwrap import dedent, indent
 | |
| 
 | |
| from unittest_helpers import FIXTURE_DIR, load_fixture
 | |
| 
 | |
| # NOTE: This test file file only works with scripts/ added to PYTHONPATH so pylint can't find the imports
 | |
| # pragma pylint: disable=import-error
 | |
| from isolate_tests import extract_solidity_docs_cases, extract_yul_docs_cases
 | |
| # pragma pylint: enable=import-error
 | |
| 
 | |
| CODE_BLOCK_RST_PATH = FIXTURE_DIR / 'code_block.rst'
 | |
| CODE_BLOCK_RST_CONTENT = load_fixture(CODE_BLOCK_RST_PATH)
 | |
| CODE_BLOCK_WITH_DIRECTIVES_RST_PATH = FIXTURE_DIR / 'code_block_with_directives.rst'
 | |
| CODE_BLOCK_WITH_DIRECTIVES_RST_CONTENT = load_fixture(CODE_BLOCK_WITH_DIRECTIVES_RST_PATH)
 | |
| 
 | |
| def formatCase(text):
 | |
|     """Formats code to contain only one indentation and terminate with a \n"""
 | |
|     return indent(dedent(text.lstrip("\n")), "    ") + "\n"
 | |
| 
 | |
| class TestExtractDocsCases(unittest.TestCase):
 | |
|     def setUp(self):
 | |
|         self.maxDiff = 10000
 | |
| 
 | |
| 
 | |
|     def test_solidity_block(self):
 | |
|         expected_cases = [formatCase(case) for case in [
 | |
|             """
 | |
|                 // SPDX-License-Identifier: GPL-3.0
 | |
|                 pragma solidity >=0.7.0 <0.9.0;
 | |
| 
 | |
|                 contract C {
 | |
|                     function foo() public view {}
 | |
|                 }
 | |
| 
 | |
|             """,
 | |
|             """
 | |
|                 contract C {}
 | |
|             """,
 | |
|         ]]
 | |
| 
 | |
|         self.assertEqual(extract_solidity_docs_cases(CODE_BLOCK_RST_PATH), expected_cases)
 | |
| 
 | |
|     def test_solidity_block_with_directives(self):
 | |
|         expected_cases = [formatCase(case) for case in [
 | |
|             """
 | |
|                 // SPDX-License-Identifier: GPL-3.0
 | |
|                 pragma solidity >=0.7.0 <0.9.0;
 | |
| 
 | |
|                 contract C {
 | |
|                     function foo() public view {}
 | |
|                 }
 | |
| 
 | |
|             """,
 | |
|             """
 | |
|                 contract C {}
 | |
|             """,
 | |
|             """
 | |
|                 contract D {}
 | |
|                 :linenos:
 | |
|             """,
 | |
|             """
 | |
|                 contract E {}
 | |
|             """,
 | |
|         ]]
 | |
| 
 | |
|         self.assertEqual(extract_solidity_docs_cases(CODE_BLOCK_WITH_DIRECTIVES_RST_PATH), expected_cases)
 | |
| 
 | |
|     def test_yul_block(self):
 | |
|         expected_cases = [formatCase(case) for case in [
 | |
|             """
 | |
|             {
 | |
|                 let x := add(1, 5)
 | |
|             }
 | |
|             """,
 | |
|             """
 | |
|             // Yul code wrapped in object
 | |
|             {
 | |
|                 {
 | |
|                     let y := mul(3, 5)
 | |
|                 }
 | |
|             }
 | |
|             """,
 | |
|             """
 | |
|             // Yul code wrapped in named object
 | |
|             object "Test" {
 | |
|                 {
 | |
|                     let y := mul(6, 9)
 | |
|                 }
 | |
|             }
 | |
|             """,
 | |
|         ]]
 | |
| 
 | |
|         self.assertEqual(extract_yul_docs_cases(CODE_BLOCK_RST_PATH), expected_cases)
 | |
| 
 | |
|     def test_yul_block_with_directives(self):
 | |
|         expected_cases = [formatCase(case) for case in [
 | |
|             """
 | |
|             {
 | |
|                 let x := add(1, 5)
 | |
|             }
 | |
|             """,
 | |
|             """
 | |
|             // Yul code wrapped in object
 | |
|             {
 | |
|                 let y := mul(3, 5)
 | |
|             }
 | |
|             """,
 | |
|             """
 | |
|             // Yul code wrapped in named object
 | |
|             object "Test" {
 | |
|                 let y := mul(3, 5)
 | |
|             :linenos:
 | |
|             }
 | |
|             """,
 | |
|         ]]
 | |
| 
 | |
|         self.assertEqual(extract_yul_docs_cases(CODE_BLOCK_WITH_DIRECTIVES_RST_PATH), expected_cases)
 |