assert global_callback_name("ts0", "activate") == "ts0_activate"
assert global_callback_name("my-split", "deactivate") == "my-split_deactivate"
print("global_callback_name tests passed!")global_callback_name tests passed!
Generate a prefix-unique global callback name.
Compose all token selector JS into a single namespaced IIFE.
from cjm_fasthtml_token_selector.core.config import TokenSelectorConfig, _reset_prefix_counter
from cjm_fasthtml_token_selector.core.models import TokenSelectorState
from cjm_fasthtml_token_selector.core.html_ids import TokenSelectorHtmlIds
_reset_prefix_counter()
cfg = TokenSelectorConfig(prefix="ts0")
ids = TokenSelectorHtmlIds(prefix="ts0")
state = TokenSelectorState(anchor=3, focus=3, word_count=10)
script = generate_token_selector_js(cfg, ids, state)
assert script is not None
# Verify IIFE structure via string representation
js_str = str(script)
assert "window.tokenSelectors" in js_str
assert "ts0" in js_str
assert "ns.activate" in js_str
assert "ns.deactivate" in js_str
assert "ns.moveLeft" in js_str
assert "ns._handleKeyDown" in js_str
assert "ts0_activate" in js_str
# Settle handler uses replace pattern (removeEventListener + addEventListener)
assert "_tsSettleHandler_ts0" in js_str
assert "removeEventListener" in js_str
print("IIFE structure verified!")
# With extra scripts
script2 = generate_token_selector_js(cfg, ids, state, extra_scripts=("ns.customFn = function() {};",))
assert "ns.customFn" in str(script2)
print("Extra scripts injection verified!")
# Multi-instance: different prefixes don't collide
cfg2 = TokenSelectorConfig(prefix="ts1")
ids2 = TokenSelectorHtmlIds(prefix="ts1")
script3 = generate_token_selector_js(cfg2, ids2)
js_str3 = str(script3)
assert "ts1" in js_str3
assert "ts0" not in js_str3
print("Multi-instance isolation verified!")
# Default state when none provided
script4 = generate_token_selector_js(cfg, ids)
assert script4 is not None
print("Default state fallback verified!")
_reset_prefix_counter()
print("All JS core tests passed!")IIFE structure verified!
Extra scripts injection verified!
Multi-instance isolation verified!
Default state fallback verified!
All JS core tests passed!