@@ -0,0 +1,184 @@
1+import { describe, it, expect } from "vitest";
2+
3+// Batch 1 — existing macOS native components
4+import { _buttonImpl } from "../src/Yoga/React/Native/MacOS/Button.js";
5+import { _segmentedImpl } from "../src/Yoga/React/Native/MacOS/Segmented.js";
6+import { _textFieldImpl } from "../src/Yoga/React/Native/MacOS/TextField.js";
7+import { _sliderImpl } from "../src/Yoga/React/Native/MacOS/Slider.js";
8+import { _switchImpl } from "../src/Yoga/React/Native/MacOS/Switch.js";
9+import { _progressImpl } from "../src/Yoga/React/Native/MacOS/Progress.js";
10+import { _datePickerImpl } from "../src/Yoga/React/Native/MacOS/DatePicker.js";
11+import { _colorWellImpl } from "../src/Yoga/React/Native/MacOS/ColorWell.js";
12+import { _popUpImpl } from "../src/Yoga/React/Native/MacOS/PopUp.js";
13+import { _textEditorImpl } from "../src/Yoga/React/Native/MacOS/TextEditor.js";
14+import { _webViewImpl } from "../src/Yoga/React/Native/MacOS/WebView.js";
15+import { _levelIndicatorImpl } from "../src/Yoga/React/Native/MacOS/LevelIndicator.js";
16+import { _nativeScrollViewImpl } from "../src/Yoga/React/Native/MacOS/ScrollView.js";
17+import { _visualEffectImpl } from "../src/Yoga/React/Native/MacOS/VisualEffect.js";
18+import { _contextMenuImpl } from "../src/Yoga/React/Native/MacOS/ContextMenu.js";
19+import { _filePickerImpl } from "../src/Yoga/React/Native/MacOS/FilePicker.js";
20+import { _videoPlayerImpl } from "../src/Yoga/React/Native/MacOS/VideoPlayer.js";
21+import { _animatedImageImpl } from "../src/Yoga/React/Native/MacOS/AnimatedImage.js";
22+import { _patternBackgroundImpl } from "../src/Yoga/React/Native/MacOS/PatternBackground.js";
23+import { _splitViewImpl } from "../src/Yoga/React/Native/MacOS/SplitView.js";
24+import { _tabViewImpl } from "../src/Yoga/React/Native/MacOS/TabView.js";
25+import { _comboBoxImpl } from "../src/Yoga/React/Native/MacOS/ComboBox.js";
26+import { _stepperImpl } from "../src/Yoga/React/Native/MacOS/Stepper.js";
27+import { _boxImpl } from "../src/Yoga/React/Native/MacOS/Box.js";
28+import { _popoverImpl } from "../src/Yoga/React/Native/MacOS/Popover.js";
29+import { _imageImpl } from "../src/Yoga/React/Native/MacOS/Image.js";
30+
31+// Batch 2 — new macOS native components
32+import { _checkboxImpl } from "../src/Yoga/React/Native/MacOS/Checkbox.js";
33+import { _radioButtonImpl } from "../src/Yoga/React/Native/MacOS/RadioButton.js";
34+import { _searchFieldImpl } from "../src/Yoga/React/Native/MacOS/SearchField.js";
35+import { _tokenFieldImpl } from "../src/Yoga/React/Native/MacOS/TokenField.js";
36+import { _separatorImpl } from "../src/Yoga/React/Native/MacOS/Separator.js";
37+import { _helpButtonImpl } from "../src/Yoga/React/Native/MacOS/HelpButton.js";
38+import { _pathControlImpl } from "../src/Yoga/React/Native/MacOS/PathControl.js";
39+import { _sheetImpl } from "../src/Yoga/React/Native/MacOS/Sheet.js";
40+import { _tableViewImpl } from "../src/Yoga/React/Native/MacOS/TableView.js";
41+
42+describe("macOS native component FFI exports (batch 1)", () => {
43+ it("Button resolves to NativeButton", () => {
44+ expect(_buttonImpl).toBe("NativeButton");
45+ });
46+
47+ it("Segmented resolves to NativeSegmented", () => {
48+ expect(_segmentedImpl).toBe("NativeSegmented");
49+ });
50+
51+ it("TextField resolves to NativeTextField", () => {
52+ expect(_textFieldImpl).toBe("NativeTextField");
53+ });
54+
55+ it("Slider resolves to NativeSlider", () => {
56+ expect(_sliderImpl).toBe("NativeSlider");
57+ });
58+
59+ it("Switch resolves to NativeSwitch", () => {
60+ expect(_switchImpl).toBe("NativeSwitch");
61+ });
62+
63+ it("Progress resolves to NativeProgress", () => {
64+ expect(_progressImpl).toBe("NativeProgress");
65+ });
66+
67+ it("DatePicker resolves to NativeDatePicker", () => {
68+ expect(_datePickerImpl).toBe("NativeDatePicker");
69+ });
70+
71+ it("ColorWell resolves to NativeColorWell", () => {
72+ expect(_colorWellImpl).toBe("NativeColorWell");
73+ });
74+
75+ it("PopUp resolves to NativePopUp", () => {
76+ expect(_popUpImpl).toBe("NativePopUp");
77+ });
78+
79+ it("TextEditor resolves to NativeTextEditor", () => {
80+ expect(_textEditorImpl).toBe("NativeTextEditor");
81+ });
82+
83+ it("WebView resolves to NativeWebView", () => {
84+ expect(_webViewImpl).toBe("NativeWebView");
85+ });
86+
87+ it("LevelIndicator resolves to NativeLevelIndicator", () => {
88+ expect(_levelIndicatorImpl).toBe("NativeLevelIndicator");
89+ });
90+
91+ it("ScrollView resolves to MacOSScrollView", () => {
92+ expect(_nativeScrollViewImpl).toBe("MacOSScrollView");
93+ });
94+
95+ it("VisualEffect resolves to MacOSVisualEffectView", () => {
96+ expect(_visualEffectImpl).toBe("MacOSVisualEffectView");
97+ });
98+
99+ it("ContextMenu resolves to MacOSContextMenu", () => {
100+ expect(_contextMenuImpl).toBe("MacOSContextMenu");
101+ });
102+
103+ it("FilePicker resolves to MacOSFilePicker", () => {
104+ expect(_filePickerImpl).toBe("MacOSFilePicker");
105+ });
106+
107+ it("VideoPlayer resolves to MacOSVideoPlayer", () => {
108+ expect(_videoPlayerImpl).toBe("MacOSVideoPlayer");
109+ });
110+
111+ it("AnimatedImage resolves to MacOSAnimatedImage", () => {
112+ expect(_animatedImageImpl).toBe("MacOSAnimatedImage");
113+ });
114+
115+ it("PatternBackground resolves to MacOSPatternBackground", () => {
116+ expect(_patternBackgroundImpl).toBe("MacOSPatternBackground");
117+ });
118+
119+ it("SplitView resolves to MacOSSplitView", () => {
120+ expect(_splitViewImpl).toBe("MacOSSplitView");
121+ });
122+
123+ it("TabView resolves to MacOSTabView", () => {
124+ expect(_tabViewImpl).toBe("MacOSTabView");
125+ });
126+
127+ it("ComboBox resolves to MacOSComboBox", () => {
128+ expect(_comboBoxImpl).toBe("MacOSComboBox");
129+ });
130+
131+ it("Stepper resolves to MacOSStepper", () => {
132+ expect(_stepperImpl).toBe("MacOSStepper");
133+ });
134+
135+ it("Box resolves to MacOSBox", () => {
136+ expect(_boxImpl).toBe("MacOSBox");
137+ });
138+
139+ it("Popover resolves to MacOSPopover", () => {
140+ expect(_popoverImpl).toBe("MacOSPopover");
141+ });
142+
143+ it("Image resolves to MacOSImage", () => {
144+ expect(_imageImpl).toBe("MacOSImage");
145+ });
146+});
147+
148+describe("macOS native component FFI exports (batch 2)", () => {
149+ it("Checkbox resolves to MacOSCheckbox", () => {
150+ expect(_checkboxImpl).toBe("MacOSCheckbox");
151+ });
152+
153+ it("RadioButton resolves to MacOSRadioButton", () => {
154+ expect(_radioButtonImpl).toBe("MacOSRadioButton");
155+ });
156+
157+ it("SearchField resolves to MacOSSearchField", () => {
158+ expect(_searchFieldImpl).toBe("MacOSSearchField");
159+ });
160+
161+ it("TokenField resolves to MacOSTokenField", () => {
162+ expect(_tokenFieldImpl).toBe("MacOSTokenField");
163+ });
164+
165+ it("Separator resolves to MacOSSeparator", () => {
166+ expect(_separatorImpl).toBe("MacOSSeparator");
167+ });
168+
169+ it("HelpButton resolves to MacOSHelpButton", () => {
170+ expect(_helpButtonImpl).toBe("MacOSHelpButton");
171+ });
172+
173+ it("PathControl resolves to MacOSPathControl", () => {
174+ expect(_pathControlImpl).toBe("MacOSPathControl");
175+ });
176+
177+ it("Sheet resolves to MacOSSheet", () => {
178+ expect(_sheetImpl).toBe("MacOSSheet");
179+ });
180+
181+ it("TableView resolves to MacOSTableView", () => {
182+ expect(_tableViewImpl).toBe("MacOSTableView");
183+ });
184+});