001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: */
018: package org.apache.ivy.core.module.id;
019:
020: import java.util.HashMap;
021: import java.util.Map;
022:
023: import org.apache.ivy.core.IvyPatternHelper;
024: import org.apache.ivy.plugins.matcher.ExactPatternMatcher;
025: import org.apache.ivy.plugins.matcher.MapMatcher;
026: import org.apache.ivy.plugins.matcher.PatternMatcher;
027: import org.apache.ivy.util.filter.Filter;
028: import org.apache.ivy.util.filter.NoFilter;
029:
030: import junit.framework.TestCase;
031:
032: public class ModuleRulesTest extends TestCase {
033: private ModuleRules rules;
034: private Object[] rule;
035:
036: protected void setUp() throws Exception {
037: rules = new ModuleRules();
038: rule = new Object[10];
039: for (int i = 0; i < rule.length; i++) {
040: rule[i] = "RULE_" + i;
041: }
042: }
043:
044: // tests
045:
046: public void testGetRule() throws Exception {
047: // fixture
048: rules.defineRule(mapMatcher().organization("apache").build(),
049: rule[0]);
050: rules.defineRule(mapMatcher().organization("other").build(),
051: rule[1]);
052:
053: // test
054: assertRule(rule[0], "apache#module1;1.5");
055: assertRule(rule[0], "apache#module2;3.0");
056: assertRule(rule[1], "other#module2;1.5");
057: assertRule(null, "unknown#module1;1.5");
058: }
059:
060: public void testGetRuleWithFilter() throws Exception {
061: // fixture
062: rules.defineRule(mapMatcher().organization("apache").build(),
063: rule[0]);
064: rules.defineRule(mapMatcher().module("module1").build(),
065: rule[1]);
066: rules.defineRule(mapMatcher().module("module2").build(),
067: rule[2]);
068:
069: // test
070: assertRule(rule[0], "apache#module1;1.5", acceptAll());
071: assertRule(rule[1], "apache#module1;1.5", acceptSecond());
072: assertModuleIdRule(rule[1], "apache#module1", acceptSecond());
073: assertRule(null, "apache#module1;1.5", acceptNone());
074: assertRule(rule[2], "apache#module2;1.5", acceptSecond());
075: assertRule(null, "unknown#module4;1.5", acceptAll());
076: }
077:
078: // test helpers
079:
080: private Filter acceptNone() {
081: return new Filter() {
082: public boolean accept(Object o) {
083: return false;
084: }
085:
086: public String toString() {
087: return "AcceptNone";
088: }
089: };
090: }
091:
092: private Filter acceptSecond() {
093: return new Filter() {
094: private int cpt;
095:
096: public boolean accept(Object o) {
097: return ++cpt == 2;
098: }
099:
100: public String toString() {
101: return "AcceptSecond";
102: }
103: };
104: }
105:
106: private Filter acceptAll() {
107: return NoFilter.INSTANCE;
108: }
109:
110: private void assertRule(Object rule, String mrid) {
111: Object ruleFound = rules.getRule(ModuleRevisionId.parse(mrid));
112: assertEquals("unexcepted rule for " + mrid, rule, ruleFound);
113: }
114:
115: private void assertRule(Object rule, String mrid, Filter filter) {
116: Object ruleFound = rules.getRule(ModuleRevisionId.parse(mrid),
117: filter);
118: assertEquals("unexcepted rule for " + mrid + " filtered by "
119: + filter, rule, ruleFound);
120: }
121:
122: private void assertModuleIdRule(Object rule, String mid,
123: Filter filter) {
124: Object ruleFound = rules.getRule(ModuleId.parse(mid), filter);
125: assertEquals("unexcepted rule for " + mid + " filtered by "
126: + filter, rule, ruleFound);
127: }
128:
129: private MridMatcherBuilder mapMatcher() {
130: return new MridMatcherBuilder();
131: }
132:
133: public class MridMatcherBuilder {
134: private Map attributes = new HashMap();
135: private PatternMatcher matcher = ExactPatternMatcher.INSTANCE;
136:
137: public MridMatcherBuilder organization(String org) {
138: attributes.put(IvyPatternHelper.ORGANISATION_KEY, org);
139: return this ;
140: }
141:
142: public MridMatcherBuilder module(String mod) {
143: attributes.put(IvyPatternHelper.MODULE_KEY, mod);
144: return this ;
145: }
146:
147: public MapMatcher build() {
148: return new MapMatcher(attributes, matcher);
149: }
150: }
151:
152: }
|