import sys
def _register_stub(module_name):
    parts=module_name.rsplit('.',1)
    package=parts[0] if len(parts)>1 else module_name
    class _Mod:pass
    _Mod.__name__=module_name
    _Mod.__package__=package
    sys.modules[module_name]=_Mod
    if len(parts)>1 and parts[0] in sys.modules:
        setattr(sys.modules[parts[0]],parts[1],_Mod)
def _populate_module(module_name, source_code):
    parts=module_name.rsplit('.',1)
    package=parts[0] if len(parts)>1 else module_name
    namespace={'__name__':module_name,'__package__':package}
    exec(source_code,namespace)
    module_obj=sys.modules[module_name]
    for key, value in namespace.items():
        if not key.startswith('__'):
            setattr(module_obj,key,value)
    lazy=namespace.get('__getattr__')
    if lazy is not None:
        # Class-as-module attribute misses never reach a module-level
        # __getattr__, so PEP-562 lazy exports are resolved here instead.
        # A miss becomes ImportError so a not-yet-populated submodule
        # defers this module into the retry loop.
        for key in namespace.get('__all__',()):
            if key not in namespace:
                try:
                    setattr(module_obj,key,lazy(key))
                except AttributeError:
                    raise ImportError('lazy export pending: '+module_name+'.'+key)
    if len(parts)>1 and parts[0] in sys.modules:
        setattr(sys.modules[parts[0]],parts[1],module_obj)


# Pass 1: register empty stubs so import statements resolve.

# Execute the test file.
_test_namespace={}
exec($TEST_SOURCE,_test_namespace)
class _TestModule:pass
for key, value in _test_namespace.items():
    setattr(_TestModule,key,value)
from chumicro_test_harness.runner import run_module
run_module(_TestModule,name_filter=$FILTER_REPR)
