/*
***************************************************************************************
* Copyright (C) 2006 EsperTech, Inc. All rights reserved. *
* http://www.espertech.com/esper *
* http://www.espertech.com *
* ---------------------------------------------------------------------------------- *
* The software in this package is published under the terms of the GPL license *
* a copy of which has been included with this distribution in the license.txt file. *
***************************************************************************************
*/
package com.espertech.esper.core.service;
import com.espertech.esper.client.scopetest.EPAssertionUtil;
import com.espertech.esper.util.CollectionUtil;
import junit.framework.TestCase;
import java.util.HashSet;
public class TestStatementEventTypeRef extends TestCase {
private StatementEventTypeRefImpl service;
public void setUp() {
service = new StatementEventTypeRefImpl();
}
public void testFlowNoRemoveType() {
addReference("s0", "e1");
assertTrue(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[]{"s0"});
addReference("s0", "e2");
assertTrue(service.isInUse("e2"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e2").toArray(), new Object[]{"s0"});
addReference("s1", "e1");
assertTrue(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[]{"s0", "s1"});
addReference("s1", "e1");
assertTrue(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[]{"s0", "s1"});
assertFalse(service.isInUse("e3"));
addReference("s2", "e3");
assertTrue(service.isInUse("e3"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e3").toArray(), new Object[]{"s2"});
service.removeReferencesStatement("s2");
assertFalse(service.isInUse("e3"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e3").toArray(), new Object[0]);
service.removeReferencesStatement("s0");
assertTrue(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[]{"s1"});
service.removeReferencesStatement("s1");
assertFalse(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[0]);
HashSet<String> values = new HashSet<String>();
values.add("e5");
values.add("e6");
service.addReferences("s4", CollectionUtil.toArray(values));
assertTrue(service.isInUse("e5"));
assertTrue(service.isInUse("e6"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e5").toArray(), new Object[]{"s4"});
service.removeReferencesStatement("s4");
assertFalse(service.isInUse("e5"));
assertFalse(service.isInUse("e6"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e5").toArray(), new Object[0]);
assertEquals(0, service.getTypeToStmt().size());
assertEquals(0, service.getTypeToStmt().size());
}
public void testFlowRemoveType() {
addReference("s0", "e1");
addReference("s1", "e1");
addReference("s2", "e2");
assertTrue(service.isInUse("e1"));
service.removeReferencesType("e1");
assertFalse(service.isInUse("e1"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e1").toArray(), new Object[0]);
assertTrue(service.isInUse("e2"));
service.removeReferencesType("e2");
assertFalse(service.isInUse("e2"));
service.removeReferencesType("e3");
assertEquals(0, service.getTypeToStmt().size());
assertEquals(0, service.getTypeToStmt().size());
}
public void testInvalid() {
service.removeReferencesStatement("s1");
addReference("s2", "e2");
assertTrue(service.isInUse("e2"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e2").toArray(), new Object[]{"s2"});
service.removeReferencesStatement("s2");
assertFalse(service.isInUse("e2"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e2").toArray(), new Object[0]);
service.removeReferencesStatement("s2");
assertFalse(service.isInUse("e2"));
EPAssertionUtil.assertEqualsAnyOrder(service.getStatementNamesForType("e2").toArray(), new Object[0]);
assertEquals(0, service.getTypeToStmt().size());
assertEquals(0, service.getTypeToStmt().size());
}
private void addReference(String stmtName, String typeName) {
HashSet<String> set = new HashSet<String>();
set.add(typeName);
service.addReferences(stmtName, CollectionUtil.toArray(set));
}
}