/*
 * 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.core;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import junit.framework.TestCase;

import org.springframework.beans.TestBean;

/**
 * @author Rob Harrop
 */
public class ConventionsTests extends TestCase {

	public void testSimpleObject() {
		TestBean testBean = new TestBean();
		assertEquals("Incorrect singular variable name", "testBean", Conventions.getVariableName(testBean));
	}

	public void testArray() {
		TestBean[] testBeans = new TestBean[0];
		assertEquals("Incorrect plural array form", "testBeanList", Conventions.getVariableName(testBeans));
	}

	public void testCollections() {
		List list = new ArrayList();
		list.add(new TestBean());
		assertEquals("Incorrect plural List form", "testBeanList", Conventions.getVariableName(list));

		Set set = new HashSet();
		set.add(new TestBean());
		assertEquals("Incorrect plural Set form", "testBeanList", Conventions.getVariableName(set));

		List emptyList = new ArrayList();
		try {
			Conventions.getVariableName(emptyList);
			fail("Should not be able to generate name for empty collection");
		}
		catch(IllegalArgumentException ex) {
			// success
		}
	}

	public void testAttributeNameToPropertyName() throws Exception {
		assertEquals("transactionManager", Conventions.attributeNameToPropertyName("transaction-manager"));
		assertEquals("pointcutRef", Conventions.attributeNameToPropertyName("pointcut-ref"));
		assertEquals("lookupOnStartup", Conventions.attributeNameToPropertyName("lookup-on-startup"));
	}

	public void testGetQualifiedAttributeName() throws Exception {
		String baseName = "foo";
		Class cls = String.class;
		String desiredResult = "java.lang.String.foo";
		assertEquals(desiredResult, Conventions.getQualifiedAttributeName(cls, baseName));
	}
}
