/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.ivy.util; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Map; import junit.framework.TestCase; /** * */ public class ConfiguratorTest extends TestCase { public static class FileTester { private File file; public void setFile(File file) { this.file = file; } public File getFile() { return file; } } public static class City { private List _housings = new ArrayList(); private List _streets = new ArrayList(); private String _name; public String getName() { return _name; } public void setName(String name) { _name = name; } public List getHousings() { return _housings; } public List getStreets() { return _streets; } public void add(Housing h) { _housings.add(h); } public void add(Street s) { _streets.add(s); } } public static class Street { private Class _clazz; private List _trees = new ArrayList(); private List _walkers = new ArrayList(); public List getTrees() { return _trees; } public void addConfiguredTree(Tree tree) { _trees.add(tree); } public List getWalkers() { return _walkers; } public void addConfiguredWalker(Map walkerAttributes) { _walkers.add(new Person((String) walkerAttributes.get("name"))); } public Class getClazz() { return _clazz; } public void setClazz(Class clazz) { _clazz = clazz; } } public static abstract class Housing { private List _rooms = new ArrayList(); private boolean _isEmpty; private Person _proprietary; public List getRooms() { return _rooms; } public void addRoom(Room r) { _rooms.add(r); } public boolean isEmpty() { return _isEmpty; } public void setEmpty(boolean isEmpty) { _isEmpty = isEmpty; } public Person getProprietary() { return _proprietary; } public void setProprietary(Person proprietary) { _proprietary = proprietary; } } public static class House extends Housing { } public static class Tree { private short _age; public short getAge() { return _age; } public void setAge(short age) { _age = age; } } public static class Flat extends Housing { private int _stage; public int getStage() { return _stage; } public void setStage(int stage) { _stage = stage; } } public static class Room { private short _surface; public short getSurface() { return _surface; } public void setSurface(short surface) { _surface = surface; } } public static class Person { private String _name; public Person(String name) { _name = name; } public String getName() { return _name; } } private Configurator _conf; protected void setUp() throws Exception { _conf = new Configurator(); } public void testSetRoot() { City city = new City(); _conf.setRoot(city); assertEquals(city, _conf.getCurrent()); } public void testStringAttribute() { City city = new City(); _conf.setRoot(city); _conf.setAttribute("name", "bordeaux"); assertEquals("bordeaux", city.getName()); } public void testIntAttribute() { Flat flat = new Flat(); _conf.setRoot(flat); _conf.setAttribute("stage", "4"); assertEquals(4, flat.getStage()); } public void testBooleanAttribute() { Housing housing = new House(); _conf.setRoot(housing); _conf.setAttribute("empty", "true"); assertEquals(true, housing.isEmpty()); _conf.setAttribute("empty", "false"); assertEquals(false, housing.isEmpty()); _conf.setAttribute("empty", "yes"); assertEquals(true, housing.isEmpty()); _conf.setAttribute("empty", "no"); assertEquals(false, housing.isEmpty()); _conf.setAttribute("empty", "on"); assertEquals(true, housing.isEmpty()); _conf.setAttribute("empty", "off"); assertEquals(false, housing.isEmpty()); } public void testClassAttribute() { Street street = new Street(); _conf.setRoot(street); _conf.setAttribute("clazz", getClass().getName()); assertEquals(getClass(), street.getClazz()); } public void testPersonAttribute() { Housing housing = new House(); _conf.setRoot(housing); _conf.setAttribute("proprietary", "jean"); assertEquals("jean", housing.getProprietary().getName()); } public void testAddRoom() { Housing housing = new House(); _conf.setRoot(housing); _conf.startCreateChild("room"); assertEquals(1, housing.getRooms().size()); _conf.setAttribute("surface", "24"); assertEquals(24, ((Room) housing.getRooms().get(0)).getSurface()); _conf.endCreateChild(); assertEquals(housing, _conf.getCurrent()); } public void testAddConfiguredTree() { Street street = new Street(); _conf.setRoot(street); _conf.startCreateChild("tree"); assertTrue(street.getTrees().isEmpty()); _conf.setAttribute("age", "400"); _conf.endCreateChild(); assertEquals(1, street.getTrees().size()); assertEquals(400, ((Tree) street.getTrees().get(0)).getAge()); assertEquals(street, _conf.getCurrent()); } public void testAddConfiguredWalker() { Street street = new Street(); _conf.setRoot(street); _conf.startCreateChild("walker"); assertTrue(street.getWalkers().isEmpty()); _conf.setAttribute("name", "xavier"); _conf.endCreateChild(); assertEquals(1, street.getWalkers().size()); assertEquals("xavier", ((Person) street.getWalkers().get(0)).getName()); assertEquals(street, _conf.getCurrent()); } public void testAddWithTypeDef() throws Exception { City city = new City(); _conf.typeDef("house", House.class.getName()); _conf.typeDef("flat", Flat.class.getName()); _conf.typeDef("street", Street.class.getName()); _conf.setRoot(city); _conf.startCreateChild("house"); assertEquals(1, city.getHousings().size()); assertTrue(city.getHousings().get(0) instanceof House); _conf.endCreateChild(); _conf.startCreateChild("flat"); assertEquals(2, city.getHousings().size()); assertTrue(city.getHousings().get(1) instanceof Flat); _conf.endCreateChild(); _conf.startCreateChild("street"); assertEquals(1, city.getStreets().size()); _conf.endCreateChild(); assertEquals(city, _conf.getCurrent()); } public void testNested() throws Exception { City city = new City(); _conf.typeDef("house", House.class.getName()); _conf.setRoot(city); _conf.startCreateChild("house"); _conf.startCreateChild("room"); _conf.setAttribute("surface", "20"); _conf.endCreateChild(); _conf.startCreateChild("room"); _conf.setAttribute("surface", "25"); _conf.endCreateChild(); _conf.endCreateChild(); assertEquals(city, _conf.getCurrent()); assertEquals(2, ((Housing) city.getHousings().get(0)).getRooms().size()); assertEquals(20, ((Room) ((Housing) city.getHousings().get(0)).getRooms().get(0)).getSurface()); assertEquals(25, ((Room) ((Housing) city.getHousings().get(0)).getRooms().get(1)).getSurface()); } public void testMacro() throws Exception { City city = new City(); _conf.typeDef("house", House.class.getName()); _conf.startMacroDef("castle"); _conf.addMacroAttribute("surface", "40"); _conf.addMacroElement("addroom", true); _conf.startCreateChild("house"); _conf.startCreateChild("room"); _conf.setAttribute("surface", "@{surface}"); _conf.endCreateChild(); _conf.startCreateChild("room"); _conf.setAttribute("surface", "@{surface}"); _conf.endCreateChild(); _conf.startCreateChild("addroom"); _conf.endCreateChild(); _conf.endCreateChild(); _conf.endMacroDef(); _conf.setRoot(city); _conf.startCreateChild("castle"); _conf.setAttribute("surface", "10"); _conf.endCreateChild(); _conf.startCreateChild("castle"); _conf.startCreateChild("addroom"); _conf.startCreateChild("room"); _conf.setAttribute("surface", "20"); _conf.endCreateChild(); _conf.endCreateChild(); _conf.endCreateChild(); assertEquals(city, _conf.getCurrent()); assertEquals(2, city.getHousings().size()); // first castle : 2 default rooms of 10 of surface assertEquals(2, ((Housing) city.getHousings().get(0)).getRooms().size()); assertEquals(10, ((Room) ((Housing) city.getHousings().get(0)).getRooms().get(0)).getSurface()); assertEquals(10, ((Room) ((Housing) city.getHousings().get(0)).getRooms().get(1)).getSurface()); // second castle : 2 default rooms of default surface 40, + one addroom of surface 20 assertEquals(3, ((Housing) city.getHousings().get(1)).getRooms().size()); assertEquals(40, ((Room) ((Housing) city.getHousings().get(1)).getRooms().get(0)).getSurface()); assertEquals(40, ((Room) ((Housing) city.getHousings().get(1)).getRooms().get(1)).getSurface()); assertEquals(20, ((Room) ((Housing) city.getHousings().get(1)).getRooms().get(2)).getSurface()); } public void testFileAttribute() { FileTester root = new FileTester(); _conf.setRoot(root); _conf.setAttribute("file", "path/to/file.txt"); String filePath = root.getFile().getPath(); filePath = filePath.replace('\\', '/'); assertEquals("path/to/file.txt", filePath); } }