/** * Copyright 2010 JBoss Inc * * 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.drools.ide.common.modeldriven; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.List; import java.util.Map; import junit.framework.TestCase; import org.drools.ide.common.server.util.DataEnumLoader; import org.mvel2.MVEL; import org.mvel2.templates.TemplateRuntime; public class DataEnumLoaderTest extends TestCase { public void testEnumGeneration() throws Exception { Object result = MVEL.eval("[2, 3, 4, ]", new HashMap()); assertTrue(result instanceof List); List l = (List) result; assertEquals(3, l.size()); result = MVEL.eval("['Person.age' : [2, 3]\n 'Person.name' : ['qqq', \n'ccc']]", new HashMap()); DataEnumLoader loader = new DataEnumLoader(readLines().toString()); assertFalse(loader.getErrors().toString(), loader.hasErrors()); Map enumeration = (Map) loader.getData(); assertEquals(loader.getErrors().toString(), 0, loader.getErrors().size()); assertEquals(3, enumeration.size()); String[] list = (String[]) enumeration.get("Person.age"); assertEquals(4, list.length); assertEquals("1", list[0]); assertEquals("2", list[1]); list = (String[]) enumeration.get("Person.rating"); assertEquals(2, list.length); assertEquals("High", list[0]); assertEquals("Low", list[1]); loader = new DataEnumLoader("goober poo error"); assertEquals(0, loader.getData().size()); assertFalse(loader.getErrors().size() == 0); assertTrue(loader.hasErrors()); } public void testNoOp() { DataEnumLoader loader = new DataEnumLoader(" "); assertFalse(loader.hasErrors()); assertEquals(0, loader.getData().size()); loader = new DataEnumLoader(""); assertFalse(loader.hasErrors()); assertEquals(0, loader.getData().size()); } public void testLiteralHelperUtilityClass() { //this shows how you can load it up with a class (which should return a map of keys to List. DataEnumLoader loader = new DataEnumLoader("=(new org.drools.ide.common.modeldriven.SampleDataSource2()).loadData()"); assertFalse(loader.hasErrors()); assertEquals(1, loader.getData().size()); String[] res = (String[]) loader.getData().get("whee"); assertEquals(2, res.length); assertEquals("hey", res[0]); assertEquals("ho", res[1]); } public void testNewLines() { String s = "yeah yeah, \nyeah \nyeah"; assertEquals("yeah yeah,\nyeah,\nyeah", DataEnumLoader.addCommasForNewLines( s )); } public void testLazyString() { //in this case we are dealing with an expression which will not be resolved at load time. DataEnumLoader loader = new DataEnumLoader("'Person.type[sex]' : 'something @{sex}'"); assertFalse(loader.hasErrors()); Map data = loader.getData(); String[] sl = (String[]) data.get("Person.type[sex]"); String s = sl[0]; assertEquals("something @{sex}", s); Map context = new HashMap() {{ put("sex", "cool"); }}; Object r = TemplateRuntime.eval(s, context); assertEquals("something cool", r); loader = new DataEnumLoader("'Person.type[sex, money]' : '@{sex} @{money}'"); assertFalse(loader.hasErrors()); sl = (String[]) loader.getData().get("Person.type[sex, money]"); s = sl[0]; assertEquals("@{sex} @{money}", s); } private StringBuilder readLines() throws IOException { BufferedReader r = new BufferedReader(new InputStreamReader(this.getClass().getResourceAsStream("Some.enumeration"))); String line = ""; StringBuilder buf = new StringBuilder(); while ((line = r.readLine()) != null) { buf.append(line); buf.append('\n'); } return buf; } }