1dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * this work for additional information regarding copyright ownership.
4dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * (the "License"); you may not use this file except in compliance with
6dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * the License.  You may obtain a copy of the License at
7dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *
8dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes *
10dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Unless required by applicable law or agreed to in writing, software
11dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * See the License for the specific language governing permissions and
14dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * limitations under the License.
15dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */
16dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
17e5fea3d504609d22337a5311d3ce0e72314bceeeNarayan Kamathpackage org.apache.harmony.tests.java.nio;
18dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
19dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.Buffer;
20dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.ByteBuffer;
21dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport java.nio.InvalidMarkException;
22dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
23dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughesimport junit.framework.TestCase;
24dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
25dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes/**
26dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes * Tests a java.nio.Buffer instance.
27dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes */
28dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughespublic class AbstractBufferTest extends TestCase {
29dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
30dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    protected Buffer baseBuf;
31dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
32dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    protected void setUp() throws Exception{
33dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    	super.setUp();
34dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    	baseBuf = ByteBuffer.allocate(10);
35dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
36dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
37dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    protected void tearDown() throws Exception{
38dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    	super.tearDown();
39dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
40dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
41dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testCapacity() {
42dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
43dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
44dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
45dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
46dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testClear() {
47dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
48dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
49dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
50dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
51dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.clear();
52dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
53dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), 0);
54dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.limit(), baseBuf.capacity());
55dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
56dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.reset();
57dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$S
58dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (InvalidMarkException e) {
59dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
60dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
61dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
62dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
63dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
64dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
65dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
66dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
67dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testFlip() {
68dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
69dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
70dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
71dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
72dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.flip();
73dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
74dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), 0);
75dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.limit(), oldPosition);
76dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
77dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.reset();
78dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
79dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (InvalidMarkException e) {
80dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
81dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
82dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
83dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
84dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
85dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
86dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
87dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
88dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testHasRemaining() {
89dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
90dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
91dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
92dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
93dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.hasRemaining(), baseBuf.position() < baseBuf.limit());
94dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
95dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertFalse(baseBuf.hasRemaining());
96dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
97dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
98dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
99dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
100dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
101dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
102dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testIsReadOnly() {
103dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.isReadOnly();
104dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
105dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
106dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /*
107dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Class under test for int limit()
108dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
109dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testLimit() {
110dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
111dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
112dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
113dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
114dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /*
115dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Class under test for Buffer limit(int)
116dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
117dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testLimitint() {
118dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
119dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
120dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
121dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
122dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.limit(baseBuf.limit());
123dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
124dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
125dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
126dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(baseBuf.capacity());
127dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.limit(), baseBuf.capacity());
128dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // position should not change
129dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
130dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // mark should be valid
131dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
132dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
133dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (baseBuf.capacity() > 0) {
134dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.limit(baseBuf.capacity());
135dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.position(baseBuf.capacity());
136dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.mark();
137dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.limit(baseBuf.capacity() - 1);
138dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // position should be the new limit
139dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(baseBuf.position(), baseBuf.limit());
140dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // mark should be invalid
141dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
142dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                baseBuf.reset();
143dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fail("Should throw Exception"); //$NON-NLS-1$
144dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (InvalidMarkException e) {
145dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // expected
146dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
147dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
148dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
149dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
150dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.limit(-1);
151dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
152dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
153dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
154dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
155dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
156dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.limit(baseBuf.capacity() + 1);
157dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
158dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
159dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
160dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
161dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
162dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
163dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
164dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
165dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
166dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
167dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testMark() {
168dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
169dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
170dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
171dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
172dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.mark();
173dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
174dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
175dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
176dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
177dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
178dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
179dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
180dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
181dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
182dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
183dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
184dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
185dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
186dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
187dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
188dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
189dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
190dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /*
191dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Class under test for int position()
192dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
193dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testPosition() {
194dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
195dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
196dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
197dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
198dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    /*
199dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     * Class under test for Buffer position(int)
200dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes     */
201dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testPositionint() {
202dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
203dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
204dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
205dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
206dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
207dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.position(-1);
208dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
209dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
210dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
211dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
212dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
213dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.position(baseBuf.limit() + 1);
214dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
215dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (IllegalArgumentException e) {
216dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
217dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
218dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
219dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
220dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.position());
221dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
222dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
223dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
224dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(0);
225dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), 0);
226dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
227dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), baseBuf.limit());
228dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
229dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        if (baseBuf.capacity() > 0) {
230dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.limit(baseBuf.capacity());
231dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.position(baseBuf.limit());
232dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.mark();
233dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.position(baseBuf.limit() - 1);
234dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            assertEquals(baseBuf.position(), baseBuf.limit() - 1);
235dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // mark should be invalid
236dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            try {
237dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                baseBuf.reset();
238dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                fail("Should throw Exception"); //$NON-NLS-1$
239dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            } catch (InvalidMarkException e) {
240dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes                // expected
241dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            }
242dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
243dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
244dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.position(0);
245dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
246dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
247dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
248dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
249dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
250dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
251dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
252dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testRemaining() {
253dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.remaining(), baseBuf.limit() - baseBuf.position());
254dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
255dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
256dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testReset() {
257dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
258dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
259dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
260dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
261dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
262dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
263dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
264dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
265dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
266dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.mark();
267dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(baseBuf.limit());
268dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.reset();
269dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), oldPosition);
270dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
271dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.reset();
272dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
273dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
274dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.clear();
275dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
276dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.reset();
277dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
278dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (InvalidMarkException e) {
279dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
280dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
281dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
282dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
283dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
284dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
285dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
286dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
287dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    public void testRewind() {
288dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // save state
289dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldPosition = baseBuf.position();
290dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        int oldLimit = baseBuf.limit();
291dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
292dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        Buffer ret = baseBuf.rewind();
293dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertEquals(baseBuf.position(), 0);
294dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        assertSame(ret, baseBuf);
295dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        try {
296dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            baseBuf.reset();
297dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
298dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        } catch (InvalidMarkException e) {
299dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes            // expected
300dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        }
301dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes
302dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        // restore state
303dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.limit(oldLimit);
304dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes        baseBuf.position(oldPosition);
305dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes    }
306dce2b2fa9d6b26414a8d5a55918e4d7ca2ab1baaElliott Hughes}
307