node-x11/test/core-properties.js

90 lines
3.4 KiB
JavaScript

var x11 = require('../lib');
var should = require('should');
var assert = require('assert');
// keep for a while: this snippet helps to track global leak
global.__defineSetter__('valueName', function(v) {
console.trace();
});
describe('Window property', function() {
var display;
var X;
var wid;
beforeEach(function(done) {
var client = x11.createClient(function(err, dpy) {
if (!err) {
display = dpy;
X = display.client;
wid = X.AllocID();
X.CreateWindow(wid, display.screen[0].root, 0, 0, 100, 100, 0, 0, 0, 0, { eventMask: x11.eventMask.PropertyChange});
done();
client.removeListener('error', done); // all future errors should be attached to corresponding test 'done'
} else {
done(err);
}
});
client.on('error', done);
});
afterEach(function(done) {
X.terminate();
X.on('end', done);
X = null;
display = null;
});
it('shuld exist after set with ChangeProperty', function(done) {
X.on('error', done);
var propvalset = "some property value";
X.ChangeProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 8, propvalset);
X.GetProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 0, 10000000, function(err, prop) {
if (err) return done(err);
var propvalget = prop.data.toString();
assert.equal(propvalset, propvalget, 'get property result different from set property value');
done();
});
});
it('should generate PropertyNotify event', function(done) {
X.on('error', done);
var propvalset = "some property value";
X.ChangeProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 8, propvalset);
X.on('event', function(ev) {
if (ev.name === 'PropertyNotify')
{
assert.equal(ev.atom, X.atoms.WM_NAME, 'atom in notification should be same as in ChangeProperty');
// TODO: replace 0 with X.PropertyNewValue
assert.equal(ev.state, 0, 'atom in notification should be same as in ChangeProperty');
assert.equal(ev.window, wid, 'window in notification should be same as in ChangeProperty');
done();
return;
}
done('unexpexted event');
});
});
it('should not exist after DeleteProperty called', function(done) {
X.on('error', done);
var propvalset = "some property value";
X.ChangeProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 8, propvalset);
X.GetProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 0, 10000000, function(err, prop) {
if (err) return done(err);
var propvalget = prop.data.toString();
assert.equal(propvalset, propvalget, 'get property result different from set property value');
X.DeleteProperty(wid, X.atoms.WM_NAME);
X.GetProperty(0, wid, X.atoms.WM_NAME, X.atoms.STRING, 0, 10000000, function(err, prop) {
assert.equal(prop.type, 0, 'non-existent property type should be 0');
assert.equal(prop.data.length, 0, 'non-existent property data length should be 0');
done();
});
});
});
it('should exist in the ListProperties result after inserted');
it('should not exist after GetProperty with delete flag called');
//it('should not exist after GetProperty with delete flag called', function(done) {
// done();
//});
});