Skip to content

Commit

Permalink
test(manager/gradle): add further tests (#18977)
Browse files Browse the repository at this point in the history
  • Loading branch information
Churro committed Nov 18, 2022
1 parent fdf3350 commit ff96c5f
Showing 1 changed file with 102 additions and 43 deletions.
145 changes: 102 additions & 43 deletions lib/modules/manager/gradle/parser.spec.ts
Expand Up @@ -13,12 +13,6 @@ function mockFs(files: Record<string, string>): void {
.concat(otherFileName);
}
);

// TODO: fix types, jest is using wrong overload (#7154)
fs.readLocalFile.mockImplementation((fileName: string): Promise<any> => {
const content = files?.[fileName];
return Promise.resolve(content ?? '');
});
}

describe('modules/manager/gradle/parser', () => {
Expand All @@ -30,21 +24,41 @@ describe('modules/manager/gradle/parser', () => {
describe('variables', () => {
describe('Groovy: single var assignments', () => {
test.each`
input | name | value
${'foo = "1.2.3"'} | ${'foo'} | ${'1.2.3'}
${'foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'ext.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'project.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'project.ext.foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'rootProject.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'rootProject.foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
input | name | value
${'foo = "1.2.3"'} | ${'foo'} | ${'1.2.3'}
${'foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'foo.bar.baz = "1.2.3"'} | ${'foo.bar.baz'} | ${'1.2.3'}
${'ext.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'foo["bar"] = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'foo["bar"]["baz"] = "1.2.3"'} | ${'foo.bar.baz'} | ${'1.2.3'}
${'foo["bar"]["baz.qux"] = "1.2.3"'} | ${'foo.bar.baz.qux'} | ${'1.2.3'}
${'foo.bar["baz"]["qux"] = "1.2.3"'} | ${'foo.bar.baz.qux'} | ${'1.2.3'}
${'ext["foo"] = "1.2.3"'} | ${'foo'} | ${'1.2.3'}
${'ext["foo"]["bar"] = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'extra["foo"] = "1.2.3"'} | ${'foo'} | ${'1.2.3'}
${'project.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'project.ext.foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
${'rootProject.foobar = "1.2.3"'} | ${'foobar'} | ${'1.2.3'}
${'rootProject.foo.bar = "1.2.3"'} | ${'foo.bar'} | ${'1.2.3'}
`('$input', ({ input, name, value }) => {
const { vars } = parseGradle(input);
expect(vars).toContainKey(name);
expect(vars[name]).toMatchObject({ key: name, value });
});
});

describe('Groovy: single var assignments (non-match)', () => {
test.each`
input
${'foo[["bar"]] = "baz"'}
${'foo["bar", "invalid"] = "1.2.3"'}
${'foo.bar["baz", "invalid"] = "1.2.3"'}
`('$input', ({ input }) => {
const { vars } = parseGradle(input);
expect(vars).toBeEmpty();
});
});

describe('Kotlin: single var assignments', () => {
test.each`
input | name | value
Expand All @@ -56,6 +70,17 @@ describe('modules/manager/gradle/parser', () => {
expect(vars[name]).toMatchObject({ key: name, value });
});
});

describe('Kotlin: single var assignments (non-match)', () => {
test.each`
input
${'set(["foo", "bar"])'}
${'set("foo", "bar", "baz", "qux"])'}
`('$input', ({ input }) => {
const { vars } = parseGradle(input);
expect(vars).toBeEmpty();
});
});
});

describe('dependencies', () => {
Expand All @@ -73,15 +98,18 @@ describe('modules/manager/gradle/parser', () => {

describe('interpolated dependency strings', () => {
test.each`
def | str | output
${'foo = "1.2.3"'} | ${'"foo:bar:$foo@@@"'} | ${null}
${''} | ${'"foo:bar:$baz"'} | ${null}
${'foo = "1"; bar = "2"; baz = "3"'} | ${'"foo:bar:$foo.$bar.$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', skipReason: 'contains-variable' }}
${'baz = "1.2.3"'} | ${'"foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'foo.bar = "1.2.3"'} | ${'"foo:bar:$foo.bar"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'foo.bar' }}
${'foo = "1.2.3"'} | ${'"foo:bar_$foo:4.5.6"'} | ${{ depName: 'foo:bar_1.2.3', managerData: { fileReplacePosition: 28 } }}
${'baz = "1.2.3"'} | ${'foobar = "foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'foo = "${bar}"; baz = "1.2.3"'} | ${'"foo:bar:${baz}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
def | str | output
${'foo = "1.2.3"'} | ${'"foo:bar:$foo@@@"'} | ${null}
${''} | ${'"foo:bar:$baz"'} | ${null}
${'foo = "1"; bar = "2"; baz = "3"'} | ${'"foo:bar:$foo.$bar.$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', skipReason: 'contains-variable' }}
${'baz = "1.2.3"'} | ${'"foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'foo.bar = "1.2.3"'} | ${'"foo:bar:$foo.bar"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'foo.bar' }}
${'foo = "1.2.3"'} | ${'"foo:bar_$foo:4.5.6"'} | ${{ depName: 'foo:bar_1.2.3', managerData: { fileReplacePosition: 28 } }}
${'baz = "1.2.3"'} | ${'foobar = "foo:bar:$baz"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'foo = "${bar}"; baz = "1.2.3"'} | ${'"foo:bar:${baz}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'"foo:bar:${ext[\'baz\']}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'baz = "1.2.3"'} | ${'"foo:bar:${ext.baz}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'baz = "1.2.3"'} | ${'"foo:bar:${project.ext[\'baz\']}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
`('$def | $str', ({ def, str, output }) => {
const { deps } = parseGradle([def, str].join('\n'));
expect(deps).toMatchObject([output].filter(Boolean));
Expand All @@ -95,11 +123,20 @@ describe('modules/manager/gradle/parser', () => {
${''} | ${'group: "foo", name: "bar", version: baz'} | ${null}
${''} | ${'group: "foo", name: "bar", version: "1.2.3@@@"'} | ${null}
${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: baz'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'some = "foo"'} | ${'group: some, name: some, version: "1.2.3"'} | ${{ depName: 'foo:foo', currentValue: '1.2.3' }}
${'some = "foo"'} | ${'group: "${some}", name: "${some}", version: "1.2.3"'} | ${{ depName: 'foo:foo', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: "${baz}"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'baz = "1.2.3"'} | ${'group: "foo", name: "bar", version: "${baz}456"'} | ${{ depName: 'foo:bar', skipReason: 'unknown-version' }}
${''} | ${'(group: "foo", name: "bar", version: "1.2.3", classifier: "sources")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${''} | ${'(group: "foo", name: "bar", version: "1.2.3") {exclude module: "spring-jcl"}'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${''} | ${"implementation platform(group: 'foo', name: 'bar', version: '1.2.3')"} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${''} | ${'(group = "foo", name = "bar", version = "1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'(group = "foo", name = "bar", version = baz)'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'some = "foo"'} | ${'(group = some, name = some, version = "1.2.3")'} | ${{ depName: 'foo:foo', currentValue: '1.2.3' }}
${'some = "foo"'} | ${'(group = "${some}", name = "${some}", version = "1.2.3")'} | ${{ depName: 'foo:foo', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'(group = "foo", name = "bar", version = "${baz}")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'baz = "1.2.3"'} | ${'(group = "foo", name = "bar", version = "${baz}456")'} | ${{ depName: 'foo:bar', skipReason: 'unknown-version' }}
${''} | ${'(group = "foo", name = "bar", version = "1.2.3", changing: true)'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
`('$def | $str', ({ def, str, output }) => {
const { deps } = parseGradle([def, str].join('\n'));
expect(deps).toMatchObject([output].filter(Boolean));
Expand Down Expand Up @@ -148,21 +185,40 @@ describe('modules/manager/gradle/parser', () => {

describe('custom registries', () => {
test.each`
def | input | url
${''} | ${'maven("")'} | ${null}
${''} | ${'maven(["https://foo.bar/baz/qux"])'} | ${null}
${''} | ${'maven("foo", "bar")'} | ${null}
${''} | ${'maven("https://foo.bar/baz")'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven("${base}/baz")'} | ${'https://foo.bar/baz'}
${''} | ${'maven(uri(["https://foo.bar/baz"]))'} | ${null}
${''} | ${'maven { ["https://foo.bar/baz"] }'} | ${null}
${''} | ${'maven { url "https://foo.bar/baz" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url "${base}/baz" }'} | ${'https://foo.bar/baz'}
${''} | ${'maven { url = "https://foo.bar/baz" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = "${base}/baz" }'} | ${'https://foo.bar/baz'}
${''} | ${'maven { url = uri("https://foo.bar/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = uri("${base}/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { name = "baz"\nurl = "${base}/${name}" }'} | ${'https://foo.bar/baz'}
def | input | url
${''} | ${'maven("")'} | ${null}
${''} | ${'maven(["https://foo.bar/baz/qux"])'} | ${null}
${''} | ${'maven("foo", "bar")'} | ${null}
${''} | ${'maven("https://foo.bar/baz")'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven("${base}/baz")'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven(base)'} | ${'https://foo.bar'}
${''} | ${'maven(url = "https://foo.bar/baz")'} | ${'https://foo.bar/baz'}
${''} | ${'maven(url = uri("https://foo.bar/baz"))'} | ${'https://foo.bar/baz'}
${''} | ${'maven(uri("https://foo.bar/baz"))'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven(uri("${base}/baz"))'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven(uri(base))'} | ${'https://foo.bar'}
${''} | ${'maven(uri(["https://foo.bar/baz"]))'} | ${null}
${''} | ${'maven { ["https://foo.bar/baz"] }'} | ${null}
${''} | ${'maven { url "https://foo.bar/baz" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url "${base}/baz" }'} | ${'https://foo.bar/baz'}
${''} | ${'maven { url uri("https://foo.bar/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url uri("${base}/baz") }'} | ${'https://foo.bar/baz'}
${''} | ${'maven { url = "https://foo.bar/baz" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = "${base}/baz" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = base }'} | ${'https://foo.bar'}
${''} | ${'maven { url = uri("https://foo.bar/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = uri("${base}/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { url = uri(base) }'} | ${'https://foo.bar'}
${''} | ${'maven { uri(["https://foo.bar/baz"]) }'} | ${null}
${'base="https://foo.bar"'} | ${'maven { name "baz"\nurl = "${base}/${name}" }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { name = "baz"\nurl = "${base}/${name}" }'} | ${'https://foo.bar/baz'}
${'some="baz"'} | ${'maven { name = "${some}"\nurl = "https://foo.bar/${name}" }'} | ${'https://foo.bar/baz'}
${'some="baz"'} | ${'maven { name = some\nurl = "https://foo.bar/${name}" }'} | ${'https://foo.bar/baz'}
${''} | ${'maven { setUrl("https://foo.bar/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { setUrl("${base}/baz") }'} | ${'https://foo.bar/baz'}
${'base="https://foo.bar"'} | ${'maven { setUrl(base) }'} | ${'https://foo.bar'}
${''} | ${'maven { setUrl(["https://foo.bar/baz"]) }'} | ${null}
${''} | ${'maven { setUrl("foo", "bar") }'} | ${null}
`('$def | $input', ({ def, input, url }) => {
const expected = [url].filter(Boolean);
const { urls } = parseGradle([def, input].join('\n'));
Expand All @@ -174,15 +230,18 @@ describe('modules/manager/gradle/parser', () => {
describe('version catalog', () => {
test.each`
def | str | output
${'version("baz", "1.2.3")'} | ${'library("foo.bar", "foo", "bar").versionRef("baz")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'version("baz", "1.2.3")'} | ${'library("foo.bar", "foo", "bar").versionRef("baz")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${''} | ${'library("foo.bar", "foo", "bar").version("1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'library("foo.bar", "foo", "bar").version(baz)'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'library("foo.bar", "foo", "bar").version("${baz}")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'baz = "1.2.3"'} | ${'library("foo.bar", "foo", "bar").version("${baz}xy")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3xy', skipReason: 'unknown-version' }}
${'group = "foo"; artifact = "bar"'} | ${'library("foo.bar", group, artifact).version("1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'f = "foo"; b = "bar"'} | ${'library("foo.bar", "${f}", "${b}").version("1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'version("baz", "1.2.3")'} | ${'library("foo.bar", "foo", "bar").versionRef("baz")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3', groupName: 'baz' }}
${'library("foo-bar_baz-qux", "foo", "bar")'} | ${'"${libs.foo.bar.baz.qux}:1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${''} | ${'library(["foo.bar", "foo", "bar"]).version("1.2.3")'} | ${null}
${''} | ${'library("foo", "bar", "baz", "qux"]).version("1.2.3")'} | ${null}
${''} | ${'library("foo", "bar", "baz", "qux").version("1.2.3")'} | ${null}
${''} | ${'library("foo.bar", "foo", "bar").version("1.2.3", "4.5.6")'} | ${null}
${''} | ${'library("foo", bar, "baz").version("1.2.3")'} | ${null}
${'group = "foo"; artifact="bar"'} | ${'library("foo.bar", group, artifact).version("1.2.3")'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
${'library("foo-bar_baz-qux", "foo", "bar")'} | ${'"${libs.foo.bar.baz.qux}:1.2.3"'} | ${{ depName: 'foo:bar', currentValue: '1.2.3' }}
`('$def | $str', ({ def, str, output }) => {
const input = [def, str].join('\n');
const { deps } = parseGradle(input);
Expand Down

0 comments on commit ff96c5f

Please sign in to comment.