Skip to main content
Glama

MCP Xcode

by Stefan-Nitu
BuildDestinationMapperAdapter.unit.test.ts8.93 kB
import { describe, it, expect } from '@jest/globals'; import { BuildDestinationMapperAdapter } from '../../infrastructure/BuildDestinationMapperAdapter.js'; import { BuildDestination } from '../../domain/BuildDestination.js'; /** * Unit tests for BuildDestinationMapper * * Following testing philosophy: * - Test behavior, not implementation * - Use factory methods for test data * - DAMP over DRY for clarity */ describe('BuildDestinationMapper', () => { // Factory for creating SUT function createSUT() { const sut = new BuildDestinationMapperAdapter(); return { sut }; } describe('toXcodeBuildOptions', () => { describe('iOS destinations', () => { it('should map iOSSimulator to simulator with ONLY_ACTIVE_ARCH optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.iOSSimulator); // Assert expect(result).toEqual({ destination: 'generic/platform=iOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map iOSSimulatorUniversal without optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.iOSSimulator); // Assert expect(result).toEqual({ destination: 'generic/platform=iOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map iOSDevice to physical device platform', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.iOSDevice); // Assert expect(result).toEqual({ destination: 'generic/platform=iOS' }); }); it('should map iOSSimulatorUniversal without architecture restrictions', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.iOSSimulatorUniversal); // Assert expect(result).toEqual({ destination: 'generic/platform=iOS Simulator' }); }); }); describe('tvOS destinations', () => { it('should map tvOSSimulator to simulator with architecture optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.tvOSSimulator); // Assert expect(result).toEqual({ destination: 'generic/platform=tvOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map tvOSSimulatorUniversal without architecture restrictions', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.tvOSSimulatorUniversal); // Assert expect(result).toEqual({ destination: 'generic/platform=tvOS Simulator' }); }); }); describe('watchOS destinations', () => { it('should map watchOSSimulator to simulator with architecture optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.watchOSSimulator); // Assert expect(result).toEqual({ destination: 'generic/platform=watchOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map watchOSSimulatorUniversal without architecture restrictions', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.watchOSSimulatorUniversal); // Assert expect(result).toEqual({ destination: 'generic/platform=watchOS Simulator' }); }); }); describe('visionOS destinations', () => { it('should map visionOSSimulator to xrOS Simulator with architecture optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.visionOSSimulator); // Assert expect(result).toEqual({ destination: 'generic/platform=xrOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map visionOSSimulatorUniversal to xrOS without restrictions', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.visionOSSimulatorUniversal); // Assert expect(result).toEqual({ destination: 'generic/platform=xrOS Simulator' }); }); }); describe('macOS destinations', () => { it('should map macOSSimulator to macOS with architecture optimization', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.macOS); // Assert expect(result).toEqual({ destination: 'platform=macOS', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); it('should map macOSUniversal without architecture restrictions', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.macOSUniversal); // Assert expect(result).toEqual({ destination: 'platform=macOS' }); }); }); describe('default fallback', () => { it('should fallback to iOS Simulator for unknown destination', async () => { // Arrange const { sut } = createSUT(); // Force an invalid enum value through type casting const unknownDestination = 'UnknownDestination' as BuildDestination; // Act const result = await sut.toXcodeBuildOptions(unknownDestination); // Assert expect(result).toEqual({ destination: 'generic/platform=iOS Simulator', additionalSettings: ['ONLY_ACTIVE_ARCH=YES'] }); }); }); }); describe('platform name mapping', () => { it('should correctly map visionOS to xrOS in xcodebuild', async () => { // Arrange const { sut } = createSUT(); // Act const autoResult = await sut.toXcodeBuildOptions(BuildDestination.visionOSSimulator); const universalResult = await sut.toXcodeBuildOptions(BuildDestination.visionOSSimulatorUniversal); // Assert expect(autoResult.destination).toContain('xrOS'); expect(universalResult.destination).toContain('xrOS'); expect(autoResult.destination).not.toContain('visionOS'); }); }); describe('build optimization settings', () => { it('should include ONLY_ACTIVE_ARCH for Simulator destinations', async () => { // Arrange const { sut } = createSUT(); const autoDestinations = [ BuildDestination.iOSSimulator, BuildDestination.tvOSSimulator, BuildDestination.watchOSSimulator, BuildDestination.visionOSSimulator, BuildDestination.macOS ]; // Act & Assert for (const destination of autoDestinations) { const result = await sut.toXcodeBuildOptions(destination); expect(result.additionalSettings).toContain('ONLY_ACTIVE_ARCH=YES'); } }); it('should not include additionalSettings for Universal destinations', async () => { // Arrange const { sut } = createSUT(); const universalDestinations = [ BuildDestination.iOSSimulatorUniversal, BuildDestination.tvOSSimulatorUniversal, BuildDestination.watchOSSimulatorUniversal, BuildDestination.visionOSSimulatorUniversal, BuildDestination.macOSUniversal ]; // Act & Assert for (const destination of universalDestinations) { const result = await sut.toXcodeBuildOptions(destination); expect(result.additionalSettings).toBeUndefined(); } }); it('should not include additionalSettings for device builds', async () => { // Arrange const { sut } = createSUT(); // Act const result = await sut.toXcodeBuildOptions(BuildDestination.iOSDevice); // Assert expect(result.additionalSettings).toBeUndefined(); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Stefan-Nitu/mcp-xcode'

If you have feedback or need assistance with the MCP directory API, please join our Discord server