from pathlib import Path
from typing import Union

LIBSOLIDITY_TEST_DIR = Path(__file__).parent.parent / 'libsolidity'
FIXTURE_DIR = Path(__file__).parent / 'fixtures'

def load_file(path: Union[Path, str]) -> str:
    # NOTE: newline='' disables newline conversion.
    # We want the file exactly as is because changing even a single byte in the source affects metadata.
    with open(path, 'r', encoding='utf-8', newline='') as f:
        return f.read()

def load_fixture(relative_path: Union[Path, str]) -> str:
    return load_file(FIXTURE_DIR / relative_path)

def load_libsolidity_test_case(relative_path: Union[Path, str]) -> str:
    return load_file(LIBSOLIDITY_TEST_DIR / relative_path)