node_modules.apollo-codegen-swift.src.__tests__.language.ts Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of apollo-client-maven-plugin Show documentation
Show all versions of apollo-client-maven-plugin Show documentation
Maven plugin for generating graphql clients
import { stripIndent } from 'common-tags';
import { SwiftGenerator } from '../language';
describe('Swift code generation: Basic language constructs', () => {
let generator: SwiftGenerator;
beforeEach(() => {
generator = new SwiftGenerator({});
});
it(`should generate a class declaration`, () => {
generator.classDeclaration({ className: 'Hero', modifiers: ['public', 'final'] }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String' });
generator.propertyDeclaration({ propertyName: 'age', typeName: 'Int' });
});
expect(generator.output).toBe(stripIndent`
public final class Hero {
public var name: String
public var age: Int
}
`);
});
it(`should generate a struct declaration`, () => {
generator.structDeclaration({ structName: 'Hero' }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String' });
generator.propertyDeclaration({ propertyName: 'age', typeName: 'Int' });
});
expect(generator.output).toBe(stripIndent`
public struct Hero {
public var name: String
public var age: Int
}
`);
});
it(`should generate an escaped struct declaration`, () => {
generator.structDeclaration({ structName: 'Type' }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String' });
generator.propertyDeclaration({ propertyName: 'yearOfBirth', typeName: 'Int' });
});
expect(generator.output).toBe(stripIndent`
public struct \`Type\` {
public var name: String
public var yearOfBirth: Int
}
`);
});
it(`should generate nested struct declarations`, () => {
generator.structDeclaration({ structName: 'Hero' }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String' });
generator.propertyDeclaration({ propertyName: 'friends', typeName: '[Friend]' });
generator.structDeclaration({ structName: 'Friend' }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String' });
});
});
expect(generator.output).toBe(stripIndent`
public struct Hero {
public var name: String
public var friends: [Friend]
public struct Friend {
public var name: String
}
}
`);
});
it(`should generate a protocol declaration`, () => {
generator.protocolDeclaration({ protocolName: 'HeroDetails', adoptedProtocols: ['HasName'] }, () => {
generator.protocolPropertyDeclaration({ propertyName: 'name', typeName: 'String' });
generator.protocolPropertyDeclaration({ propertyName: 'age', typeName: 'Int' });
});
expect(generator.output).toBe(stripIndent`
public protocol HeroDetails: HasName {
var name: String { get }
var age: Int { get }
}
`);
});
it(`should handle multi-line descriptions`, () => {
generator.structDeclaration({ structName: 'Hero', description: 'A hero' }, () => {
generator.propertyDeclaration({ propertyName: 'name', typeName: 'String', description: `A multiline comment \n on the hero's name.` });
generator.propertyDeclaration({ propertyName: 'age', typeName: 'String', description: `A multiline comment \n on the hero's age.` });
});
expect(generator.output).toMatchSnapshot();
});
});
© 2015 - 2025 Weber Informatics LLC | Privacy Policy