def test_extract_bundle_with_package(mock_extract_bundle_from_device):
    package = "com.example.app"
    extract_bundle([package])
    mock_extract_bundle_from_device.assert_called_with(
        package,
        "assets/index.android.bundle",
        "index.android.bundle",
    )
def test_extract_bundle_with_existing_apk(mock_extract_bundle_from_apk):
    apk_path = "app.apk"
    extract_bundle([apk_path])
    mock_extract_bundle_from_apk.assert_called_with(
        apk_path,
        "assets/index.android.bundle",
        "index.android.bundle",
    )
def test_extract_bundle_prints_usage_when_run_without_arguments(mock_exit, capsys):
    extract_bundle([])
    captured = capsys.readouterr()
    assert captured.err.startswith("usage:")
    mock_exit.assert_called_with(0)
def test_extract_bundle_exits_with_runtime_error(mock_parse_args, mock_exit):
    mock_parse_args.side_effect = RuntimeError
    extract_bundle([])
    mock_exit.assert_called_with(1)
def test_extract_bundle_with_keyboard_interrupt(mock_parse_args, mock_exit):
    mock_parse_args.side_effect = KeyboardInterrupt
    extract_bundle([])
    mock_exit.assert_called_with(1)
def test_extract_bundle_with_invalid_package(mock_exit):
    extract_bundle(["test"])
    mock_exit.assert_called_with(1)
#!/usr/bin/env python3

import sys

from extractor.extractor import extract_bundle

if __name__ == "__main__":
    extract_bundle(sys.argv[1:])