package org.rapidoid.buffer; import org.rapidoid.annotation.Authors; import org.rapidoid.annotation.Since; import org.rapidoid.data.KeyValueRanges; import org.rapidoid.data.BufRange; import org.rapidoid.test.TestCommons; import java.nio.ByteBuffer; /* * #%L * rapidoid-buffer * %% * Copyright (C) 2014 - 2017 Nikolche Mihajlovski and contributors * %% * 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. * #L% */ @Authors("Nikolche Mihajlovski") @Since("2.0.0") public class BufferTestCommons extends TestCommons { protected void eq(String whole, BufRange range, String expected) { eq(range.get(whole), expected); } protected void eqs(String whole, KeyValueRanges ranges, String... keysAndValues) { eq(keysAndValues.length % 2, 0); eq(ranges.count, keysAndValues.length / 2); for (int i = 0; i < ranges.count; i++) { BufRange key = ranges.keys[i]; BufRange value = ranges.values[i]; eq(whole, key, keysAndValues[i * 2]); eq(whole, value, keysAndValues[i * 2 + 1]); } } protected void eq(BufRange range, int start, int length) { eq(range.start, start); eq(range.length, length); } protected void isNone(BufRange range) { eq(range.start, -1); eq(range.length, 0); } protected void eq(Buf buf, String expected) { eq(buf.size(), expected.getBytes().length); eq(buf.data(), expected); byte[] bbytes = new byte[buf.size()]; ByteBuffer bufy = ByteBuffer.wrap(bbytes); buf.writeTo(bufy); eq(new String(bbytes), expected); int size = (int) Math.ceil(expected.length() * 1.0 / buf.unitSize()); isTrue(buf.unitCount() == size || buf.unitCount() == size + 1); byte[] bytes = expected.getBytes(); synchronized (buf) { for (int i = 0; i < bytes.length; i++) { eq((char) buf.get(i), (char) bytes[i]); } } for (int len = 2; len < 10; len++) { for (int p = 0; p <= buf.size() - len; p++) { String sub = buf.get(new BufRange(p, len)); eq(sub, expected.substring(p, p + len)); } } } protected Buf buf(String content) { BufGroup bufs = new BufGroup(4); Buf buf = bufs.newBuf(); eq(buf, ""); buf.append(content); return buf; } }