/* Copyright (c) 2015 Timothy Wall, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
* <p/>
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package com.sun.jna.platform.unix;
import java.awt.GraphicsEnvironment;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.ptr.IntByReference;
import junit.framework.TestCase;
import org.junit.Assert;
/**
* Exercise the {@link X11} class.
*
* @author twalljava@java.net
*/
// @SuppressWarnings("unused")
public class X11Test extends TestCase {
private X11.Display display = null;
private X11.Window root = null;
@Override
protected void setUp() {
if (!GraphicsEnvironment.isHeadless()) {
display = X11.INSTANCE.XOpenDisplay(null);
if (display == null) {
throw new IllegalStateException("Can't open default display");
}
root = X11.INSTANCE.XRootWindow(display, X11.INSTANCE.XDefaultScreen(display));
if (root == null) {
throw new IllegalStateException("Can't find root window");
}
}
}
@Override
protected void tearDown() {
if (display != null) {
X11.INSTANCE.XCloseDisplay(display);
}
}
@Override
protected void runTest() throws Throwable {
if (!GraphicsEnvironment.isHeadless()) {
super.runTest();
}
}
public void testXrender() {
X11.Xrender.XRenderPictFormat s = new X11.Xrender.XRenderPictFormat();
s.getPointer().setInt(0, 25);
s.read();
}
public void testXFetchName() {
PointerByReference pref = new PointerByReference();
int status = X11.INSTANCE.XFetchName(display, root, pref);
try {
assertEquals("Bad status for XFetchName", 0, status);
}
finally {
if (pref.getValue() != null) {
X11.INSTANCE.XFree(pref.getValue());
}
}
}
public void testXSetWMProtocols() {
X11.Atom[] atoms = new X11.Atom[]{ X11.INSTANCE.XInternAtom(display, "WM_DELETE_WINDOW", false), X11.INSTANCE.XInternAtom(display, "WM_TAKE_FOCUS", false) };
int status = X11.INSTANCE.XSetWMProtocols(display, root, atoms, atoms.length);
Assert.assertNotEquals("Bad status for XSetWMProtocols", 0, status);
}
public void testXGetWMProtocols() {
X11.Atom[] sentAtoms = new X11.Atom[]{ X11.INSTANCE.XInternAtom(display, "WM_DELETE_WINDOW", false), X11.INSTANCE.XInternAtom(display, "WM_TAKE_FOCUS", false) };
X11.INSTANCE.XSetWMProtocols(display, root, sentAtoms, sentAtoms.length);
PointerByReference protocols = new PointerByReference();
IntByReference count = new IntByReference();
int status = X11.INSTANCE.XGetWMProtocols(display, root, protocols, count);
X11.Atom[] receivedAtoms = new X11.Atom[count.getValue()];
for(int i = count.getValue() - 1; i >= 0; i--) {
receivedAtoms[i] = new X11.Atom(protocols.getValue().getLong(X11.Atom.SIZE * i));
}
X11.INSTANCE.XFree(protocols.getValue());
Assert.assertNotEquals("Bad status for XGetWMProtocols", 0, status);
Assert.assertEquals("Wrong number of protocols returned for XGetWMProtocols", sentAtoms.length, receivedAtoms.length);
Assert.assertArrayEquals("Sent protocols were not equal to returned procols for XGetWMProtocols", sentAtoms, receivedAtoms);
}
public static void main(java.lang.String[] argList) {
junit.textui.TestRunner.run(X11Test.class);
}
}