1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/* Licensed to the Apache Software Foundation (ASF) under one or more
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * contributor license agreements.  See the NOTICE file distributed with
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * this work for additional information regarding copyright ownership.
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * The ASF licenses this file to You under the Apache License, Version 2.0
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * (the "License"); you may not use this file except in compliance with
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * the License.  You may obtain a copy of the License at
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Unless required by applicable law or agreed to in writing, software
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * distributed under the License is distributed on an "AS IS" BASIS,
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * See the License for the specific language governing permissions and
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * limitations under the License.
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.nio.tests.java.nio;
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.Buffer;
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.ByteBuffer;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.nio.InvalidMarkException;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Tests a java.nio.Buffer instance.
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class AbstractBufferTest extends TestCase {
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected Buffer baseBuf;
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void setUp() throws Exception{
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    	super.setUp();
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    	baseBuf = ByteBuffer.allocate(10);
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    protected void tearDown() throws Exception{
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    	super.tearDown();
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testCapacity() {
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testClear() {
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.clear();
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), 0);
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.limit(), baseBuf.capacity());
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.reset();
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$S
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidMarkException e) {
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testFlip() {
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.flip();
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), 0);
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.limit(), oldPosition);
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.reset();
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidMarkException e) {
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testHasRemaining() {
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.hasRemaining(), baseBuf.position() < baseBuf.limit());
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertFalse(baseBuf.hasRemaining());
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testIsReadOnly() {
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.isReadOnly();
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for int limit()
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testLimit() {
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for Buffer limit(int)
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testLimitint() {
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.limit(baseBuf.limit());
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(baseBuf.capacity());
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.limit(), baseBuf.capacity());
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // position should not change
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // mark should be valid
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (baseBuf.capacity() > 0) {
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.limit(baseBuf.capacity());
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.position(baseBuf.capacity());
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.mark();
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.limit(baseBuf.capacity() - 1);
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // position should be the new limit
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(baseBuf.position(), baseBuf.limit());
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // mark should be invalid
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                baseBuf.reset();
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Should throw Exception"); //$NON-NLS-1$
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidMarkException e) {
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.limit(-1);
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.limit(baseBuf.capacity() + 1);
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testMark() {
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.mark();
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for int position()
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testPosition() {
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertTrue(0 <= baseBuf.position() && baseBuf.position() <= baseBuf.limit()
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                && baseBuf.limit() <= baseBuf.capacity());
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    /*
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     * Class under test for Buffer position(int)
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes     */
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testPositionint() {
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.position(-1);
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.position(baseBuf.limit() + 1);
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (IllegalArgumentException e) {
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.position());
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(0);
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), 0);
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), baseBuf.limit());
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        if (baseBuf.capacity() > 0) {
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.limit(baseBuf.capacity());
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.position(baseBuf.limit());
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.mark();
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.position(baseBuf.limit() - 1);
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            assertEquals(baseBuf.position(), baseBuf.limit() - 1);
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // mark should be invalid
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            try {
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                baseBuf.reset();
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                fail("Should throw Exception"); //$NON-NLS-1$
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            } catch (InvalidMarkException e) {
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                // expected
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            }
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.position(0);
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRemaining() {
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.remaining(), baseBuf.limit() - baseBuf.position());
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testReset() {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.mark();
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(baseBuf.limit());
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.reset();
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), oldPosition);
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.reset();
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.clear();
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.reset();
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidMarkException e) {
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void testRewind() {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // save state
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldPosition = baseBuf.position();
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        int oldLimit = baseBuf.limit();
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Buffer ret = baseBuf.rewind();
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(baseBuf.position(), 0);
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertSame(ret, baseBuf);
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        try {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            baseBuf.reset();
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            fail("Should throw Exception"); //$NON-NLS-1$
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        } catch (InvalidMarkException e) {
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes            // expected
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        }
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // restore state
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.limit(oldLimit);
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        baseBuf.position(oldPosition);
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
307