Skip to content

[24/N] Add unit tests for base Algorithm class and control bar helpers - #115

Open
karkir0003 wants to merge 24 commits into
csvistool:masterfrom
karkir0003:karthik/kar-31-add-unit-tests-for-base-algorithm-class-and-control-bar
Open

karkir0003 wants to merge 24 commits into
csvistool:masterfrom
karkir0003:karthik/kar-31-add-unit-tests-for-base-algorithm-class-and-control-bar

Conversation

@karkir0003

@karkir0003 karkir0003 commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

🥞 Stack

  1. ⬅️ [1/N] Update CI to run frontend unit tests #91 (Update CI to run frontend unit tests)
  2. ⬅️ [2/N] Configure React Testing Library and Setup Tests #92 (Configure React Testing Library and Setup Tests)
  3. ⬅️ [3/N] Add unit tests for SideButton component #94 (Add unit tests for SideButton component)
  4. ⬅️ [4/N] Add unit tests for SearchFilter component #95 (Add unit tests for SearchFilter component)
  5. ⬅️ [5/N] Add unit tests for Header and Footer components #96 (Add unit tests for Header and Footer components)
  6. ⬅️ [6/N] Add unit tests for Blob mascot component #97 (Add unit tests for Blob mascot component)
  7. ⬅️ [7/N] Add unit tests for AboutScreen screen #98 (Add unit tests for AboutScreen screen)
  8. ⬅️ [8/N] Add integration tests for HomeScreen screen #99 (Add integration tests for HomeScreen screen)
  9. ⬅️ [9/N] Add unit tests for AlgorithmNotFound404 component #100 (Add unit tests for AlgorithmNotFound404 component)
  10. ⬅️ [10/N] Add integration tests for AlgoScreen screen #101 (Add integration tests for AlgoScreen screen)
  11. ⬅️ [11/N] Add unit tests for ModalSidebarSectionTab component #102 (Add unit tests for ModalSidebarSectionTab component)
  12. ⬅️ [12/N] Add unit tests for BigOModal component #103 (Add unit tests for BigOModal component)
  13. ⬅️ [13/N] Add unit tests for Pseudocode component #104 (Add unit tests for Pseudocode component)
  14. ⬅️ [14/N] Add unit and integration tests for AlgoSection component #105 (Add unit and integration tests for AlgoSection component)
  15. ⬅️ [15/N] Add unit and integration tests for root App component #106 (Add unit and integration tests for root App component)
  16. ⬅️ [16/N] Add unit tests for animation events and undo functions #107 (Add unit tests for animation events and undo functions)
  17. ⬅️ [17/N] Add unit tests for AnimatedObject, AnimatedCircle, and AnimatedHighlightCircle #108 (Add unit tests for AnimatedObject, AnimatedCircle, and AnimatedHighlightCircle)
  18. ⬅️ [18/N] Add unit tests for AnimatedRectangle, AnimatedLabel, and AnimatedLine #109 (Add unit tests for AnimatedRectangle, AnimatedLabel, and AnimatedLine)
  19. ⬅️ [19/N] Add unit tests for AnimatedLinkedListNode, AnimatedDoublyLinkedListNode, and AnimatedCircularlyLinkedListNode #110 (Add unit tests for AnimatedLinkedListNode, AnimatedDoublyLinkedListNode, and AnimatedCircularlyLinkedListNode)
  20. ⬅️ [20/N] Add unit tests for AnimatedBTreeNode and AnimatedSkipListNode #111 (Add unit tests for AnimatedBTreeNode and AnimatedSkipListNode)
  21. ⬅️ [21/N] Add unit tests for ObjectManager #112 (Add unit tests for ObjectManager)
  22. ⬅️ [22/N] Add unit tests for AnimationMain #113 (Add unit tests for AnimationMain)
  23. ⬅️ [23/N] Add unit tests for algo util helpers (PriorityQueue, SkipListHeads, GraphValues) #114 (Add unit tests for algo util helpers (PriorityQueue, SkipListHeads, GraphValues))
  24. 👉 #CURRENT — Add unit tests for base Algorithm class and control bar helpers (this PR)
  25. ➡️ [25/N] Add unit tests for ArrayList algorithm #116 (Add unit tests for ArrayList algorithm)

Addresses #93

Context

Adds unit test coverage for Algorithm.js, the foundational base class for all 52 algorithm and data structure visualizers across the application, as well as the imperative DOM helpers used to build the top algorithm control bar and accessible keyboard tab navigation.

Changes Made

• Introduced src/algo/__tests__/Algorithm.test.js covering:
• Algorithm bar DOM generator functions:
• addLabelToAlgorithmBar (standalone table entry vs nested in group).
• addCheckboxToAlgorithmBar (initial checked/unchecked state, group attachment).
• addDropDownGroupToAlgorithmBar (options parsing, selection mapping, keyboard navigation binding).
• addRadioButtonGroupToAlgorithmBar (radio groups in table layouts).
• addControlToAlgorithmBar (buttons and text inputs, tabindex attribution).
• addDivisorToAlgorithmBar (layout separators).
• addGroupToAlgorithmBar (horizontal and vertical layout groups, nested parenting).
• controlKey recognition (backspace, tab, arrows, delete, enter).
• Base Algorithm class lifecycle:
• Event listener registrations on AnimationManager (AnimationStarted, AnimationEnded, AnimationUndo).
• cmd buffering gated by recordAnimation.
• Action history management, action execution dispatch (implementAction), and state replay on undo().
• Abstract method interface contracts (sizeChanged, disableUI, enableUI, reset).
• Input normalization (normalizeNumber).
• Pseudocode canvas layout:
• Dual-language code generation (addCodeToCanvasBaseAll, addCodeToCanvasBase).
• Syntax highlighting / unhighlighting on code lines and multi-matrix labels (highlight, unhighlight).
• Cleanup and opacity management (removeCode, setCodeAlpha).
• Keyboard focus & input submission:
• Global Tab key cyclic focus navigation across algorithm and animation control bars (handleControlTabNavigation, forward and shift+Tab).
• Enter key submission bindings (attachTabNavigation, enableTabNavigationForButton).
• Input validation handlers (returnSubmit, returnSubmitFloat, addReturnSubmit).
• Button shaking animation triggers (shake).

Test Plan

• Ran npm test -- --watchAll=false (all 33 test suites pass, 318 tests passing).
• Ran npm run lint and npm run prettier.
• Verified 98.48% line coverage and 100% function coverage on src/algo/Algorithm.js.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant