/*******************************************************************************
* Copyright 2015 alladin-IT GmbH
*
* 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 at.alladin.rmbt.util.model.option;
import java.io.File;
import java.io.FileReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import junit.framework.TestCase;
import org.junit.Test;
public class ServerOptionTest extends TestCase{
@Test
public void testOptionFunctionParametersAndTitles() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test1.json");
File file = new File(url.getPath());
ServerOption option = ServerOption.getGson().fromJson(new FileReader(file), ServerOption.class);
assertEquals("option list size", 3, option.getOptionList().size());
assertEquals("parameter list size", 1, option.getParameterMap().size());
assertEquals("option list item index 0 title", "Download", option.getOptionList().get(0).getTitle());
assertEquals("option list item index 1 title", "Upload", option.getOptionList().get(1).getTitle());
assertEquals("option list item index 2 title", "Ping", option.getOptionList().get(2).getTitle());
assertNull("unknown parameter value", option.getParameterMap().get("unknown"));
assertEquals("parameter 1 value", false, option.getParameterMap().get("map_type_is_mobile"));
}
@Test
public void testOptionFunctionParentCorrectness() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test1.json");
File file = new File(url.getPath());
ServerOption option = ServerOption.getGson().fromJson(new FileReader(file), ServerOption.class);
assertNull("main option parent", option.getParent());
assertEquals("option index 0 parent title", option.getTitle(), option.getOptionList().get(0).getParent().getTitle());
assertEquals("option index 1 parent title", option.getTitle(), option.getOptionList().get(1).getParent().getTitle());
assertEquals("option index 2 parent title", option.getTitle(), option.getOptionList().get(2).getParent().getTitle());
}
@Test
public void testOptionFunctionLoadingFunction() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test2.json");
File file = new File(url.getPath());
ServerOption option = ServerOption.getGson().fromJson(new FileReader(file), ServerOption.class);
assertEquals("main option function size", 2, option.getFunctionList().size());
assertEquals("main option function 0 name", "drop_param", option.getFunctionList().get(0).getName());
assertEquals("main option function 0 param 'key'", "title", option.getFunctionList().get(0).getParameterMap().get("key"));
assertNull("main option function 1 params", option.getFunctionList().get(1).getParameterMap());
}
@Test
public void testOptionSelectedParametersWithInheritance() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test2.json");
File file = new File(url.getPath());
ServerOptionContainer options = new ServerOptionContainer(
new ArrayList<>(Arrays.asList(ServerOption.getGson().fromJson(new FileReader(file), ServerOption.class))));
List<ServerOption> list = options.select(options.getRootOptions().get(0));
assertNotNull("selected option sublist not null", list);
List<ServerOption> subList = options.select(list.get(0));
Map<String, Object> paramMap = options.getSelectedParams();
assertNull("selected option 0 sublist is null", subList);
assertEquals("selected option 0 param 'option'", "a1", paramMap.get("option"));
assertNull("selected option 0 dropped param 'title'", paramMap.get("title"));
assertEquals("selected option 0 params size", 2, paramMap.size());
assertEquals("selected option 0 overriden param 'parent_param'", true, paramMap.get("parent_param"));
subList = options.select(list.get(1));
paramMap = options.getSelectedParams();
assertNull("selected option 1 sublist is null", subList);
assertEquals("selected option 1 param 'option'", "a2", paramMap.get("option"));
assertNull("selected option 1 dropped param 'title'", paramMap.get("title"));
assertEquals("selected option 1 params size", 2, paramMap.size());
assertEquals("selected option 1 inherited param 'parent_param'", false, paramMap.get("parent_param"));
subList = options.select(list.get(2));
paramMap = options.getSelectedParams();
assertNull("selected option 2 sublist is null", subList);
assertEquals("selected option 2 param 'option'", "a3", paramMap.get("option"));
assertEquals("selected option 2 params size", 4, paramMap.size());
assertEquals("selected option 2 param 'titles'", "a3", paramMap.get("titles"));
assertEquals("selected option 2 inherited param 'parent_param'", false, paramMap.get("parent_param"));
subList = options.select(list.get(3));
paramMap = options.getSelectedParams();
assertNull("selected option 3 sublist is null", subList);
assertEquals("selected option 3 params size", 1, paramMap.size());
assertEquals("selected option 3 inherited param 'parent_param'", false, paramMap.get("parent_param"));
}
@Test
public void testOptionParameterOverrides() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test3.json");
File file = new File(url.getPath());
ServerOptionContainer options = new ServerOptionContainer(
new ArrayList<>(Arrays.asList(ServerOption.getGson().fromJson(new FileReader(file), ServerOption.class))));
final List<ServerOption> list = options.getRootOptions();
List<ServerOption> sublist = options.select(list.get(0));
assertEquals("option 0 select param size", 0, options.getSelectedParams().size());
sublist = options.select(sublist.get(0));
assertEquals("option 0->0 select param size", 2, options.getSelectedParams().size());
assertEquals("option 0->0 param 'option'", "a1", options.getSelectedParams().get("option"));
sublist = options.select(sublist.get(0));
assertEquals("option 0->0->0 select param size", 2, options.getSelectedParams().size());
assertEquals("option 0->0->0 override param 'option'", "a2", options.getSelectedParams().get("option"));
sublist = options.select(sublist.get(0));
assertEquals("option 0->0->0->0 select param size", 2, options.getSelectedParams().size());
assertEquals("option 0->0->0->0 override param 'option'", "a3", options.getSelectedParams().get("option"));
sublist = options.select(sublist.get(0));
assertEquals("option 0->0->0->0->0 select param size", 2, options.getSelectedParams().size());
assertEquals("option 0->0->0->0->0 override param 'option'", "a3", options.getSelectedParams().get("option"));
}
@Test
public void testOptionDependsOn() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test4.json");
File file = new File(url.getPath());
ServerOptionContainer options = new ServerOptionContainer(Arrays.asList(ServerOption.getGson().fromJson(new FileReader(file), ServerOption[].class)));
final List<ServerOption> list = options.getRootOptions();
assertEquals("option 0 is enabled ", true, list.get(0).isEnabled());
assertEquals("option 0->0 is enabled ", true, list.get(0).getOptionList().get(0).isEnabled());
assertEquals("option 0->1 is enabled ", true, list.get(0).getOptionList().get(1).isEnabled());
assertEquals("option 1->0 is enabled ", true, list.get(1).getOptionList().get(0).isEnabled());
assertEquals("option 1->1 is not enabled ", false, list.get(1).getOptionList().get(1).isEnabled());
List<ServerOption> subList = options.select(list.get(0));
//select option 0, suboption 0 (this should set parameter "test" to "1" and enable suboption 1 of option 1)
options.select(subList.get(0));
assertEquals("option 0->0 is enabled ", true, list.get(0).getOptionList().get(0).isEnabled());
assertEquals("option 0->1 is enabled ", true, list.get(0).getOptionList().get(1).isEnabled());
assertEquals("option 1->0 is enabled ", true, list.get(1).getOptionList().get(0).isEnabled());
assertEquals("option 1->1 is enabled ", true, list.get(1).getOptionList().get(1).isEnabled());
//select option 0, suboption 1 (this should remove the parameter "test" and again disable suboption 1 of option 1)
options.select(subList.get(1));
assertEquals("option 0->0 is enabled ", true, list.get(0).getOptionList().get(0).isEnabled());
assertEquals("option 0->1 is enabled ", true, list.get(0).getOptionList().get(1).isEnabled());
assertEquals("option 1->0 is enabled ", true, list.get(1).getOptionList().get(0).isEnabled());
assertEquals("option 1->1 is not enabled ", false, list.get(1).getOptionList().get(1).isEnabled());
}
@Test
public void testSetDefaultValues() throws Exception {
URL url = Thread.currentThread().getContextClassLoader().getResource("at/alladin/rmbt/util/model/option/test5.json");
File file = new File(url.getPath());
ServerOptionContainer options = new ServerOptionContainer(Arrays.asList(ServerOption.getGson().fromJson(new FileReader(file), ServerOption[].class)));
options.setDefault();
assertEquals("default parameter size ", 3, options.getSelectedParams().size());
assertEquals("default paramater 'test' value ", 1, (int)(double)options.getSelectedParams().get("test"));
assertEquals("default paramater 'option' value ", "a1", options.getSelectedParams().get("option"));
assertEquals("default paramater 'suboption' value ", "option1", options.getSelectedParams().get("suboption"));
}
}