diff --git a/org.springframework.web/src/test/java/org/springframework/beans/BeanWithObjectProperty.java b/org.springframework.web/src/test/java/org/springframework/beans/BeanWithObjectProperty.java new file mode 100644 index 00000000000..bb5e71f5cd0 --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/BeanWithObjectProperty.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2005 the original author or authors. + * + * 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 org.springframework.beans; + +/** + * @author Juergen Hoeller + * @since 17.08.2004 + */ +public class BeanWithObjectProperty { + + private Object object; + + public Object getObject() { + return object; + } + + public void setObject(Object object) { + this.object = object; + } + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/Colour.java b/org.springframework.web/src/test/java/org/springframework/beans/Colour.java new file mode 100644 index 00000000000..60dc333e0b4 --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/Colour.java @@ -0,0 +1,35 @@ +/* + * Copyright 2002-2007 the original author or authors. + * + * 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 org.springframework.beans; + +import org.springframework.core.enums.ShortCodedLabeledEnum; + +/** + * @author Rob Harrop + */ +public class Colour extends ShortCodedLabeledEnum { + + public static final Colour RED = new Colour(0, "RED"); + public static final Colour BLUE = new Colour(1, "BLUE"); + public static final Colour GREEN = new Colour(2, "GREEN"); + public static final Colour PURPLE = new Colour(3, "PURPLE"); + + private Colour(int code, String label) { + super(code, label); + } + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/DerivedTestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/DerivedTestBean.java new file mode 100644 index 00000000000..2bb41a9d5b6 --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/DerivedTestBean.java @@ -0,0 +1,85 @@ +/* + * Copyright 2002-2007 the original author or authors. + * + * 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 org.springframework.beans; + +import java.io.Serializable; + +import org.springframework.beans.factory.BeanNameAware; +import org.springframework.beans.factory.DisposableBean; + +/** + * @author Juergen Hoeller + * @since 21.08.2003 + */ +public class DerivedTestBean extends TestBean implements Serializable, BeanNameAware, DisposableBean { + + private String beanName; + + private boolean initialized; + + private boolean destroyed; + + + public DerivedTestBean() { + } + + public DerivedTestBean(String[] names) { + if (names == null || names.length < 2) { + throw new IllegalArgumentException("Invalid names array"); + } + setName(names[0]); + setBeanName(names[1]); + } + + public static DerivedTestBean create(String[] names) { + return new DerivedTestBean(names); + } + + + public void setBeanName(String beanName) { + if (this.beanName == null || beanName == null) { + this.beanName = beanName; + } + } + + public String getBeanName() { + return beanName; + } + + public void setSpouseRef(String name) { + setSpouse(new TestBean(name)); + } + + + public void initialize() { + this.initialized = true; + } + + public boolean wasInitialized() { + return initialized; + } + + + public void destroy() { + this.destroyed = true; + } + + public boolean wasDestroyed() { + return destroyed; + } + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/FieldAccessBean.java b/org.springframework.web/src/test/java/org/springframework/beans/FieldAccessBean.java new file mode 100644 index 00000000000..61f911902c7 --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/FieldAccessBean.java @@ -0,0 +1,44 @@ +/* + * Copyright 2002-2006 the original author or authors. + * + * 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 org.springframework.beans; + +/** + * @author Juergen Hoeller + * @since 07.03.2006 + */ +public class FieldAccessBean { + + public String name; + + protected int age; + + private TestBean spouse; + + + public String getName() { + return name; + } + + public int getAge() { + return age; + } + + public TestBean getSpouse() { + return spouse; + } + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/INestedTestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/INestedTestBean.java new file mode 100644 index 00000000000..7d87547b5f7 --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/INestedTestBean.java @@ -0,0 +1,23 @@ +/* + * Copyright 2002-2005 the original author or authors. + * + * 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 org.springframework.beans; + +public interface INestedTestBean { + + public String getCompany(); + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/IOther.java b/org.springframework.web/src/test/java/org/springframework/beans/IOther.java new file mode 100644 index 00000000000..797486ec44e --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/IOther.java @@ -0,0 +1,24 @@ + +/* + * Copyright 2002-2005 the original author or authors. + * + * 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 org.springframework.beans; + +public interface IOther { + + void absquatulate(); + +} \ No newline at end of file diff --git a/org.springframework.web/src/test/java/org/springframework/beans/ITestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/ITestBean.java new file mode 100644 index 00000000000..cdf5ef510dd --- /dev/null +++ b/org.springframework.web/src/test/java/org/springframework/beans/ITestBean.java @@ -0,0 +1,71 @@ +/* + * Copyright 2002-2007 the original author or authors. + * + * 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 org.springframework.beans; + +import java.io.IOException; + +/** + * Interface used for {@link org.springframework.beans.TestBean}. + * + *
Two methods are the same as on Person, but if this
+ * extends person it breaks quite a few tests..
+ *
+ * @author Rod Johnson
+ * @author Juergen Hoeller
+ */
+public interface ITestBean {
+
+ int getAge();
+
+ void setAge(int age);
+
+ String getName();
+
+ void setName(String name);
+
+ ITestBean getSpouse();
+
+ void setSpouse(ITestBean spouse);
+
+ ITestBean[] getSpouses();
+
+ String[] getStringArray();
+
+ void setStringArray(String[] stringArray);
+
+ /**
+ * Throws a given (non-null) exception.
+ */
+ void exceptional(Throwable t) throws Throwable;
+
+ Object returnsThis();
+
+ INestedTestBean getDoctor();
+
+ INestedTestBean getLawyer();
+
+ IndexedTestBean getNestedIndexedBean();
+
+ /**
+ * Increment the age by one.
+ * @return the previous age
+ */
+ int haveBirthday();
+
+ void unreliableFileOperation() throws IOException;
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/beans/IndexedTestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/IndexedTestBean.java
new file mode 100644
index 00000000000..ddb091770ee
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/beans/IndexedTestBean.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2002-2006 the original author or authors.
+ *
+ * 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 org.springframework.beans;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.SortedMap;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+/**
+ * @author Juergen Hoeller
+ * @since 11.11.2003
+ */
+public class IndexedTestBean {
+
+ private TestBean[] array;
+
+ private Collection collection;
+
+ private List list;
+
+ private Set set;
+
+ private SortedSet sortedSet;
+
+ private Map map;
+
+ private SortedMap sortedMap;
+
+
+ public IndexedTestBean() {
+ this(true);
+ }
+
+ public IndexedTestBean(boolean populate) {
+ if (populate) {
+ populate();
+ }
+ }
+
+ public void populate() {
+ TestBean tb0 = new TestBean("name0", 0);
+ TestBean tb1 = new TestBean("name1", 0);
+ TestBean tb2 = new TestBean("name2", 0);
+ TestBean tb3 = new TestBean("name3", 0);
+ TestBean tb4 = new TestBean("name4", 0);
+ TestBean tb5 = new TestBean("name5", 0);
+ TestBean tb6 = new TestBean("name6", 0);
+ TestBean tb7 = new TestBean("name7", 0);
+ TestBean tbX = new TestBean("nameX", 0);
+ TestBean tbY = new TestBean("nameY", 0);
+ this.array = new TestBean[] {tb0, tb1};
+ this.list = new ArrayList();
+ this.list.add(tb2);
+ this.list.add(tb3);
+ this.set = new TreeSet();
+ this.set.add(tb6);
+ this.set.add(tb7);
+ this.map = new HashMap();
+ this.map.put("key1", tb4);
+ this.map.put("key2", tb5);
+ this.map.put("key.3", tb5);
+ List list = new ArrayList();
+ list.add(tbX);
+ list.add(tbY);
+ this.map.put("key4", list);
+ }
+
+
+ public TestBean[] getArray() {
+ return array;
+ }
+
+ public void setArray(TestBean[] array) {
+ this.array = array;
+ }
+
+ public Collection getCollection() {
+ return collection;
+ }
+
+ public void setCollection(Collection collection) {
+ this.collection = collection;
+ }
+
+ public List getList() {
+ return list;
+ }
+
+ public void setList(List list) {
+ this.list = list;
+ }
+
+ public Set getSet() {
+ return set;
+ }
+
+ public void setSet(Set set) {
+ this.set = set;
+ }
+
+ public SortedSet getSortedSet() {
+ return sortedSet;
+ }
+
+ public void setSortedSet(SortedSet sortedSet) {
+ this.sortedSet = sortedSet;
+ }
+
+ public Map getMap() {
+ return map;
+ }
+
+ public void setMap(Map map) {
+ this.map = map;
+ }
+
+ public SortedMap getSortedMap() {
+ return sortedMap;
+ }
+
+ public void setSortedMap(SortedMap sortedMap) {
+ this.sortedMap = sortedMap;
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/beans/NestedTestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/NestedTestBean.java
new file mode 100644
index 00000000000..a06e15d150b
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/beans/NestedTestBean.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2002-2005 the original author or authors.
+ *
+ * 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 org.springframework.beans;
+
+/**
+ * Simple nested test bean used for testing bean factories, AOP framework etc.
+ *
+ * @author Trevor D. Cook
+ * @since 30.09.2003
+ */
+public class NestedTestBean implements INestedTestBean {
+
+ private String company = "";
+
+ public NestedTestBean() {
+ }
+
+ public NestedTestBean(String company) {
+ setCompany(company);
+ }
+
+ public void setCompany(String company) {
+ this.company = (company != null ? company : "");
+ }
+
+ public String getCompany() {
+ return company;
+ }
+
+ public boolean equals(Object obj) {
+ if (!(obj instanceof NestedTestBean)) {
+ return false;
+ }
+ NestedTestBean ntb = (NestedTestBean) obj;
+ return this.company.equals(ntb.company);
+ }
+
+ public int hashCode() {
+ return this.company.hashCode();
+ }
+
+ public String toString() {
+ return "NestedTestBean: " + this.company;
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/beans/Person.java b/org.springframework.web/src/test/java/org/springframework/beans/Person.java
new file mode 100644
index 00000000000..3ebce5e2ea0
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/beans/Person.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2002-2005 the original author or authors.
+ *
+ * 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 org.springframework.beans;
+
+/**
+ *
+ * @author Rod Johnson
+ */
+public interface Person {
+
+ String getName();
+ void setName(String name);
+ int getAge();
+ void setAge(int i);
+
+ /**
+ * Test for non-property method matching.
+ * If the parameter is a Throwable, it will be thrown rather than
+ * returned.
+ */
+ Object echo(Object o) throws Throwable;
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/beans/SerializablePerson.java b/org.springframework.web/src/test/java/org/springframework/beans/SerializablePerson.java
new file mode 100644
index 00000000000..36351352aab
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/beans/SerializablePerson.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2002-2005 the original author or authors.
+ *
+ * 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 org.springframework.beans;
+
+import java.io.Serializable;
+
+import org.springframework.util.ObjectUtils;
+
+/**
+ * Serializable implementation of the Person interface.
+ *
+ * @author Rod Johnson
+ */
+public class SerializablePerson implements Person, Serializable {
+
+ private String name;
+ private int age;
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Object echo(Object o) throws Throwable {
+ if (o instanceof Throwable) {
+ throw (Throwable) o;
+ }
+ return o;
+ }
+
+ public boolean equals(Object other) {
+ if (!(other instanceof SerializablePerson)) {
+ return false;
+ }
+ SerializablePerson p = (SerializablePerson) other;
+ return p.age == age && ObjectUtils.nullSafeEquals(name, p.name);
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/beans/TestBean.java b/org.springframework.web/src/test/java/org/springframework/beans/TestBean.java
new file mode 100644
index 00000000000..7842bbfeacf
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/beans/TestBean.java
@@ -0,0 +1,437 @@
+/*
+ * Copyright 2002-2008 the original author or authors.
+ *
+ * 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 org.springframework.beans;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.BeanFactoryAware;
+import org.springframework.beans.factory.BeanNameAware;
+import org.springframework.util.ObjectUtils;
+
+/**
+ * Simple test bean used for testing bean factories, the AOP framework etc.
+ *
+ * @author Rod Johnson
+ * @author Juergen Hoeller
+ * @since 15 April 2001
+ */
+public class TestBean implements BeanNameAware, BeanFactoryAware, ITestBean, IOther, Comparable {
+
+ private String beanName;
+
+ private String country;
+
+ private BeanFactory beanFactory;
+
+ private boolean postProcessed;
+
+ private String name;
+
+ private String sex;
+
+ private int age;
+
+ private boolean jedi;
+
+ private ITestBean[] spouses;
+
+ private String touchy;
+
+ private String[] stringArray;
+
+ private Integer[] someIntegerArray;
+
+ private Date date = new Date();
+
+ private Float myFloat = new Float(0.0);
+
+ private Collection friends = new LinkedList();
+
+ private Set someSet = new HashSet();
+
+ private Map someMap = new HashMap();
+
+ private List someList = new ArrayList();
+
+ private Properties someProperties = new Properties();
+
+ private INestedTestBean doctor = new NestedTestBean();
+
+ private INestedTestBean lawyer = new NestedTestBean();
+
+ private IndexedTestBean nestedIndexedBean;
+
+ private boolean destroyed;
+
+ private Number someNumber;
+
+ private Colour favouriteColour;
+
+ private Boolean someBoolean;
+
+ private List otherColours;
+
+ private List pets;
+
+
+ public TestBean() {
+ }
+
+ public TestBean(String name) {
+ this.name = name;
+ }
+
+ public TestBean(ITestBean spouse) {
+ this.spouses = new ITestBean[] {spouse};
+ }
+
+ public TestBean(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public TestBean(ITestBean spouse, Properties someProperties) {
+ this.spouses = new ITestBean[] {spouse};
+ this.someProperties = someProperties;
+ }
+
+ public TestBean(List someList) {
+ this.someList = someList;
+ }
+
+ public TestBean(Set someSet) {
+ this.someSet = someSet;
+ }
+
+ public TestBean(Map someMap) {
+ this.someMap = someMap;
+ }
+
+ public TestBean(Properties someProperties) {
+ this.someProperties = someProperties;
+ }
+
+
+ public void setBeanName(String beanName) {
+ this.beanName = beanName;
+ }
+
+ public String getBeanName() {
+ return beanName;
+ }
+
+ public void setBeanFactory(BeanFactory beanFactory) {
+ this.beanFactory = beanFactory;
+ }
+
+ public BeanFactory getBeanFactory() {
+ return beanFactory;
+ }
+
+ public void setPostProcessed(boolean postProcessed) {
+ this.postProcessed = postProcessed;
+ }
+
+ public boolean isPostProcessed() {
+ return postProcessed;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public String getSex() {
+ return sex;
+ }
+
+ public void setSex(String sex) {
+ this.sex = sex;
+ if (this.name == null) {
+ this.name = sex;
+ }
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ public boolean isJedi() {
+ return jedi;
+ }
+
+ public void setJedi(boolean jedi) {
+ this.jedi = jedi;
+ }
+
+ public ITestBean getSpouse() {
+ return (spouses != null ? spouses[0] : null);
+ }
+
+ public void setSpouse(ITestBean spouse) {
+ this.spouses = new ITestBean[] {spouse};
+ }
+
+ public ITestBean[] getSpouses() {
+ return spouses;
+ }
+
+ public String getTouchy() {
+ return touchy;
+ }
+
+ public void setTouchy(String touchy) throws Exception {
+ if (touchy.indexOf('.') != -1) {
+ throw new Exception("Can't contain a .");
+ }
+ if (touchy.indexOf(',') != -1) {
+ throw new NumberFormatException("Number format exception: contains a ,");
+ }
+ this.touchy = touchy;
+ }
+
+ public String getCountry() {
+ return country;
+ }
+
+ public void setCountry(String country) {
+ this.country = country;
+ }
+
+ public String[] getStringArray() {
+ return stringArray;
+ }
+
+ public void setStringArray(String[] stringArray) {
+ this.stringArray = stringArray;
+ }
+
+ public Integer[] getSomeIntegerArray() {
+ return someIntegerArray;
+ }
+
+ public void setSomeIntegerArray(Integer[] someIntegerArray) {
+ this.someIntegerArray = someIntegerArray;
+ }
+
+ public Date getDate() {
+ return date;
+ }
+
+ public void setDate(Date date) {
+ this.date = date;
+ }
+
+ public Float getMyFloat() {
+ return myFloat;
+ }
+
+ public void setMyFloat(Float myFloat) {
+ this.myFloat = myFloat;
+ }
+
+ public Collection getFriends() {
+ return friends;
+ }
+
+ public void setFriends(Collection friends) {
+ this.friends = friends;
+ }
+
+ public Set getSomeSet() {
+ return someSet;
+ }
+
+ public void setSomeSet(Set someSet) {
+ this.someSet = someSet;
+ }
+
+ public Map getSomeMap() {
+ return someMap;
+ }
+
+ public void setSomeMap(Map someMap) {
+ this.someMap = someMap;
+ }
+
+ public List getSomeList() {
+ return someList;
+ }
+
+ public void setSomeList(List someList) {
+ this.someList = someList;
+ }
+
+ public Properties getSomeProperties() {
+ return someProperties;
+ }
+
+ public void setSomeProperties(Properties someProperties) {
+ this.someProperties = someProperties;
+ }
+
+ public INestedTestBean getDoctor() {
+ return doctor;
+ }
+
+ public void setDoctor(INestedTestBean doctor) {
+ this.doctor = doctor;
+ }
+
+ public INestedTestBean getLawyer() {
+ return lawyer;
+ }
+
+ public void setLawyer(INestedTestBean lawyer) {
+ this.lawyer = lawyer;
+ }
+
+ public Number getSomeNumber() {
+ return someNumber;
+ }
+
+ public void setSomeNumber(Number someNumber) {
+ this.someNumber = someNumber;
+ }
+
+ public Colour getFavouriteColour() {
+ return favouriteColour;
+ }
+
+ public void setFavouriteColour(Colour favouriteColour) {
+ this.favouriteColour = favouriteColour;
+ }
+
+ public Boolean getSomeBoolean() {
+ return someBoolean;
+ }
+
+ public void setSomeBoolean(Boolean someBoolean) {
+ this.someBoolean = someBoolean;
+ }
+
+ public IndexedTestBean getNestedIndexedBean() {
+ return nestedIndexedBean;
+ }
+
+ public void setNestedIndexedBean(IndexedTestBean nestedIndexedBean) {
+ this.nestedIndexedBean = nestedIndexedBean;
+ }
+
+ public List getOtherColours() {
+ return otherColours;
+ }
+
+ public void setOtherColours(List otherColours) {
+ this.otherColours = otherColours;
+ }
+
+ public List getPets() {
+ return pets;
+ }
+
+ public void setPets(List pets) {
+ this.pets = pets;
+ }
+
+
+ /**
+ * @see org.springframework.beans.ITestBean#exceptional(Throwable)
+ */
+ public void exceptional(Throwable t) throws Throwable {
+ if (t != null) {
+ throw t;
+ }
+ }
+
+ public void unreliableFileOperation() throws IOException {
+ throw new IOException();
+ }
+ /**
+ * @see org.springframework.beans.ITestBean#returnsThis()
+ */
+ public Object returnsThis() {
+ return this;
+ }
+
+ /**
+ * @see org.springframework.beans.IOther#absquatulate()
+ */
+ public void absquatulate() {
+ }
+
+ public int haveBirthday() {
+ return age++;
+ }
+
+
+ public void destroy() {
+ this.destroyed = true;
+ }
+
+ public boolean wasDestroyed() {
+ return destroyed;
+ }
+
+
+ public boolean equals(Object other) {
+ if (this == other) {
+ return true;
+ }
+ if (other == null || !(other instanceof TestBean)) {
+ return false;
+ }
+ TestBean tb2 = (TestBean) other;
+ return (ObjectUtils.nullSafeEquals(this.name, tb2.name) && this.age == tb2.age);
+ }
+
+ public int hashCode() {
+ return this.age;
+ }
+
+ public int compareTo(Object other) {
+ if (this.name != null && other instanceof TestBean) {
+ return this.name.compareTo(((TestBean) other).getName());
+ }
+ else {
+ return 1;
+ }
+ }
+
+ public String toString() {
+ return this.name;
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java
new file mode 100644
index 00000000000..864fdb1b95b
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2002-2006 the original author or authors.
+ *
+ * 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 org.springframework.web.jsf;
+
+import javax.faces.application.NavigationHandler;
+import javax.faces.context.FacesContext;
+
+import junit.framework.TestCase;
+
+import org.springframework.beans.factory.BeanFactory;
+import org.springframework.beans.factory.support.StaticListableBeanFactory;
+
+/**
+ * @author Colin Sampaleanu
+ * @author Juergen Hoeller
+ */
+public class DelegatingNavigationHandlerTests extends TestCase {
+
+ private MockFacesContext facesContext;
+ private StaticListableBeanFactory beanFactory;
+ private TestNavigationHandler origNavHandler;
+ private DelegatingNavigationHandlerProxy delNavHandler;
+
+ @Override
+ protected void setUp() {
+ facesContext = new MockFacesContext();
+ beanFactory = new StaticListableBeanFactory();
+ origNavHandler = new TestNavigationHandler();
+
+ delNavHandler = new DelegatingNavigationHandlerProxy(origNavHandler) {
+ @Override
+ protected BeanFactory getBeanFactory(FacesContext facesContext) {
+ return beanFactory;
+ }
+ };
+ }
+
+ public void testHandleNavigationWithoutDecoration() {
+ TestNavigationHandler targetHandler = new TestNavigationHandler();
+ beanFactory.addBean("jsfNavigationHandler", targetHandler);
+
+ delNavHandler.handleNavigation(facesContext, "fromAction", "myViewId");
+ assertEquals("fromAction", targetHandler.lastFromAction);
+ assertEquals("myViewId", targetHandler.lastOutcome);
+ }
+
+ public void testHandleNavigationWithDecoration() {
+ TestDecoratingNavigationHandler targetHandler = new TestDecoratingNavigationHandler();
+ beanFactory.addBean("jsfNavigationHandler", targetHandler);
+
+ delNavHandler.handleNavigation(facesContext, "fromAction", "myViewId");
+ assertEquals("fromAction", targetHandler.lastFromAction);
+ assertEquals("myViewId", targetHandler.lastOutcome);
+
+ // Original handler must have been invoked as well...
+ assertEquals("fromAction", origNavHandler.lastFromAction);
+ assertEquals("myViewId", origNavHandler.lastOutcome);
+ }
+
+
+ public static class TestNavigationHandler extends NavigationHandler {
+
+ private String lastFromAction;
+ private String lastOutcome;
+
+ @Override
+ public void handleNavigation(FacesContext facesContext, String fromAction, String outcome) {
+ lastFromAction = fromAction;
+ lastOutcome = outcome;
+ }
+ }
+
+
+ public static class TestDecoratingNavigationHandler extends DecoratingNavigationHandler {
+
+ private String lastFromAction;
+ private String lastOutcome;
+
+ @Override
+ public void handleNavigation(
+ FacesContext facesContext, String fromAction, String outcome, NavigationHandler originalNavigationHandler) {
+ lastFromAction = fromAction;
+ lastOutcome = outcome;
+ if (originalNavigationHandler != null) {
+ originalNavigationHandler.handleNavigation(facesContext, fromAction, outcome);
+ }
+ }
+ }
+
+}
diff --git a/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java
new file mode 100644
index 00000000000..48af11100d6
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingPhaseListenerTests.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2002-2006 the original author or authors.
+ *
+ * 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 org.springframework.web.jsf;
+
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseEvent;
+import javax.faces.event.PhaseId;
+import javax.faces.event.PhaseListener;
+
+import junit.framework.TestCase;
+
+import org.springframework.beans.factory.ListableBeanFactory;
+import org.springframework.beans.factory.support.StaticListableBeanFactory;
+
+/**
+ * @author Colin Sampaleanu
+ * @author Juergen Hoeller
+ */
+public class DelegatingPhaseListenerTests extends TestCase {
+
+ private MockFacesContext facesContext;
+ private StaticListableBeanFactory beanFactory;
+ private DelegatingPhaseListenerMulticaster delPhaseListener;
+
+ protected void setUp() {
+ facesContext = new MockFacesContext();
+ beanFactory = new StaticListableBeanFactory();
+
+ delPhaseListener = new DelegatingPhaseListenerMulticaster() {
+ protected ListableBeanFactory getBeanFactory(FacesContext facesContext) {
+ return beanFactory;
+ }
+ };
+ }
+
+ public void testBeforeAndAfterPhaseWithSingleTarget() {
+ TestListener target = new TestListener();
+ beanFactory.addBean("testListener", target);
+
+ assertEquals(delPhaseListener.getPhaseId(), PhaseId.ANY_PHASE);
+ PhaseEvent event = new PhaseEvent(facesContext, PhaseId.INVOKE_APPLICATION, new MockLifecycle());
+
+ delPhaseListener.beforePhase(event);
+ assertTrue(target.beforeCalled);
+
+ delPhaseListener.afterPhase(event);
+ assertTrue(target.afterCalled);
+ }
+
+ public void testBeforeAndAfterPhaseWithMultipleTargets() {
+ TestListener target1 = new TestListener();
+ TestListener target2 = new TestListener();
+ beanFactory.addBean("testListener1", target1);
+ beanFactory.addBean("testListener2", target2);
+
+ assertEquals(delPhaseListener.getPhaseId(), PhaseId.ANY_PHASE);
+ PhaseEvent event = new PhaseEvent(facesContext, PhaseId.INVOKE_APPLICATION, new MockLifecycle());
+
+ delPhaseListener.beforePhase(event);
+ assertTrue(target1.beforeCalled);
+ assertTrue(target2.beforeCalled);
+
+ delPhaseListener.afterPhase(event);
+ assertTrue(target1.afterCalled);
+ assertTrue(target2.afterCalled);
+ }
+
+
+ public static class TestListener implements PhaseListener {
+
+ boolean beforeCalled = false;
+ boolean afterCalled = false;
+
+ public PhaseId getPhaseId() {
+ return PhaseId.ANY_PHASE;
+ }
+
+ public void beforePhase(PhaseEvent arg0) {
+ beforeCalled = true;
+ }
+
+ public void afterPhase(PhaseEvent arg0) {
+ afterCalled = true;
+ }
+ }
+
+}
diff --git a/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingVariableResolverTests.java b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingVariableResolverTests.java
new file mode 100644
index 00000000000..76e8c829b14
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/web/jsf/DelegatingVariableResolverTests.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2002-2007 the original author or authors.
+ *
+ * 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 org.springframework.web.jsf;
+
+import javax.faces.context.FacesContext;
+import javax.faces.el.EvaluationException;
+import javax.faces.el.VariableResolver;
+
+import junit.framework.TestCase;
+
+import org.springframework.beans.TestBean;
+import org.springframework.web.context.WebApplicationContext;
+import org.springframework.web.context.support.StaticWebApplicationContext;
+
+/**
+ * @author Juergen Hoeller
+ * @since 02.08.2004
+ */
+public class DelegatingVariableResolverTests extends TestCase {
+
+ public void testDelegatingVariableResolver() {
+ final StaticWebApplicationContext wac = new StaticWebApplicationContext();
+ wac.registerSingleton("bean1", TestBean.class, null);
+ wac.registerSingleton("var1", TestBean.class, null);
+ wac.refresh();
+ TestBean bean1 = (TestBean) wac.getBean("bean1");
+
+ // We need to override the getWebApplicationContext method here:
+ // FacesContext and ExternalContext are hard to mock.
+ DelegatingVariableResolver resolver = new DelegatingVariableResolver(new OriginalVariableResolver()) {
+ protected WebApplicationContext getWebApplicationContext(FacesContext facesContext) {
+ return wac;
+ }
+ };
+ assertEquals(bean1, resolver.resolveVariable(null, "bean1"));
+ assertEquals("val1", resolver.resolveVariable(null, "var1"));
+ }
+
+ public void testSpringBeanVariableResolver() {
+ final StaticWebApplicationContext wac = new StaticWebApplicationContext();
+ wac.registerSingleton("bean1", TestBean.class, null);
+ wac.registerSingleton("var1", TestBean.class, null);
+ wac.refresh();
+ TestBean bean1 = (TestBean) wac.getBean("bean1");
+ TestBean var1 = (TestBean) wac.getBean("var1");
+
+ // We need to override the getWebApplicationContext method here:
+ // FacesContext and ExternalContext are hard to mock.
+ SpringBeanVariableResolver resolver = new SpringBeanVariableResolver(new OriginalVariableResolver()) {
+ protected WebApplicationContext getWebApplicationContext(FacesContext facesContext) {
+ return wac;
+ }
+ };
+ assertEquals(bean1, resolver.resolveVariable(null, "bean1"));
+ assertEquals(var1, resolver.resolveVariable(null, "var1"));
+ }
+
+
+ private static class OriginalVariableResolver extends VariableResolver {
+
+ public Object resolveVariable(FacesContext facesContext, String name) throws EvaluationException {
+ if ("var1".equals(name)) {
+ return "val1";
+ }
+ return null;
+ }
+ }
+
+}
diff --git a/org.springframework.web/src/test/java/org/springframework/web/jsf/MockFacesContext.java b/org.springframework.web/src/test/java/org/springframework/web/jsf/MockFacesContext.java
new file mode 100644
index 00000000000..7963c88b5ad
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/web/jsf/MockFacesContext.java
@@ -0,0 +1,125 @@
+/*
+ * Copyright 2002-2006 the original author or authors.
+ *
+ * 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 org.springframework.web.jsf;
+
+import java.util.Iterator;
+
+import javax.faces.application.Application;
+import javax.faces.application.FacesMessage;
+import javax.faces.application.FacesMessage.Severity;
+import javax.faces.component.UIViewRoot;
+import javax.faces.context.ExternalContext;
+import javax.faces.context.FacesContext;
+import javax.faces.context.ResponseStream;
+import javax.faces.context.ResponseWriter;
+import javax.faces.render.RenderKit;
+
+/**
+ * Mock implementation of the FacesContext class to facilitate
+ * standalone Action unit tests.
+ *
+ * @author Ulrik Sandberg
+ * @see javax.faces.context.FacesContext
+ */
+public class MockFacesContext extends FacesContext {
+
+ private ExternalContext externalContext;
+
+ private Application application;
+
+ private UIViewRoot viewRoot;
+
+
+ public Application getApplication() {
+ return application;
+ }
+
+ public void setApplication(Application application) {
+ this.application = application;
+ }
+
+ public Iterator getClientIdsWithMessages() {
+ return null;
+ }
+
+ public ExternalContext getExternalContext() {
+ return externalContext;
+ }
+
+ public void setExternalContext(ExternalContext externalContext) {
+ this.externalContext = externalContext;
+ }
+
+ public Severity getMaximumSeverity() {
+ return null;
+ }
+
+ public Iterator getMessages() {
+ return null;
+ }
+
+ public Iterator getMessages(String arg0) {
+ return null;
+ }
+
+ public RenderKit getRenderKit() {
+ return null;
+ }
+
+ public boolean getRenderResponse() {
+ return false;
+ }
+
+ public boolean getResponseComplete() {
+ return false;
+ }
+
+ public ResponseStream getResponseStream() {
+ return null;
+ }
+
+ public void setResponseStream(ResponseStream arg0) {
+ }
+
+ public ResponseWriter getResponseWriter() {
+ return null;
+ }
+
+ public void setResponseWriter(ResponseWriter arg0) {
+ }
+
+ public UIViewRoot getViewRoot() {
+ return viewRoot;
+ }
+
+ public void setViewRoot(UIViewRoot viewRoot) {
+ this.viewRoot = viewRoot;
+ }
+
+ public void addMessage(String arg0, FacesMessage arg1) {
+ }
+
+ public void release() {
+ }
+
+ public void renderResponse() {
+ }
+
+ public void responseComplete() {
+ }
+
+}
\ No newline at end of file
diff --git a/org.springframework.web/src/test/java/org/springframework/web/jsf/MockLifecycle.java b/org.springframework.web/src/test/java/org/springframework/web/jsf/MockLifecycle.java
new file mode 100644
index 00000000000..5cda13aead9
--- /dev/null
+++ b/org.springframework.web/src/test/java/org/springframework/web/jsf/MockLifecycle.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2002-2006 the original author or authors.
+ *
+ * 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 org.springframework.web.jsf;
+
+import javax.faces.FacesException;
+import javax.faces.context.FacesContext;
+import javax.faces.event.PhaseListener;
+import javax.faces.lifecycle.Lifecycle;
+
+/**
+ * @author Juergen Hoeller
+ * @since 29.01.2006
+ */
+public class MockLifecycle extends Lifecycle {
+
+ public void addPhaseListener(PhaseListener phaseListener) {
+ }
+
+ public void execute(FacesContext facesContext) throws FacesException {
+ }
+
+ public PhaseListener[] getPhaseListeners() {
+ return null;
+ }
+
+ public void removePhaseListener(PhaseListener phaseListener) {
+ }
+
+ public void render(FacesContext facesContext) throws FacesException {
+ }
+
+}
\ No newline at end of file