Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
572 changes: 315 additions & 257 deletions lib/src/commands/pull.test.ts

Large diffs are not rendered by default.

116 changes: 116 additions & 0 deletions lib/src/formatters/android.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
import AndroidOutputFile from "./shared/fileTypes/AndroidOutputFile";
import { Output } from "../outputs";
import { ProjectConfigYAML } from "../services/projectConfig";
import { CommandMetaFlags } from "../http/types";
import AndroidXMLFormatter from "./android";

// @ts-ignore
class TestAndroidXMLFormatter extends AndroidXMLFormatter {
public createOutputFilePublic(
fileName: string,
variantId: string,
content: string
) {
// @ts-ignore
return super.createOutputFile(fileName, variantId, content);
}

public getExportFormat() {
// @ts-ignore
return this.exportFormat;
}

public getOutputFiles() {
// @ts-ignore
return this.outputFiles;
}
}

describe("AndroidXMLFormatter", () => {
// @ts-ignore
const createMockOutput = (overrides: Partial<Output> = {}): Output => ({
format: "android",
...overrides,
});

const createMockProjectConfig = (
overrides: Partial<ProjectConfigYAML> = {}
): ProjectConfigYAML => ({
projects: [],
variants: [],
components: {
folders: [],
},
outputs: [
{
format: "android",
} as any,
],
...overrides,
});

const createMockMeta = (): CommandMetaFlags => ({});

it("has export format of android", () => {
const output = createMockOutput({ outDir: "/test/output" });
const projectConfig = createMockProjectConfig();
const formatter = new TestAndroidXMLFormatter(
output,
projectConfig,
createMockMeta()
);

expect(formatter.getExportFormat()).toBe("android");
});

it("creates AndroidOutputFile with correct metadata and content", () => {
const output = createMockOutput({ outDir: "/test/output" });
const projectConfig = createMockProjectConfig();
const formatter = new TestAndroidXMLFormatter(
output,
projectConfig,
createMockMeta()
);

const fileName = "cli-testing-project___spanish";
const variantId = "spanish";
const content = "file-content";

formatter.createOutputFilePublic(fileName, variantId, content);

const files = formatter.getOutputFiles();
const file = files[fileName] as AndroidOutputFile<{
variantId: string;
}>;

expect(file).toBeInstanceOf(AndroidOutputFile);
expect(file.fullPath).toBe(
"/test/output/cli-testing-project___spanish.xml"
);
expect(file.metadata).toEqual({ variantId: "spanish" });
expect(file.content).toBe("file-content");
});

it("defaults variantId metadata to 'base' when variantId is falsy", () => {
const output = createMockOutput({ outDir: "/test/output" });
const projectConfig = createMockProjectConfig();
const formatter = new TestAndroidXMLFormatter(
output,
projectConfig,
createMockMeta()
);

const fileName = "cli-testing-project___base";
const content = "base-content";

formatter.createOutputFilePublic(fileName, "" as any, content);

const files = formatter.getOutputFiles();
const file = files[fileName] as AndroidOutputFile<{
variantId: string;
}>;

expect(file.metadata).toEqual({ variantId: "base" });
expect(file.content).toBe("base-content");
});
});
28 changes: 28 additions & 0 deletions lib/src/formatters/android.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import BaseExportFormatter from "./shared/baseExport";
import AndroidOutputFile from "./shared/fileTypes/AndroidOutputFile";
import {
ExportComponentsStringResponse,
ExportTextItemsStringResponse,
PullQueryParams,
} from "../http/types";

export default class AndroidXMLFormatter extends BaseExportFormatter<
AndroidOutputFile<{ variantId: string }>,
ExportTextItemsStringResponse,
ExportComponentsStringResponse
> {
protected exportFormat: PullQueryParams["format"] = "android";

protected createOutputFile(
fileName: string,
variantId: string,
content: string
): void {
this.outputFiles[fileName] ??= new AndroidOutputFile({
filename: fileName,
path: this.outDir,
metadata: { variantId: variantId || "base" },
content: content,
});
}
}
28 changes: 28 additions & 0 deletions lib/src/formatters/icu.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import BaseExportFormatter from "./shared/baseExport";
import ICUOutputFile from "./shared/fileTypes/ICUOutputFile";
import {
ExportComponentsJSONResponse,
ExportTextItemsJSONResponse,
PullQueryParams,
} from "../http/types";

export default class ICUFormatter extends BaseExportFormatter<
ICUOutputFile<{ variantId: string }>,
ExportTextItemsJSONResponse,
ExportComponentsJSONResponse
> {
protected exportFormat: PullQueryParams["format"] = "icu";

protected createOutputFile(
fileName: string,
variantId: string,
content: Record<string, unknown>
): void {
this.outputFiles[fileName] ??= new ICUOutputFile({
filename: fileName,
path: this.outDir,
metadata: { variantId: variantId || "base" },
content: content,
});
}
}
9 changes: 9 additions & 0 deletions lib/src/formatters/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { CommandMetaFlags } from "../http/types";
import { Output } from "../outputs";
import { ProjectConfigYAML } from "../services/projectConfig";
import AndroidXMLFormatter from "./android";
import ICUFormatter from "./icu";
import IOSStringsFormatter from "./iosStrings";
import IOSStringsDictFormatter from "./iosStringsDict";
import JSONFormatter from "./json";

export default function formatOutput(
Expand All @@ -10,10 +13,16 @@ export default function formatOutput(
meta: CommandMetaFlags
) {
switch (output.format) {
case "android":
return new AndroidXMLFormatter(output, projectConfig, meta).format();
case "json":
return new JSONFormatter(output, projectConfig, meta).format();
case "ios-strings":
return new IOSStringsFormatter(output, projectConfig, meta).format();
case "ios-stringsdict":
return new IOSStringsDictFormatter(output, projectConfig, meta).format();
case "icu":
return new ICUFormatter(output, projectConfig, meta).format();
default:
throw new Error(`Unsupported output format: ${output}`);
}
Expand Down
Loading