소스 검색

test coverage

Mariusz Sieroń 6 년 전
부모
커밋
268fbd30d4

+ 1 - 0
assira/lombok.config

@@ -0,0 +1 @@
+lombok.addLombokGeneratedAnnotation = true

+ 25 - 21
assira/pom.xml

@@ -26,36 +26,40 @@
                         <artifactId>jacoco-maven-plugin</artifactId>
                         <configuration>
                             <includes>
-                                <include>net/ranides/assira/annotations/Meta*</include>
-                                <include>net/ranides/assira/annotations/javac/**</include>
+                                <include>net/ranides/assira/collection/FlatCollection*</include>
+                                <include>net/ranides/assira/collection/Grid*</include>
 
-                                <include>net/ranides/assira/awt/ImageLoader*</include>
-                                <include>net/ranides/assira/awt/AWTInvoker*</include>
-
-                                <include>net/ranides/assira/collection/arrays/NativeArrayAccess*</include>
-                                <include>net/ranides/assira/collection/arrays/NativeArrayUtils*</include>
                                 <include>net/ranides/assira/collection/arrays/ArrayUtils*</include>
-                                <include>net/ranides/assira/collection/sets/Bitmask*</include>
-                                <include>net/ranides/assira/collection/maps/Cache*</include>
+                                <include>net/ranides/assira/collection/arrays/NativeArrayUtils*</include>
+
+                                <include>net/ranides/assira/collection/maps/GenericMap*</include>
+                                <include>net/ranides/assira/collection/maps/GenericHashMap*</include>
+                                <include>net/ranides/assira/collection/maps/Key*</include>
+                                <include>net/ranides/assira/collection/maps/MapBuilder*</include>
                                 <include>net/ranides/assira/collection/maps/MapUtils*</include>
-                                <include>net/ranides/assira/collection/maps/IntMapUtils*</include>
-                                <include>net/ranides/assira/collection/maps/IntMapCollectors*</include>
-                                <include>net/ranides/assira/collection/maps/MapCollectors*</include>
-                                <include>net/ranides/assira/collection/maps/MultiMap*</include>
-                                <include>net/ranides/assira/collection/query/**</include>
 
-                                <include>net/ranides/assira/events/EventObserver*</include>
+                                <include>net/ranides/assira/collection/sets/FlatSet*</include>
+
+                                <include>net/ranides/assira/collection/utils/*</include>
+
+                                <include>net/ranides/assira/index/*</include>
 
-                                <!-- <include>net/ranides/assira/io/PathUtils*</include>-->
+                                <include>net/ranides/assira/lexer/*</include>
+                                <include>net/ranides/assira/math/*</include>
 
-                                <include>net/ranides/assira/lexer/**</include>
+                                <include>net/ranides/assira/reflection/util/BeanUtils*</include>
+                                <include>net/ranides/assira/reflection/util/ClassUtils*</include>
+                                <include>net/ranides/assira/reflection/util/PackageScanner*</include>
+                                <include>net/ranides/assira/reflection/util/ReflectUtils*</include>
 
-                                <include>net/ranides/assira/math/Bitwise*</include>
+                                <include>net/ranides/assira/reflection/impl/bean/RBeanModel*</include>
+                                <include>net/ranides/assira/reflection/asm/*</include>
 
-                                <include>net/ranides/assira/text/LexicalCast*</include>
+                                <include>net/ranides/assira/reflection/text/ASCII*</include>
 
-                                <include>net/ranides/assira/xml/XMLQuery*</include>
-                                <include>net/ranides/assira/xml/XMLWriter*</include>
+                                <include>net/ranides/assira/time/*</include>
+                                <include>net/ranides/assira/trace/LoggerUtils*</include>
+                                <include>net/ranides/assira/trace/TraceUtils*</include>
                             </includes>
                         </configuration>
                     </plugin>

+ 6 - 1
assira/src/main/java/net/ranides/assira/collection/iterators/IntIteratorUtils.java

@@ -16,6 +16,7 @@ import java.util.stream.IntStream;
 import java.util.stream.StreamSupport;
 import net.ranides.assira.collection.IntCollection;
 import net.ranides.assira.collection.IntComparator;
+import net.ranides.assira.functional.EachFunction;
 import net.ranides.assira.functional.IntBiPredicate;
 
 /**
@@ -117,7 +118,7 @@ public final class IntIteratorUtils {
     public static <T> ListIterator<T> map(IntListIterator iterator, IntFunction<T> function) {
         return new ListAdapter<>(iterator, function);
     }
-    
+
     public static IntListIterator map(IntListIterator iterator, IntUnaryOperator function) {
         return new IntListAdapter(iterator, function);
     }
@@ -129,6 +130,10 @@ public final class IntIteratorUtils {
     public static IntStream stream(IntIterator iterator) {
 		return StreamSupport.intStream(new IntSpliterator(iterator), false);
 	}
+
+    public static IntIterator concat(IntIterator... iterators) {
+        return flat(Arrays.asList(iterators).iterator());
+    }
     
     public static <C extends IntCollection> C collect(IntIterator iterator, C target) {
         while(iterator.hasNext()) {

+ 3 - 0
assira/src/main/java/net/ranides/assira/collection/lists/ImmutableList.java

@@ -12,6 +12,7 @@ public class ImmutableList<T> extends AbstractList<T> {
         this.items = collection.toArray();
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public T get(int index) {
         return (T)items[index];
@@ -53,6 +54,7 @@ public class ImmutableList<T> extends AbstractList<T> {
             return items.length;
         }
 
+        @SuppressWarnings("unchecked")
         @Override
         protected T get(int index) {
             return (T)items[index];
@@ -68,6 +70,7 @@ public class ImmutableList<T> extends AbstractList<T> {
             return index < items.length;
         }
 
+        @SuppressWarnings("unchecked")
         @Override
         public T next() {
             return (T)items[index++];

+ 51 - 21
assira/src/main/java/net/ranides/assira/reflection/ResolvePattern.java

@@ -192,24 +192,29 @@ public class ResolvePattern implements Serializable {
         ARRAY(){
             @Override
             public boolean matches(Object that) {
-                return that!=null && that.getClass().isArray();
+                return that != null && that.getClass().isArray();
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
                 return that.attributes().has(IAttribute.ARRAY);
             }
+
             @Override
             public Object get(ResolveStatus _s, Object that, String name) {
                 return NativeArray.wrap(that).get(Integer.parseInt(name));
             }
+
             @Override
             public void set(ResolveStatus _s, Object that, String name, Object value) {
                 NativeArray.wrap(that).set(Integer.parseInt(name), value);
             }
+
             @Override
             public Object replace(ResolveStatus _s, Object that, String name, Object value) {
                 return NativeArray.wrap(that).replace(Integer.parseInt(name), value);
             }
+
             @Override
             public IClass<?> type(ResolveStatus _s, IClass<?> that, String name) {
                 return that.component();
@@ -220,28 +225,33 @@ public class ResolvePattern implements Serializable {
             public boolean matches(Object that) {
                 return that instanceof List<?>;
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
-                return that!=IClass.NULL && RCompareUtils.isRawSuper(IClass.typeinfo(List.class), that);
+                return that != IClass.NULL && RCompareUtils.isRawSuper(IClass.typeinfo(List.class), that);
             }
+
             @Override
             public Object get(ResolveStatus _s, Object that, String name) {
-                return ((List<?>)that).get(Integer.parseInt(name));
+                return ((List<?>) that).get(Integer.parseInt(name));
             }
+
             @Override
             @SuppressWarnings("unchecked")
             public void set(ResolveStatus _s, Object that, String name, Object value) {
-                ((List<Object>)that).set(Integer.parseInt(name), value);
+                ((List<Object>) that).set(Integer.parseInt(name), value);
             }
+
             @Override
             @SuppressWarnings("unchecked")
             public Object replace(ResolveStatus _s, Object that, String name, Object value) {
-                List<Object> list = (List<Object>)that;
+                List<Object> list = (List<Object>) that;
                 int index = Integer.parseInt(name);
                 Object prv = list.get(index);
                 list.set(index, value);
                 return prv;
             }
+
             @Override
             public IClass<?> type(ResolveStatus _s, IClass<?> that, String name) {
                 return that.params().get(0);
@@ -252,27 +262,33 @@ public class ResolvePattern implements Serializable {
             public boolean matches(Object that) {
                 return that instanceof Map<?,?>;
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
                 return that!=IClass.NULL && RCompareUtils.isRawSuper(IClass.typeinfo(Map.class), that);
             }
+
             @Override
+            @SuppressWarnings("unchecked")
             public Object get(ResolveStatus status, Object that, String name) {
                 if(!((Map<String,Object>)that).containsKey(name)) {
                     status.error = true;
                 }
                 return ((Map<?,?>)that).get(name);
             }
+
             @Override
             @SuppressWarnings("unchecked")
             public void set(ResolveStatus _s, Object that, String name, Object value) {
                 ((Map<String,Object>)that).put(name, value);
             }
+
             @Override
             @SuppressWarnings("unchecked")
             public Object replace(ResolveStatus _s, Object that, String name, Object value) {
                 return ((Map<String,Object>)that).put(name, value);
             }
+
             @Override
             public IClass<?> type(ResolveStatus _s, IClass<?> that, String name) {
                 return that.params().get(1);
@@ -283,26 +299,31 @@ public class ResolvePattern implements Serializable {
             public boolean matches(Object that) {
                 return that instanceof Matcher;
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
-                return that!=IClass.NULL && IClass.typeinfo(Matcher.class).isSuper(that);
+                return that != IClass.NULL && IClass.typeinfo(Matcher.class).isSuper(that);
             }
+
             @Override
             public Object get(ResolveStatus _s, Object that, String name) {
-                if(StringTraits.isNumber(name)) {
-                    return ((Matcher)that).group(Integer.parseInt(name));
+                if (StringTraits.isNumber(name)) {
+                    return ((Matcher) that).group(Integer.parseInt(name));
                 } else {
-                    return ((Matcher)that).group(name);
+                    return ((Matcher) that).group(name);
                 }
             }
+
             @Override
             public void set(ResolveStatus _s, Object that, String name, Object value) {
                 throw new UnsupportedOperationException("Matcher is immutable.");
             }
+
             @Override
             public Object replace(ResolveStatus _s, Object that, String name, Object value) {
                 throw new UnsupportedOperationException("Matcher is immutable.");
             }
+
             @Override
             public IClass<?> type(ResolveStatus _s, IClass<?> that, String name) {
                 return IClass.typeinfo(String.class);
@@ -313,22 +334,27 @@ public class ResolvePattern implements Serializable {
             public boolean matches(Object that) {
                 return that instanceof CharSequence;
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
-                return that!=IClass.NULL && IClass.typeinfo(CharSequence.class).isSuper(that);
+                return that != IClass.NULL && IClass.typeinfo(CharSequence.class).isSuper(that);
             }
+
             @Override
             public Object get(ResolveStatus _s, Object that, String name) {
-                return ((CharSequence)that).charAt(Integer.parseInt(name));
+                return ((CharSequence) that).charAt(Integer.parseInt(name));
             }
+
             @Override
             public void set(ResolveStatus _s, Object that, String name, Object value) {
                 throw new UnsupportedOperationException("CharSequence is immutable.");
             }
+
             @Override
             public Object replace(ResolveStatus _s, Object that, String name, Object value) {
                 throw new UnsupportedOperationException("CharSequence is immutable.");
             }
+
             @Override
             public IClass<?> type(ResolveStatus _s, IClass<?> that, String name) {
                 return IClass.typeinfo(char.class);
@@ -339,19 +365,21 @@ public class ResolvePattern implements Serializable {
             public boolean matches(Object that) {
                 return that != null;
             }
+
             @Override
             public boolean matchesType(IClass<?> that) {
-                return that!=IClass.NULL;
+                return that != IClass.NULL;
             }
+
             @Override
             public Object get(ResolveStatus status, Object that, String name) {
                 BeanModel model = BeanModel.typefor(that);
                 Object v = model.fluent(that).get(name);
-                if(v != null) {
+                if (v != null) {
                     return v;
                 }
                 Iterator<IField> f = field(model, name);
-                if(f.hasNext()) {
+                if (f.hasNext()) {
                     return f.next().accessible().get(that);
                 }
                 status.error = true;
@@ -361,42 +389,44 @@ public class ResolvePattern implements Serializable {
             private Iterator<IField> field(BeanModel model, String name) {
                 return model.type().fields().require(IAttribute.ANY).require(name).iterator();
             }
-            
+
             @Override
             public void set(ResolveStatus status, Object that, String name, Object value) {
                 BeanModel model = BeanModel.typefor(that);
-                if(model.properties().containsKey(name)) {
+                if (model.properties().containsKey(name)) {
                     model.property(name).get().set(that, value);
                     return;
                 }
                 Iterator<IField> f = field(model, name);
-                if(f.hasNext()) {
+                if (f.hasNext()) {
                     f.next().accessible().set(that, value);
                     return;
                 }
                 status.error = true;
             }
+
             @Override
             public Object replace(ResolveStatus status, Object that, String name, Object value) {
                 BeanModel model = BeanModel.typefor(that);
-                if(model.properties().containsKey(name)) {
+                if (model.properties().containsKey(name)) {
                     return model.property(name).get().replace(that, value);
                 }
                 Iterator<IField> f = field(model, name);
-                if(f.hasNext()) {
+                if (f.hasNext()) {
                     return f.next().replace(that, value);
                 }
                 status.error = true;
                 return null;
             }
+
             @Override
             public IClass<?> type(ResolveStatus status, IClass<?> that, String name) {
                 BeanModel model = BeanModel.typeinfo(that);
-                if(model.properties().containsKey(name)) {
+                if (model.properties().containsKey(name)) {
                     return model.property(name).get().type();
                 }
                 Iterator<IField> f = field(model, name);
-                if(f.hasNext()) {
+                if (f.hasNext()) {
                     return f.next().type();
                 }
                 status.error = true;

+ 9 - 4
assira/src/test/java/net/ranides/assira/collection/iterators/IntIteratorUtilsTest.java

@@ -6,10 +6,8 @@
  */
 package net.ranides.assira.collection.iterators;
 
-import java.util.Arrays;
-import java.util.Iterator;
-import java.util.ListIterator;
-import java.util.NoSuchElementException;
+import java.util.*;
+
 import net.ranides.assira.ContractTesters;
 import net.ranides.assira.collection.arrays.IntArrays;
 import net.ranides.assira.collection.lists.IntArrayList;
@@ -368,5 +366,12 @@ public class IntIteratorUtilsTest {
         assertEquals(5, IntIteratorUtils.next(i, 8));
         assertFalse(i.hasNext());
     }
+
+    @Test
+    public void testRemove() {
+        IntList list = new IntArrayList(new int[]{1,2,3,4,5,6,7,8,9});
+        IntIteratorUtils.remove(list.iterator(), v -> v%2==0);
+        assertEquals(IntArrays.asList(1,3,5,7,9), list);
+    }
 	
 }

+ 7 - 1
assira/src/test/java/net/ranides/assira/collection/iterators/IteratorUtilsTest.java

@@ -106,7 +106,13 @@ public class IteratorUtilsTest {
             .function(new IteratorParams(), this::upper2lower)
             .run();
 	}
-    
+
+    @Test
+    public void testRemove() {
+        List<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
+        IteratorUtils.remove(list.iterator(), v -> v%2==0);
+        assertEquals(Arrays.asList(1,3,5,7,9), list);
+    }
 
     private ListIterator<String> upper2lower(IteratorParams p) {
         ListIterator<String> iterator = TCollections.UPPER.range(p.size)