HS: cookies iteration via host-iter? before dict? (+1 test)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -346,7 +346,8 @@ globalThis.cookies = new Proxy({}, {
|
||||
get(_, k){
|
||||
if(k==='length') return globalThis.__hsCookieStore.size;
|
||||
if(k==='clear') return (name)=>globalThis.__hsCookieStore.delete(String(name));
|
||||
if(typeof k==='symbol' || k==='_type' || k==='_order') return undefined;
|
||||
if(k===Symbol.iterator) { return function() { const entries = []; for (const [name, value] of globalThis.__hsCookieStore) entries.push({_type:'dict', name, value}); return entries[Symbol.iterator](); }; }
|
||||
if(typeof k==='symbol' || k==='_order') return undefined;
|
||||
return globalThis.__hsCookieStore.has(k) ? globalThis.__hsCookieStore.get(k) : null;
|
||||
},
|
||||
set(_, k, v){ globalThis.__hsCookieStore.set(String(k), String(v)); return true; },
|
||||
@@ -356,6 +357,11 @@ globalThis.cookies = new Proxy({}, {
|
||||
if(globalThis.__hsCookieStore.has(k)) return {value: globalThis.__hsCookieStore.get(k), enumerable: true, configurable: true};
|
||||
return undefined;
|
||||
},
|
||||
[Symbol.iterator]() {
|
||||
const entries = [];
|
||||
for (const [name, value] of globalThis.__hsCookieStore) entries.push({_type:'dict', name, value});
|
||||
return entries[Symbol.iterator]();
|
||||
},
|
||||
});
|
||||
// cluster-28: test-name-keyed confirm/prompt/alert mocks. The upstream
|
||||
// ask/answer tests each expect a deterministic return value. Keyed on
|
||||
@@ -557,6 +563,8 @@ K.registerNative('host-call-fn',a=>{const[fn,argList]=a;if(typeof fn!=='function
|
||||
K.registerNative('host-new',a=>{const C=typeof a[0]==='string'?globalThis[a[0]]:a[0];return typeof C==='function'?new C(...a.slice(1)):null;});
|
||||
K.registerNative('host-callback',a=>{const fn=a[0];if(typeof fn==='function'&&fn.__sx_handle===undefined)return fn;if(fn&&fn.__sx_handle!==undefined)return function(){const r=K.callFn(fn,Array.from(arguments));if(globalThis._driveAsync)globalThis._driveAsync(r);return r;};return function(){};});
|
||||
K.registerNative('host-typeof',a=>{const o=a[0];if(o==null)return'nil';if(o instanceof El)return'element';if(o&&o.nodeType===3)return'text';if(o instanceof Ev)return'event';if(o instanceof Promise)return'promise';return typeof o;});
|
||||
K.registerNative('host-iter?',([obj])=>obj!=null&&typeof obj[Symbol.iterator]==='function');
|
||||
K.registerNative('host-to-list',([obj])=>{try{return[...obj];}catch(e){return[];}});
|
||||
K.registerNative('host-await',a=>{});
|
||||
K.registerNative('load-library!',()=>false);
|
||||
|
||||
|
||||
@@ -140,6 +140,23 @@ SKIP_TEST_NAMES = {
|
||||
"Response can be converted to JSON via as JSON",
|
||||
}
|
||||
|
||||
# Manually-written SX test bodies for tests whose upstream body cannot be
|
||||
# auto-translated. Key = test name; value = SX lines to emit inside deftest.
|
||||
MANUAL_TEST_BODIES = {
|
||||
"iterate cookies values work": [
|
||||
' (hs-cleanup!)',
|
||||
' (host-set! (host-global "cookies") "foo" "bar")',
|
||||
' (let ((_names (list)) (_values (list)))',
|
||||
' (hs-for-each',
|
||||
' (fn (x)',
|
||||
' (append! _names (host-get x "name"))',
|
||||
' (append! _values (host-get x "value")))',
|
||||
' (host-global "cookies"))',
|
||||
' (assert-contains "foo" _names)',
|
||||
' (assert-contains "bar" _values))',
|
||||
],
|
||||
}
|
||||
|
||||
|
||||
def find_me_receiver(elements, var_names, tag):
|
||||
"""For tests with multiple top-level elements of the same tag, find the
|
||||
@@ -2599,6 +2616,11 @@ def generate_compile_only_test(test):
|
||||
|
||||
def generate_test(test, idx):
|
||||
"""Generate SX deftest for an upstream test. Dispatches to Chai, PW, or eval-only."""
|
||||
if test['name'] in MANUAL_TEST_BODIES:
|
||||
name = sx_name(test['name'])
|
||||
lines = [f' (deftest "{name}"'] + MANUAL_TEST_BODIES[test['name']] + [' )']
|
||||
return '\n'.join(lines)
|
||||
|
||||
elements = parse_html(test['html'])
|
||||
|
||||
if not elements and not test.get('html', '').strip():
|
||||
|
||||
Reference in New Issue
Block a user