1/*
2 * Copyright 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.tools.build.jetifier.processor.transform.pom
18
19import com.android.tools.build.jetifier.core.pom.PomDependency
20import com.android.tools.build.jetifier.core.pom.PomRewriteRule
21import com.google.common.truth.Truth
22import org.junit.Test
23
24class PomRewriteRuleTest {
25
26    @Test(expected = IllegalArgumentException::class)
27    fun versions_nullInRule_match() {
28        testVersionsMatch(
29            ruleVersion = null,
30            pomVersion = "27.0.0"
31        )
32    }
33
34    @Test fun versions_nullInPom_match() {
35        testVersionsMatch(
36            ruleVersion = "27.0.0",
37            pomVersion = null
38        )
39    }
40
41    @Test(expected = IllegalArgumentException::class)
42    fun versions_nullBoth_match() {
43        testVersionsMatch(
44            ruleVersion = null,
45            pomVersion = null
46        )
47    }
48
49    @Test fun versions_same_match() {
50        testVersionsMatch(
51            ruleVersion = "27.0.0",
52            pomVersion = "27.0.0"
53        )
54    }
55
56    @Test fun versions_same_strict_match() {
57        testVersionsMatch(
58            ruleVersion = "27.0.0",
59            pomVersion = "[27.0.0]"
60        )
61    }
62
63    @Test fun versions_different_noMatch() {
64        testVersionsDoNotMatch(
65            ruleVersion = "27.0.0",
66            pomVersion = "26.0.0"
67        )
68    }
69
70    @Test fun versions_release_match() {
71        testVersionsMatch(
72            ruleVersion = "27.0.0",
73            pomVersion = "release"
74        )
75    }
76
77    @Test fun versions_latest_match() {
78        testVersionsMatch(
79            ruleVersion = "27.0.0",
80            pomVersion = "latest"
81        )
82    }
83
84    @Test fun versions_range_rightOpen_match() {
85        testVersionsMatch(
86            ruleVersion = "27.0.0",
87            pomVersion = "(26.0.0,]"
88        )
89    }
90
91    @Test fun versions_range_rightOpen2_match() {
92        testVersionsMatch(
93            ruleVersion = "27.0.0",
94            pomVersion = "(26.0.0,)"
95        )
96    }
97
98    @Test fun versions_range_inclusive_match() {
99        testVersionsMatch(
100            ruleVersion = "27.0.0",
101            pomVersion = "[21.0.0,27.0.0]"
102        )
103    }
104
105    @Test fun versions_range_inclusive_noMatch() {
106        testVersionsDoNotMatch(
107            ruleVersion = "27.0.0",
108            pomVersion = "[21.0.0,26.0.0]"
109        )
110    }
111
112    @Test fun versions_range_exclusive_noMatch() {
113        testVersionsDoNotMatch(
114            ruleVersion = "27.0.0",
115            pomVersion = "[21.0.0,27.0.0)"
116        )
117    }
118
119    @Test fun versions_exclusionRange_match() {
120        testVersionsMatch(
121            ruleVersion = "27.0.0",
122            pomVersion = "(,26.0.0),(26.0.0,)"
123        )
124    }
125
126    private fun testVersionsMatch(ruleVersion: String?, pomVersion: String?) {
127        val from = PomDependency(groupId = "g", artifactId = "a", version = ruleVersion)
128        val pom = PomDependency(groupId = "g", artifactId = "a", version = pomVersion)
129
130        val rule = PomRewriteRule(from, from)
131
132        Truth.assertThat(rule.validateVersion(pom)).isTrue()
133    }
134
135    private fun testVersionsDoNotMatch(ruleVersion: String?, pomVersion: String?) {
136        val from = PomDependency(groupId = "g", artifactId = "a", version = ruleVersion)
137        val pom = PomDependency(groupId = "g", artifactId = "a", version = pomVersion)
138
139        val rule = PomRewriteRule(from, from)
140
141        Truth.assertThat(rule.validateVersion(pom)).isFalse()
142    }
143}