aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java195
1 files changed, 195 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java b/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
new file mode 100644
index 000000000..5d1804102
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.gldebugger.tests/src/com/android/ide/eclipse/gltrace/format/GLMessageFormatterTest.java
@@ -0,0 +1,195 @@
+/*
+ * Copyright (C) 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.ide.eclipse.gltrace.format;
+
+import static org.junit.Assert.*;
+
+import com.android.ide.eclipse.gltrace.GLEnum;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Builder;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.DataType;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.DataType.Type;
+import com.android.ide.eclipse.gltrace.GLProtoBuf.GLMessage.Function;
+import com.google.protobuf.ByteString;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class GLMessageFormatterTest {
+ private static final List<String> API_SPECS = Arrays.asList(
+ "void, glBindBuffer, GLenum target, GLuint buffer",
+ "const GLchar*, glGetString, GLenum name",
+ "void, glMultMatrixf, const GLfloat* m",
+ "GLenum, eglBindAPI, GLEnum arg",
+ "void, glGetActiveAttrib, GLenum* type",
+ "void, glTexImage2D, GLint level, GLsizei width, const GLvoid* pixels");
+ private static GLMessageFormatter sGLMessageFormatter;
+
+ static {
+ Map<String, GLAPISpec> specs = new HashMap<String, GLAPISpec>(API_SPECS.size());
+
+ for (String specString: API_SPECS) {
+ GLAPISpec spec = GLAPISpec.parseLine(specString);
+ specs.put(spec.getFunction(), spec);
+ }
+
+ sGLMessageFormatter = new GLMessageFormatter(specs);
+ }
+
+ @Test
+ public void testBindBuffer() {
+ GLEnum arg1 = GLEnum.GL_ELEMENT_ARRAY_BUFFER;
+ int arg2 = 10;
+
+ GLMessage msg = constructGLMessage(null, Function.glBindBuffer,
+ createEnumDataType((int)arg1.value),
+ createIntegerDataType(arg2));
+
+ String expected = String.format("glBindBuffer(target = %s, buffer = %s)",
+ arg1.toString(),
+ Integer.toString(arg2));
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testGlGetString() {
+ String retValue = "testString";
+ GLEnum arg1 = GLEnum.GL_RENDERER;
+
+ GLMessage msg = constructGLMessage(
+ createStringDataType(retValue),
+ Function.glGetString,
+ createEnumDataType((int)arg1.value));
+ String expected = String.format("%s(name = %s) = (const GLchar*) %s", Function.glGetString,
+ arg1.toString(), retValue);
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testGLEnum0() {
+ // an enum of value 0 should equal GL_POINTS if it is an argument,
+ // and GL_NO_ERROR if it is a return value
+ GLMessage msg = constructGLMessage(
+ createEnumDataType(0),
+ Function.eglBindAPI,
+ createEnumDataType(0));
+ String expected = "eglBindAPI(arg = GL_POINTS) = (GLenum) GL_NO_ERROR";
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testMessageWithPointer() {
+ GLMessage msg = constructGLMessage(null,
+ Function.glTexImage2D,
+ createIntegerDataType(1),
+ createIntegerDataType(2),
+ createIntegerPointerDataType(0xbadc0ffe));
+ String expected = "glTexImage2D(level = 1, width = 2, pixels = 0xbadc0ffe)";
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testMessageWithMismatchedPointer() {
+ // "void, glMultMatrixf, const GLfloat* m",
+ GLMessage msg = constructGLMessage(null,
+ Function.glMultMatrixf,
+ createIntegerDataType(0xbadc0ffe));
+
+ String expected = "glMultMatrixf(m = 0xbadc0ffe)";
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testMessageWithEnumPointer() {
+ //void, glGetActiveAttrib, GLenum* type
+ GLMessage msg = constructGLMessage(null,
+ Function.glGetActiveAttrib,
+ createIntegerPointerDataType((int)GLEnum.GL_FLOAT_MAT4.value));
+
+ String expected = "glGetActiveAttrib(type = [GL_FLOAT_MAT4])";
+ String actual = sGLMessageFormatter.formatGLMessage(msg);
+
+ assertEquals(expected, actual);
+ }
+
+ private DataType createStringDataType(String retValue) {
+ return DataType.newBuilder()
+ .addCharValue(ByteString.copyFromUtf8(retValue))
+ .setIsArray(true)
+ .setType(Type.CHAR)
+ .build();
+ }
+
+ private DataType createIntegerDataType(int val) {
+ return DataType.newBuilder()
+ .addIntValue(val)
+ .setIsArray(false)
+ .setType(Type.INT)
+ .build();
+ }
+
+ private DataType createIntegerPointerDataType(int val) {
+ return DataType.newBuilder()
+ .addIntValue(val)
+ .setIsArray(true)
+ .setType(Type.INT)
+ .build();
+ }
+
+ private DataType createEnumDataType(int val) {
+ return DataType.newBuilder()
+ .addIntValue(val)
+ .setIsArray(false)
+ .setType(Type.ENUM)
+ .build();
+ }
+
+ private GLMessage constructGLMessage(DataType retValue, Function func, DataType...args) {
+ Builder builder = GLMessage.newBuilder();
+ builder.setFunction(func);
+
+ // set required fields we don't care about in these tests
+ builder.setContextId(0);
+ builder.setStartTime(0);
+ builder.setDuration(0);
+
+ // set return value if any
+ if (retValue != null) {
+ builder.setReturnValue(retValue);
+ }
+
+ for (DataType arg: args) {
+ builder.addArgs(arg);
+ }
+
+ return builder.build();
+ }
+}