/* 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.harmony.tests.java.nio.channels.spi; import java.io.IOException; import java.nio.channels.IllegalBlockingModeException; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; import java.nio.channels.ServerSocketChannel; import java.nio.channels.spi.SelectorProvider; import junit.framework.TestCase; /** * Tests for AbstractSelector and register of its default implementation */ public class AbstractSelectorTest extends TestCase { /** * @tests AbstractSelector#provider() */ public void test_provider() throws IOException { Selector mockSelector = new MockAbstractSelector(SelectorProvider .provider()); assertTrue(mockSelector.isOpen()); assertSame(SelectorProvider.provider(), mockSelector.provider()); mockSelector = new MockAbstractSelector(null); assertNull(mockSelector.provider()); } /** * @tests AbstractSelector#close() */ public void test_close() throws IOException { MockAbstractSelector mockSelector = new MockAbstractSelector( SelectorProvider.provider()); mockSelector.close(); assertTrue(mockSelector.isImplCloseSelectorCalled); } /** * * @tests AbstractSelector#begin/end() */ public void test_begin_end() throws IOException { MockAbstractSelector mockSelector = new MockAbstractSelector( SelectorProvider.provider()); try { mockSelector.superBegin(); } finally { mockSelector.superEnd(); } mockSelector = new MockAbstractSelector(SelectorProvider.provider()); try { mockSelector.superBegin(); mockSelector.close(); } finally { mockSelector.superEnd(); } try { // begin twice mockSelector.superBegin(); mockSelector.superBegin(); } finally { mockSelector.superEnd(); } try { mockSelector.superBegin(); } finally { // end twice mockSelector.superEnd(); mockSelector.superEnd(); } mockSelector.close(); try { mockSelector.superBegin(); } finally { mockSelector.superEnd(); } } /** * @tests AbstractSelector#isOpen() */ public void test_isOpen() throws Exception { Selector acceptSelector = SelectorProvider.provider().openSelector(); assertTrue(acceptSelector.isOpen()); acceptSelector.close(); assertFalse(acceptSelector.isOpen()); } /** * @tests AbstractSelector#register(Selector,int) */ public void test_register_LSelectorI() throws Exception { Selector acceptSelector = SelectorProvider.provider().openSelector(); ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); assertFalse(ssc.isRegistered()); SelectionKey acceptKey = ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); assertTrue(ssc.isRegistered()); assertNotNull(acceptKey); assertTrue(acceptSelector.keys().contains(acceptKey)); } /** * @tests AbstractSelector#register(Selector,int) */ public void test_register_LSelectorI_error() throws IOException { Selector acceptSelector = SelectorProvider.provider().openSelector(); ServerSocketChannel ssc = ServerSocketChannel.open(); ssc.configureBlocking(false); acceptSelector.close(); assertFalse(acceptSelector.isOpen()); try { ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); fail("should throw NullPointerException"); } catch (NullPointerException e) { // expected } assertFalse(ssc.isRegistered()); acceptSelector = Selector.open(); ssc.configureBlocking(true); try { ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); fail("should throw IllegalBlockingModeException"); } catch (IllegalBlockingModeException e) { // expected } assertFalse(ssc.isRegistered()); ssc.configureBlocking(false); SelectionKey acceptKey = ssc.register(acceptSelector, SelectionKey.OP_ACCEPT); assertNotNull(acceptKey); assertTrue(acceptSelector.keys().contains(acceptKey)); assertTrue(ssc.isRegistered()); } }