Skip to content

Commit 4baaa01

Browse files
committed
fix(config): fix backslash regression
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
1 parent 78abbfd commit 4baaa01

File tree

2 files changed

+71
-3
lines changed

2 files changed

+71
-3
lines changed

src/__tests__/config.ts

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import * as et from 'elementtree';
2+
3+
import { runResource } from '../config';
4+
import { ResourceKey, ResourceType } from '../resources';
5+
import { GeneratedResource, Platform } from '../platform';
6+
7+
describe('cordova-res', () => {
8+
9+
describe('config', () => {
10+
11+
describe('runResource', () => {
12+
13+
const resource: GeneratedResource = {
14+
[ResourceKey.SRC]: '/path/to/resources/icon.png',
15+
type: ResourceType.ICON,
16+
srckey: ResourceKey.SRC,
17+
platform: Platform.ANDROID,
18+
nodeName: 'icon',
19+
nodeAttributes: [ResourceKey.SRC],
20+
};
21+
22+
it('should insert node for empty container', async () => {
23+
const src = 'resources/icon.png';
24+
const container = et.Element('platform');
25+
26+
runResource('/path/to/config.xml', resource, container);
27+
28+
const children = container.findall('icon');
29+
expect(children.length).toEqual(1);
30+
expect(children[0].tag).toEqual(resource.nodeName);
31+
expect(children[0].get('src')).toEqual(src);
32+
});
33+
34+
it('should not change node if found in container', async () => {
35+
const src = 'resources/icon.png';
36+
const container = et.Element('platform');
37+
et.SubElement(container, 'icon', { src });
38+
39+
runResource('/path/to/config.xml', resource, container);
40+
41+
const children = container.findall('icon');
42+
expect(children.length).toEqual(1);
43+
expect(children[0].tag).toEqual(resource.nodeName);
44+
expect(children[0].get('src')).toEqual(src);
45+
});
46+
47+
it('should update node with win32 paths', async () => {
48+
const src = 'resources/icon.png';
49+
const container = et.Element('platform');
50+
et.SubElement(container, 'icon', { src: 'resources\\icon.png' });
51+
52+
runResource('/path/to/config.xml', resource, container);
53+
54+
const children = container.findall('icon');
55+
expect(children.length).toEqual(1);
56+
expect(children[0].tag).toEqual(resource.nodeName);
57+
expect(children[0].get('src')).toEqual(src);
58+
});
59+
60+
});
61+
62+
});
63+
64+
});

src/config.ts

+7-3
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,17 @@ export function runResource(configPath: string, resource: GeneratedResource, con
111111

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

117117
for (const attr of resource.nodeAttributes) {
118-
const v = resource[attr];
118+
let v = resource[attr];
119119

120120
if (v) {
121+
if (attr === resource.srckey) {
122+
v = dest;
123+
}
124+
121125
imgElement.set(attr, v.toString());
122126
}
123127
}

0 commit comments

Comments
 (0)