blob: 1db3f319b2504adc57807d1f50b2fd9a915456dc [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.intellij.patterns;
import com.intellij.openapi.util.Key;
import com.intellij.util.ProcessingContext;
import junit.framework.TestCase;
import java.util.Arrays;
import static com.intellij.patterns.StandardPatterns.*;
/**
* @author peter
*/
public class StandardPatternsTest extends TestCase {
public void testNull() {
assertTrue(object().isNull().accepts(null));
assertFalse(object().isNull().accepts(""));
assertFalse(string().isNull().accepts(""));
assertTrue(string().isNull().accepts(null));
}
private static void checkPrefixSuffix(final ElementPattern pattern) {
assertFalse(pattern.accepts(""));
assertFalse(pattern.accepts("abcd"));
assertTrue(pattern.accepts("abc"));
assertTrue(pattern.accepts("abcdabc"));
assertFalse(pattern.accepts("abcdab"));
}
public void testPrefixSuffix() {
checkPrefixSuffix(string().endsWith("abc").startsWith("abc"));
}
public void testAnd1() {
checkPrefixSuffix(and(string().endsWith("abc"), string().startsWith("abc")));
}
public void testAnd2() {
checkPrefixSuffix(string().endsWith("abc").and(string().startsWith("abc")));
}
public void testOr1() {
checkOr(or(string().endsWith("abc"), string().startsWith("abc")));
}
public void testNot1() {
final ElementPattern pattern = not(or(string().endsWith("abc"), string().startsWith("abc")));
assertTrue(pattern.accepts(""));
assertTrue(pattern.accepts("xxx"));
assertFalse(pattern.accepts("abcd"));
assertTrue(pattern.accepts("dabcd"));
assertFalse(pattern.accepts("abc"));
assertFalse(pattern.accepts("abcdabc"));
assertFalse(pattern.accepts("abcdab"));
}
private static void checkOr(final ElementPattern filterFactory) {
assertFalse(filterFactory.accepts(""));
assertFalse(filterFactory.accepts("xxx"));
assertTrue(filterFactory.accepts("abcd"));
assertFalse(filterFactory.accepts("dabcd"));
assertTrue(filterFactory.accepts("abc"));
assertTrue(filterFactory.accepts("abcdabc"));
assertTrue(filterFactory.accepts("abcdab"));
}
public void testEquals() {
final Object foo = new Object();
final Object bar = new Object();
ElementPattern objectPattern = object().equalTo(foo);
assertTrue(objectPattern.accepts(foo));
assertFalse(objectPattern.accepts(bar));
ElementPattern stringPattern = string().equalTo("foo");
assertTrue(stringPattern.accepts("foo"));
assertFalse(stringPattern.accepts("bar"));
}
public void testAll() {
ElementPattern pattern = collection(String.class).all(string().startsWith("abc"));
assertTrue(pattern.accepts(Arrays.asList("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc", "abcd")));
assertFalse(pattern.accepts(Arrays.asList("abc", "bcd")));
}
public void testAtLeastOne() {
ElementPattern pattern = collection(String.class).atLeastOne(string().startsWith("abc"));
assertTrue(pattern.accepts(Arrays.asList("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc", "abcd")));
assertTrue(pattern.accepts(Arrays.asList("abc", "bcd")));
assertFalse(pattern.accepts(Arrays.asList("bc", "bcd")));
assertTrue(pattern.accepts(Arrays.asList("bc", "abc")));
}
public void testFilter() {
ElementPattern pattern =
collection(String.class).filter(string().endsWith("x"), collection(String.class).all(string().startsWith("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc", "abcd")));
assertFalse(pattern.accepts(Arrays.asList("bcx", "bcd")));
assertTrue(pattern.accepts(Arrays.asList("abcx", "abc")));
}
public void testFirst() {
ElementPattern pattern = collection(String.class).first(string().startsWith("abc"));
assertFalse(pattern.accepts(Arrays.<String>asList()));
assertTrue(pattern.accepts(Arrays.asList("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc", "abcd")));
assertTrue(pattern.accepts(Arrays.asList("abc", "bcd")));
assertFalse(pattern.accepts(Arrays.asList("bc", "bcd")));
assertFalse(pattern.accepts(Arrays.asList("bc", "abc")));
}
public void testLast() {
//collection(String.class)
ElementPattern pattern = collection(String.class).last(string().startsWith("abc"));
assertFalse(pattern.accepts(Arrays.<String>asList()));
assertTrue(pattern.accepts(Arrays.asList("abc")));
assertTrue(pattern.accepts(Arrays.asList("abc", "abcd")));
assertFalse(pattern.accepts(Arrays.asList("abc", "bcd")));
assertFalse(pattern.accepts(Arrays.asList("bc", "bcd")));
assertTrue(pattern.accepts(Arrays.asList("bc", "abc")));
}
public void testSize() {
final CollectionPattern<String> filter = collection(String.class);
assertTrue(filter.size(0).accepts(Arrays.<String>asList()));
assertFalse(filter.size(0).accepts(Arrays.asList("abc")));
assertFalse(filter.size(0).accepts(Arrays.asList("abc", "abc")));
assertFalse(filter.size(1).accepts(Arrays.<String>asList()));
assertTrue(filter.size(1).accepts(Arrays.asList("abc")));
assertFalse(filter.size(1).accepts(Arrays.asList("abc", "abc")));
assertFalse(filter.size(2).accepts(Arrays.<String>asList()));
assertFalse(filter.size(2).accepts(Arrays.asList("abc")));
assertTrue(filter.size(2).accepts(Arrays.asList("abc", "abc")));
}
public void testEmpty() {
final CollectionPattern<String> filter = collection(String.class);
assertTrue(filter.empty().accepts(Arrays.<String>asList()));
assertFalse(filter.empty().accepts(Arrays.asList("abc")));
assertFalse(filter.empty().accepts(Arrays.asList("abc", "abc")));
assertFalse(not(filter.empty()).accepts(Arrays.<String>asList()));
assertTrue(not(filter.empty()).accepts(Arrays.asList("abc")));
assertTrue(not(filter.empty()).accepts(Arrays.asList("abc", "abc")));
}
public void testSave() {
Key<String> key = Key.create("abc");
final ProcessingContext context = new ProcessingContext();
assertFalse(string().contains("abc").save(key).accepts(null));
assertNull(context.get(key));
assertFalse(string().contains("abc").save(key).accepts("def"));
assertNull(context.get(key));
final String s = "defabcdef";
assertTrue(string().contains("abc").save(key).accepts(s, context));
assertSame(s, context.get(key));
}
}