from pathlib import Path import unittest PLUGIN_ROOT = Path(__file__).resolve().parents[1] PHP = (PLUGIN_ROOT / "matnostalgi-hotrod-loader.php").read_text(encoding="utf-8") JS = (PLUGIN_ROOT / "assets" / "hotrod-loader.js").read_text(encoding="utf-8") CSS = (PLUGIN_ROOT / "assets" / "hotrod-loader.css").read_text(encoding="utf-8") class HotrodCatalogBridgeTests(unittest.TestCase): def test_version_is_bumped(self): self.assertIn("Version: 1.3.1", PHP) self.assertIn("private const VERSION = '1.3.1'", PHP) def test_drag_tree_and_burnout_markup_are_rendered(self): self.assertIn('mn-hotrod-loader__tree', PHP) self.assertIn('mn-hotrod-loader__tree-light--amber-c', PHP) self.assertIn('mn-hotrod-loader__tree-light--green', PHP) self.assertIn('mn-hotrod-loader__burnout-mark', PHP) def test_countdown_phase_and_wheelie_logic_exist(self): self.assertIn('const RANDOM_GREEN_MIN_DELAY = 160', JS) self.assertIn('const RANDOM_GREEN_MAX_DELAY = 680', JS) self.assertIn('const COUNTDOWN_GO_MS = 140', JS) self.assertIn('function beginCountdown', JS) self.assertIn('setPhase("countdown")', JS) self.assertIn('state.phase === "countdown"', JS) self.assertIn('state.greenLightDelay = RANDOM_GREEN_MIN_DELAY + Math.random() * (RANDOM_GREEN_MAX_DELAY - RANDOM_GREEN_MIN_DELAY);', JS) self.assertIn('if (phaseElapsed < state.greenLightDelay) setTreeState("staged")', JS) self.assertIn('else if (phaseElapsed < state.greenLightDelay + COUNTDOWN_GO_MS) setTreeState("green")', JS) self.assertIn('setCarAttitude(-18 * launchProgress, -18 * launchProgress)', JS) self.assertIn('state.mode !== "pending-load"', JS) def test_css_contains_tree_burnout_and_wheelie_support(self): self.assertIn('--mn-loader-burnout-mark-width', CSS) self.assertIn('--mn-loader-car-tilt', CSS) self.assertIn('.mn-hotrod-loader__tree', CSS) self.assertIn('.mn-hotrod-loader__burnout-mark', CSS) self.assertIn('@keyframes mn-hotrod-wheel-spin', CSS) self.assertIn('@keyframes mn-hotrod-tree-go', CSS) self.assertIn('rotate(calc(var(--mn-loader-car-tilt)', CSS) def test_navigation_waits_for_catalog_warmup_with_a_hard_cap(self): self.assertIn("window.MatNostalgiCatalogNavigation", JS) self.assertIn("catalogNavigation?.canWarm?.(url.href)", JS) self.assertIn("warmupPromise = catalogNavigation.warm(url.href)", JS) self.assertIn("NAVIGATION_DELAY = 520", JS) self.assertIn("CATALOG_WARMUP_MAX_WAIT = 3000", JS) self.assertIn("function waitForWarmupOrTimeout", JS) navigation_block = JS[JS.index("function installNavigationTriggers"):JS.index("function catalogEventRequestId")] self.assertLess(navigation_block.index("catalogNavigation.warm(url.href)"), navigation_block.index("writePendingNavigation(url.href)")) self.assertIn("const minimumDelayPromise = new Promise", navigation_block) self.assertIn("const warmupGatePromise = waitForWarmupOrTimeout", navigation_block) self.assertIn("Promise.all([minimumDelayPromise, warmupGatePromise]).then(navigate)", navigation_block) self.assertIn("clearTimeout(state.navigationCancelTimer)", navigation_block) self.assertNotIn("Promise.resolve(catalogNavigation.warm(url.href)).catch(() => {})", navigation_block) def test_catalog_dom_heuristics_are_removed(self): self.assertNotIn("function isCatalogBusy", JS) self.assertNotIn("installCatalogTriggers", JS) self.assertNotIn(".woocommerce.mn-catalog-refreshing", JS) def test_loader_uses_catalog_events_and_tracks_overlap(self): self.assertIn('window.addEventListener("mn:catalog-load-start"', JS) self.assertIn('window.addEventListener("mn:catalog-load-complete"', JS) self.assertIn('window.addEventListener("mn:catalog-load-error"', JS) self.assertIn("catalogRequestIds: new Set()", JS) self.assertIn("state.catalogRequestIds.size > 0", JS) def test_catalog_refresh_restarts_loader_during_exit_or_fade(self): start = JS.index("function handleCatalogLoadStart") end = JS.index("function handleCatalogLoadSettled", start) handler = JS[start:end] self.assertIn('!["exiting", "trail-fading", "idle"].includes(state.phase)', handler) self.assertIn("if (!canJoinCurrentRun)", handler) self.assertIn("startCatalogRefresh()", handler) self.assertLess(handler.index("startCatalogRefresh()"), handler.index("state.catalogRequestIds.add(requestId)")) refresh_start = JS.index("function startCatalogRefresh") refresh_end = JS.index("function tick", refresh_start) refresh = JS[refresh_start:refresh_end] self.assertIn('!["exiting", "trail-fading", "idle"].includes(state.phase)', refresh) self.assertIn('startEntering("catalog-refresh")', refresh) def test_pagehide_keeps_loader_visible_until_document_is_replaced(self): pagehide_start = JS.index('window.addEventListener("pagehide"') pagehide_end = JS.index('window.addEventListener("pageshow"', pagehide_start) pagehide_block = JS[pagehide_start:pagehide_end] self.assertIn("clearTimeout(state.navigationCancelTimer)", pagehide_block) self.assertNotIn("hideLoader", pagehide_block) self.assertIn("if (event.persisted)", JS[pagehide_end:]) self.assertIn("hideLoader(true)", JS[pagehide_end:]) def test_exit_animation_cannot_teleport_after_catalog_layout_stall(self): self.assertIn("const MAX_VISUAL_FRAME_STEP = 50", JS) self.assertIn("state.exitElapsed += visualFrameElapsed", JS) self.assertIn("state.exitElapsed / state.exitDuration", JS) self.assertNotIn("phaseElapsed / state.exitDuration", JS) self.assertIn("state.trailFadeElapsed += visualFrameElapsed", JS) self.assertIn("state.trailFadeElapsed >= TRAIL_FADE_DURATION", JS) if __name__ == "__main__": unittest.main() Armrest Base/Pad Kit, Front, 1965-67 Cutlass, 65-66 Riviera/Bonneville/Grand Prix – matonostalgi.se

Armrest Base/Pad Kit, Front, 1965-67 Cutlass, 65-66 Riviera/Bonneville/Grand Prix

3250 kr

Beställningsvara: mer info nedan
Artikel Nr AK13
Märke RESTOPARTS
Lagerplats beställningsvara

Beskrivning

Armrest Base/Pad Kit, Front, 1965-67 Cutlass, 65-66 Riviera/Bonneville/Grand Prix

Artikel Nr: AK13
<br<Del# AK13 inkluderar inte skruvarna.
Finns även som beställningsvara

Passar:
1965-1966 Buick Riviera
1965-1967 Oldsmobile Cutlass (paddle-style)
1965-1966 Pontiac Bonneville Bonneville/Grand Prix
1965-1966 Pontiac Grand Prix Bonneville/Grand Prix

Specification

Vikt 0,907 kg
Märke

RESTOPARTS

Lagerplats

beställningsvara

Här ser du vilka fordon produkten är registrerad att passa till. Öppna ett bilmärke för att se modeller, år och noter.

Buick1 modeller / 2 rader
Oldsmobile1 modeller / 3 rader
Pontiac1 modeller / 2 rader

Vi använder cookies, web beacons och liknande tekniker (gemensamt kallade ”cookies”) för att förbättra din upplevelse hos oss.