mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env bash
 | 
						|
set -euo pipefail
 | 
						|
 | 
						|
# shellcheck source=scripts/common.sh
 | 
						|
source "${REPO_ROOT}/scripts/common.sh"
 | 
						|
# shellcheck source=scripts/common_cmdline.sh
 | 
						|
source "${REPO_ROOT}/scripts/common_cmdline.sh"
 | 
						|
 | 
						|
function test_cli_and_standard_json_equivalence
 | 
						|
{
 | 
						|
    (( $# == 5 )) || assertFail
 | 
						|
    local cli_options="$1"
 | 
						|
    local selected_cli_output="$2"
 | 
						|
    local standard_json_settings="$3"
 | 
						|
    local selected_standard_json_output="$4"
 | 
						|
    local input_file_relative_path="$5"
 | 
						|
 | 
						|
    # CLI normalizes paths, Standard JSON uses them as is. Using paths that would change under this
 | 
						|
    # normalization will make the comparison fail. To avoid this use already normalized paths.
 | 
						|
    # The sanity check below should reject most of these by disallowing absolute paths, relative
 | 
						|
    # paths with ./ or ../ segments and paths with redundant slashes, but keep in mind it's not foolproof.
 | 
						|
    [[ $input_file_relative_path =~ ^/|^\.$|\./|^\.\.$|\.\./|// ]] && assertfail
 | 
						|
 | 
						|
    local cli_output standard_json_output
 | 
						|
    cli_output=$(
 | 
						|
        # shellcheck disable=SC2086 # Intentionally unquoted. May contain multiple options.
 | 
						|
        msg_on_error --no-stderr \
 | 
						|
            "$SOLC" $cli_options "$selected_cli_output" "$input_file_relative_path"
 | 
						|
    )
 | 
						|
    standard_json_output=$(
 | 
						|
        singleContractOutputViaStandardJSON \
 | 
						|
            Solidity \
 | 
						|
            "$selected_standard_json_output" \
 | 
						|
            "$standard_json_settings" \
 | 
						|
            "$input_file_relative_path"
 | 
						|
    )
 | 
						|
 | 
						|
    diff_values \
 | 
						|
        "$(echo "$cli_output" | stripCLIDecorations | stripEmptyLines)" \
 | 
						|
        "$(echo "$standard_json_output" | stripEmptyLines)" \
 | 
						|
        --ignore-space-change \
 | 
						|
        --ignore-blank-lines
 | 
						|
}
 | 
						|
 | 
						|
cd "$REPO_ROOT"
 | 
						|
 | 
						|
printTask "    - --optimize vs optimizer.enabled: true (--asm output)"
 | 
						|
test_cli_and_standard_json_equivalence \
 | 
						|
    '--optimize' \
 | 
						|
    '--asm' \
 | 
						|
    '"optimizer": {"enabled": true}' \
 | 
						|
    'evm.assembly' \
 | 
						|
    "test/libsolidity/semanticTests/various/erc20.sol"
 | 
						|
 | 
						|
printTask "    - --optimize-yul vs optimizer.details.yul: true (--asm output)"
 | 
						|
test_cli_and_standard_json_equivalence \
 | 
						|
    '--optimize-yul' \
 | 
						|
    '--asm' \
 | 
						|
    '"optimizer": {"enabled": false, "details": {"yul": true}}' \
 | 
						|
    'evm.assembly' \
 | 
						|
    "test/libsolidity/semanticTests/various/erc20.sol"
 |