001 /* 002 * Copyright 2004-2005 the original author or authors. 003 */ 004 package org.springframework.core.closure; 005 006 import java.util.ArrayList; 007 import java.util.List; 008 009 import junit.framework.TestCase; 010 011 import org.springframework.rules.closure.support.Block; 012 import org.springframework.rules.closure.support.IteratorTemplate; 013 import org.springframework.rules.constraint.Constraint; 014 import org.springframework.rules.closure.ElementGenerator; 015 016 /** 017 * @author Keith Donald 018 */ 019 public class ClosureTests extends TestCase { 020 public void testIteratorProcessTemplateRunOnce() { 021 List collection = new ArrayList(); 022 collection.add("Item 1"); 023 collection.add("Item 2"); 024 collection.add("Item 3"); 025 collection.add("Item 4"); 026 collection.add("Item 5"); 027 IteratorTemplate template = new IteratorTemplate(collection.iterator()); 028 assertTrue(template.allTrue(new Constraint() { 029 public boolean test(Object o) { 030 return ((String)o).startsWith("Item"); 031 } 032 })); 033 try { 034 assertEquals(false, template.allTrue(new Constraint() { 035 public boolean test(Object o) { 036 return ((String)o).startsWith("Element"); 037 } 038 })); 039 fail("Should have failed"); 040 } 041 catch (UnsupportedOperationException e) { 042 043 } 044 } 045 046 public void testIteratorProcessTemplateRunMultiple() { 047 List collection = new ArrayList(); 048 collection.add("Item 1"); 049 collection.add("Item 2"); 050 collection.add("Item 3"); 051 collection.add("Item 4"); 052 collection.add("Item 5"); 053 IteratorTemplate template = new IteratorTemplate(collection); 054 assertTrue(template.allTrue(new Constraint() { 055 public boolean test(Object o) { 056 return ((String)o).startsWith("Item"); 057 } 058 })); 059 assertEquals(false, template.allTrue(new Constraint() { 060 public boolean test(Object o) { 061 return ((String)o).startsWith("Element"); 062 } 063 })); 064 } 065 066 public void testAnyTrue() { 067 List collection = new ArrayList(); 068 collection.add("Item 1"); 069 collection.add("Item 2"); 070 collection.add("Item 3"); 071 collection.add("Item 4"); 072 collection.add("Item 5"); 073 IteratorTemplate template = new IteratorTemplate(collection); 074 assertTrue(template.anyTrue(new Constraint() { 075 public boolean test(Object o) { 076 return ((String)o).startsWith("Item 5"); 077 } 078 })); 079 assertEquals(false, template.anyTrue(new Constraint() { 080 public boolean test(Object o) { 081 return ((String)o).startsWith("Element"); 082 } 083 })); 084 } 085 086 public void testFindFirst() { 087 List collection = new ArrayList(); 088 collection.add("Item 1"); 089 collection.add("Item 2"); 090 collection.add("Item 3"); 091 collection.add("Item 4"); 092 collection.add("Item 5"); 093 IteratorTemplate template = new IteratorTemplate(collection); 094 assertEquals("Item 4", template.findFirst(new Constraint() { 095 public boolean test(Object o) { 096 return ((String)o).startsWith("Item 4"); 097 } 098 })); 099 assertEquals(null, template.findFirst(new Constraint() { 100 public boolean test(Object o) { 101 return ((String)o).startsWith("Element"); 102 } 103 })); 104 } 105 106 public void testFindAll() { 107 List collection = new ArrayList(); 108 collection.add("Item 1"); 109 collection.add("Item 2"); 110 collection.add("Item 3"); 111 collection.add("Item 4"); 112 collection.add("Item 5"); 113 IteratorTemplate template = new IteratorTemplate(collection); 114 ElementGenerator finder = template.findAll(new Constraint() { 115 public boolean test(Object o) { 116 return ((String)o).startsWith("Item 4"); 117 } 118 }); 119 finder.run(new Block() { 120 protected void handle(Object o) { 121 assertEquals("Item 4", o); 122 } 123 }); 124 finder = template.findAll(new Constraint() { 125 public boolean test(Object o) { 126 return ((String)o).startsWith("Element"); 127 } 128 }); 129 finder.run(new Block() { 130 protected void handle(Object o) { 131 fail("Should not be called"); 132 } 133 }); 134 } 135 136 // using a simple int instead of a ValueHolder to have no extra dependencies. 137 int runUntilCounter; 138 139 public void testRunUntil() { 140 List collection = new ArrayList(); 141 collection.add("Item 1"); 142 collection.add("Item 2"); 143 collection.add("Item 3"); 144 collection.add("Item 4"); 145 collection.add("Item 5"); 146 IteratorTemplate template = new IteratorTemplate(collection); 147 runUntilCounter = 0; 148 template.runUntil(new Block() { 149 protected void handle(Object o) { 150 runUntilCounter++; 151 } 152 }, new Constraint() { 153 public boolean test(Object o) { 154 return o.equals("Item 4"); 155 } 156 }); 157 assertEquals(3, runUntilCounter); 158 } 159 }