1   /*
2    * Copyright 2002-2004 the original author or authors.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5    * use this file except in compliance with the License. You may obtain a copy of
6    * the License at
7    *
8    * http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations under
14   * the License.
15   */
16  package org.springframework.binding.support;
17  
18  import java.util.HashMap;
19  import java.util.List;
20  import java.util.Map;
21  
22  import org.springframework.binding.PropertyMetadataAccessStrategy;
23  
24  /**
25   * Tests class {@link BeanPropertyAccessStrategy}.
26   *
27   * @author Oliver Hutchison
28   */
29  public class BeanPropertyAccessStrategyTests extends AbstractPropertyAccessStrategyTests {
30  
31  	protected AbstractPropertyAccessStrategy createPropertyAccessStrategy(Object target) {
32  		return new BeanPropertyAccessStrategy(target);
33  	}
34  
35      /**
36       * Test the metadata on type/readability/writeability.
37       */
38      public void testMetaData() {
39          PropertyMetadataAccessStrategy mas = pas.getMetadataAccessStrategy();
40  
41          assertPropertyMetadata(mas, "simpleProperty", String.class, true, true);
42          assertPropertyMetadata(mas, "mapProperty", Map.class, true, true);
43          assertPropertyMetadata(mas, "listProperty", List.class, true, true);
44          assertPropertyMetadata(mas, "readOnly", Object.class, true, false);
45          assertPropertyMetadata(mas, "writeOnly", Object.class, false, true);
46  
47          // test nested property
48          // when null, no type, not readable, not writeable
49          assertPropertyMetadata(mas, "nestedProperty.simpleProperty", null, false, false);
50          final TestBean nestedProperty = new TestBean();
51          testBean.setNestedProperty(nestedProperty);
52          // when provided, type/readable/writeable deducted from nested object
53          assertPropertyMetadata(mas, "nestedProperty.simpleProperty", String.class, true, true);
54  
55          // test access to map
56          final Map map = new HashMap();
57          testBean.setMapProperty(map);
58          map.put("key", new Integer(1));
59          assertPropertyMetadata(mas, "mapProperty[key]", Integer.class, true, true);
60      }
61  
62  }