/* ** Copyright 2011, The Android Open Source Project ** ** 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. */ package com.android.glesv2debugger; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import com.android.glesv2debugger.DebuggerMessage.Message; import com.android.glesv2debugger.DebuggerMessage.Message.Function; import com.android.glesv2debugger.DebuggerMessage.Message.Type; import com.google.protobuf.ByteString; import org.junit.Before; import org.junit.Test; import java.nio.ByteBuffer; public class MessageParserExTest { /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { } @Test public void testParseFloats() { final MessageParserEx parser = new MessageParserEx(); final String args = "{0, 1 ,2,3 }"; parser.args = args; final ByteBuffer data = parser.parseFloats(4).asReadOnlyByteBuffer(); data.order(SampleView.targetByteOrder); for (int i = 0; i < 4; i++) assertEquals(i, data.getFloat(), 0); } @Test public void testParseArgument() { final MessageParserEx parser = new MessageParserEx(); final String args = "sdfa = GL_VERTEX_SHADER , -5421 ,0x443=0x54f"; parser.args = args; assertEquals(GLEnum.GL_VERTEX_SHADER.value, parser.parseArgument()); assertEquals(-5421, parser.parseArgument()); assertEquals(0x54f, parser.parseArgument()); } /** * Test method for * {@link com.android.glesv2debugger.MessageParserEx#parse_glShaderSource(com.android.glesv2debugger.DebuggerMessage.Message.Builder)} * . */ @Test public void testParse_glShaderSource() { final Message.Builder builder = Message.newBuilder(); final MessageParserEx messageParserEx = new MessageParserEx(); final String source = "dks \n jafhskjaho { urehg ; } hskjg"; messageParserEx.parse(builder, "void glShaderSource ( shader=4, count= 1, " + "string =\"" + source + "\" , 0x0)"); assertEquals(Function.glShaderSource, builder.getFunction()); assertEquals(4, builder.getArg0()); assertEquals(1, builder.getArg1()); assertEquals(source, builder.getData().toStringUtf8()); assertEquals(0, builder.getArg3()); } @Test public void testParse_glBlendEquation() { assertNotNull(MessageParserEx.instance); final Message.Builder builder = Message.newBuilder(); MessageParserEx.instance.parse(builder, "void glBlendEquation ( mode= GL_ADD ) ; "); assertEquals(Function.glBlendEquation, builder.getFunction()); assertEquals(GLEnum.GL_ADD.value, builder.getArg0()); } /** loopback testing of typical generated MessageFormatter and MessageParser */ @Test public void testParseFormatterMessage() { final ByteBuffer srcData = ByteBuffer.allocate(4 * 2 * 4); srcData.order(SampleView.targetByteOrder); for (int i = 0; i < 4 * 2; i++) srcData.putFloat(i); srcData.rewind(); Message.Builder builder = Message.newBuilder(); builder.setContextId(3752).setExpectResponse(false).setType(Type.CompleteCall); builder.setFunction(Function.glUniformMatrix2fv); builder.setArg0(54).setArg1(2).setArg2(0).setData(ByteString.copyFrom(srcData)); Message msg = builder.build(); builder = msg.toBuilder(); String formatted = MessageFormatter.format(msg, false); formatted = formatted.substring(0, formatted.indexOf('(')) + ' ' + builder.getFunction() + formatted.substring(formatted.indexOf('(')); Message.Builder parsed = Message.newBuilder(); MessageParserEx.instance.parse(parsed, formatted); assertEquals(builder.getFunction(), parsed.getFunction()); assertEquals(builder.getArg0(), parsed.getArg0()); assertEquals(builder.getArg1(), parsed.getArg1()); assertEquals(builder.getArg2(), parsed.getArg2()); assertEquals(builder.getData().toStringUtf8(), parsed.getData().toStringUtf8()); } }