Skip to content

Commit

Permalink
fix(config): fix backslash regression
Browse files Browse the repository at this point in the history
After the Adaptive Icon refactor, cordova-res started writing file paths
with backslashes on Windows to the config file. This has now been fixed.

fixes ionic-team/ionic-cli#4062
  • Loading branch information
imhoffd committed Jul 3, 2019
1 parent 78abbfd commit 4baaa01
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 3 deletions.
64 changes: 64 additions & 0 deletions src/__tests__/config.ts
@@ -0,0 +1,64 @@
import * as et from 'elementtree';

import { runResource } from '../config';
import { ResourceKey, ResourceType } from '../resources';
import { GeneratedResource, Platform } from '../platform';

describe('cordova-res', () => {

describe('config', () => {

describe('runResource', () => {

const resource: GeneratedResource = {
[ResourceKey.SRC]: '/path/to/resources/icon.png',
type: ResourceType.ICON,
srckey: ResourceKey.SRC,
platform: Platform.ANDROID,
nodeName: 'icon',
nodeAttributes: [ResourceKey.SRC],
};

it('should insert node for empty container', async () => {
const src = 'resources/icon.png';
const container = et.Element('platform');

runResource('/path/to/config.xml', resource, container);

const children = container.findall('icon');
expect(children.length).toEqual(1);
expect(children[0].tag).toEqual(resource.nodeName);
expect(children[0].get('src')).toEqual(src);
});

it('should not change node if found in container', async () => {
const src = 'resources/icon.png';
const container = et.Element('platform');
et.SubElement(container, 'icon', { src });

runResource('/path/to/config.xml', resource, container);

const children = container.findall('icon');
expect(children.length).toEqual(1);
expect(children[0].tag).toEqual(resource.nodeName);
expect(children[0].get('src')).toEqual(src);
});

it('should update node with win32 paths', async () => {
const src = 'resources/icon.png';
const container = et.Element('platform');
et.SubElement(container, 'icon', { src: 'resources\\icon.png' });

runResource('/path/to/config.xml', resource, container);

const children = container.findall('icon');
expect(children.length).toEqual(1);
expect(children[0].tag).toEqual(resource.nodeName);
expect(children[0].get('src')).toEqual(src);
});

});

});

});
10 changes: 7 additions & 3 deletions src/config.ts
Expand Up @@ -111,13 +111,17 @@ export function runResource(configPath: string, resource: GeneratedResource, con

// We force the use of forward slashes here to provide cross-platform
// compatibility for paths.
const value = pathlib.relative(pathlib.dirname(configPath), src).replace(/\\/g, '/');
const imgElement = resolveResourceElement(container, resource.nodeName, resource.srckey, value);
const dest = pathlib.relative(pathlib.dirname(configPath), src).replace(/\\/g, '/');
const imgElement = resolveResourceElement(container, resource.nodeName, resource.srckey, dest);

for (const attr of resource.nodeAttributes) {
const v = resource[attr];
let v = resource[attr];

if (v) {
if (attr === resource.srckey) {
v = dest;
}

imgElement.set(attr, v.toString());
}
}
Expand Down

0 comments on commit 4baaa01

Please sign in to comment.