package languages import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) // These tests pin the ui_component framework marker (and the mirrored // type_flavor="component") onto already-detected SFC / SwiftUI / Fabric // component nodes, alongside the pre-existing component markers. func TestUIComponent_Svelte(t *testing.T) { src := ` ` res, err := NewSvelteExtractor().Extract("Counter.svelte", []byte(src)) require.NoError(t, err) comp := nodeByName(res.Nodes, "Counter") require.NotNil(t, comp) assert.Equal(t, "svelte", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) assert.Equal(t, true, comp.Meta["component"]) // dual-write } func TestUIComponent_Vue(t *testing.T) { src := ` ` res, err := NewVueExtractor().Extract("components/Counter.vue", []byte(src)) require.NoError(t, err) comp := nodeByName(res.Nodes, "Counter") require.NotNil(t, comp) assert.Equal(t, "vue", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) assert.Equal(t, true, comp.Meta["component"]) // dual-write } func TestUIComponent_Astro(t *testing.T) { src := `--- const title = "Home" --- {title} ` res, err := NewAstroExtractor().Extract("pages/index.astro", []byte(src)) require.NoError(t, err) comp := nodeByName(res.Nodes, "index") require.NotNil(t, comp) assert.Equal(t, "astro", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) assert.Equal(t, true, comp.Meta["component"]) // dual-write } func TestUIComponent_Razor(t *testing.T) { src := `@page "/counter"

Counter

@code { private int count = 0; } ` res, err := NewRazorExtractor().Extract("Counter.razor", []byte(src)) require.NoError(t, err) comp := nodeByName(res.Nodes, "Counter") require.NotNil(t, comp) assert.Equal(t, "razor", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) assert.Equal(t, true, comp.Meta["component"]) // dual-write } func TestUIComponent_SwiftUI(t *testing.T) { src := []byte(`import SwiftUI struct ContentView: View { var body: some View { Text("hi") } } `) res, err := NewSwiftExtractor().Extract("App/ContentView.swift", src) require.NoError(t, err) comp := nodeByName(res.Nodes, "ContentView") require.NotNil(t, comp) assert.Equal(t, "swiftui", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["swiftui_role"]) // dual-write } func TestUIComponent_FabricTS(t *testing.T) { src := `import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; export default codegenNativeComponent('RCTColorView'); ` res, err := NewTypeScriptExtractor().Extract("ColorViewNativeComponent.ts", []byte(src)) require.NoError(t, err) comp := fabricNode(res.Nodes) require.NotNil(t, comp) assert.Equal(t, "react", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) assert.Equal(t, "RCTColorView", comp.Meta["fabric_component"]) // dual-write } func TestUIComponent_FabricObjC(t *testing.T) { src := `@implementation RCTColorViewManager RCT_EXPORT_MODULE() RCT_EXPORT_VIEW_PROPERTY(color, NSString) @end ` res, err := NewObjCExtractor().Extract("RCTColorViewManager.m", []byte(src)) require.NoError(t, err) comp := fabricNode(res.Nodes) require.NotNil(t, comp) assert.Equal(t, "react", comp.Meta["ui_component"]) assert.Equal(t, "component", comp.Meta["type_flavor"]) }