Changed splitBufferBundle to use Object.entries and added tests for it

This commit is contained in:
Alexander Cerutti
2021-02-07 17:23:33 +01:00
parent 61f0fdd2e6
commit 960331d737
4 changed files with 81 additions and 9 deletions

View File

@@ -10,7 +10,7 @@
"build:examples": "cd examples && npm run build",
"build:spec": "rm -rf ./spec/*.js && npx tsc",
"prepublishOnly": "npm run build",
"test": "npm run build:spec && npm run build:src && jasmine spec/index.js",
"test": "npm run build:spec && npm run build:src && jasmine spec/*.js",
"example": "npm run build:src && npm --prefix examples run example"
},
"author": "Alexander Patrick Cerutti",

View File

@@ -113,10 +113,11 @@ describe("Passkit-generator", function () {
});
describe("expiration()", () => {
it("Won't apply changes withouta valid argument", () => {
it("Won't apply changes without a valid argument", () => {
// @ts-expect-error
pass.expiration();
expect(pass.props["expirationDate"]).toBe(undefined);
// @ts-expect-error
pass.expiration(42);
expect(pass.props["expirationDate"]).toBe(undefined);

59
spec/utils.ts Normal file
View File

@@ -0,0 +1,59 @@
import { splitBufferBundle } from "../lib/utils";
import type { BundleUnit } from "../src/schema";
describe("splitBufferBundle", () => {
it("should split the bundle in language-organized files buffers and normal files with valid bundleUnit passed", () => {
const zeroBuffer = Buffer.alloc(0);
const payload: BundleUnit = {
"en.lproj/thumbnail@2x.png": zeroBuffer,
"de.lproj/background@2x.png": zeroBuffer,
"it.lproj/thumbnail@2x.png": zeroBuffer,
"thumbnail@2x.png": zeroBuffer,
"background.png": zeroBuffer
};
const result = splitBufferBundle(payload);
expect(result).toBeDefined();
expect(result.length).toBe(2);
expect(result[0]).toEqual({
"en.lproj": {
"thumbnail@2x.png": zeroBuffer,
},
"de.lproj": {
"background@2x.png": zeroBuffer,
},
"it.lproj": {
"thumbnail@2x.png": zeroBuffer,
}
});
expect(result[1]).toEqual({
"thumbnail@2x.png": zeroBuffer,
"background.png": zeroBuffer
});
});
it("should return empty partitionedBufferBundle if BundleUnit is empty object", () => {
const result = splitBufferBundle({});
expect(result).toBeDefined();
expect(result.length).toBe(2);
expect(result[0]).toEqual({});
expect(result[1]).toEqual({});
});
it("should return empty partitionedBufferBundle if BundleUnit is undefined", () => {
const resultUndefined = splitBufferBundle(undefined);
const resultNull = splitBufferBundle(null);
expect(resultUndefined).toBeDefined();
expect(resultUndefined.length).toBe(2);
expect(resultUndefined[0]).toEqual({});
expect(resultUndefined[1]).toEqual({});
expect(resultNull).toBeDefined();
expect(resultNull.length).toBe(2);
expect(resultNull[0]).toEqual({});
expect(resultNull[1]).toEqual({});
});
});

View File

@@ -91,20 +91,32 @@ export function generateStringFile(lang: { [index: string]: string }): Buffer {
type PartitionedBundleElements = [PartitionedBundle["l10nBundle"], PartitionedBundle["bundle"]];
export function splitBufferBundle(origin: any): PartitionedBundleElements {
return Object.keys(origin).reduce<PartitionedBundleElements>(([l10n, bundle], current) => {
if (!current.includes(".lproj")) {
return [l10n, { ...bundle, [current]: origin[current] }];
export function splitBufferBundle(origin: BundleUnit): PartitionedBundleElements {
const initialValue: PartitionedBundleElements = [{}, {}];
if (!origin) {
return initialValue;
}
return Object.entries(origin).reduce<PartitionedBundleElements>(([l10n, bundle], [key, buffer]) => {
if (!key.includes(".lproj")) {
return [
l10n,
{
...bundle,
[key]: buffer
}
];
}
const pathComponents = current.split(sep);
const pathComponents = key.split(sep);
const lang = pathComponents[0];
const file = pathComponents.slice(1).join("/");
(l10n[lang] || (l10n[lang] = {}))[file] = origin[current];
(l10n[lang] || (l10n[lang] = {}))[file] = buffer;
return [l10n, bundle];
}, [{}, {}]);
}, initialValue);
}
type StringSearchMode = "includes" | "startsWith" | "endsWith";