Skip to content
This repository has been archived by the owner on Sep 11, 2024. It is now read-only.

Make tests pass on Chrome again #663

Merged
merged 1 commit into from
Feb 1, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions karma.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@ module.exports = function (config) {
},
devtool: 'inline-source-map',
},

webpackMiddleware: {
stats: {
// don't fill the console up with a mahoosive list of modules
chunks: false,
},
},

browserNoActivityTimeout: 15000,
});
};
10 changes: 5 additions & 5 deletions src/components/structures/ScrollPanel.js
Original file line number Diff line number Diff line change
Expand Up @@ -570,7 +570,7 @@ module.exports = React.createClass({
var boundingRect = node.getBoundingClientRect();
var scrollDelta = boundingRect.bottom + pixelOffset - wrapperRect.bottom;

debuglog("Scrolling to token '" + node.dataset.scrollToken + "'+" +
debuglog("ScrollPanel: scrolling to token '" + node.dataset.scrollToken + "'+" +
pixelOffset + " (delta: "+scrollDelta+")");

if(scrollDelta != 0) {
Expand All @@ -582,7 +582,7 @@ module.exports = React.createClass({
_saveScrollState: function() {
if (this.props.stickyBottom && this.isAtBottom()) {
this.scrollState = { stuckAtBottom: true };
debuglog("Saved scroll state", this.scrollState);
debuglog("ScrollPanel: Saved scroll state", this.scrollState);
return;
}

Expand All @@ -601,12 +601,12 @@ module.exports = React.createClass({
trackedScrollToken: node.dataset.scrollToken,
pixelOffset: wrapperRect.bottom - boundingRect.bottom,
};
debuglog("Saved scroll state", this.scrollState);
debuglog("ScrollPanel: saved scroll state", this.scrollState);
return;
}
}

debuglog("Unable to save scroll state: found no children in the viewport");
debuglog("ScrollPanel: unable to save scroll state: found no children in the viewport");
},

_restoreSavedScrollState: function() {
Expand Down Expand Up @@ -640,7 +640,7 @@ module.exports = React.createClass({
this._lastSetScroll = scrollNode.scrollTop;
}

debuglog("Set scrollTop:", scrollNode.scrollTop,
debuglog("ScrollPanel: set scrollTop:", scrollNode.scrollTop,
"requested:", scrollTop,
"_lastSetScroll:", this._lastSetScroll);
},
Expand Down
13 changes: 4 additions & 9 deletions test/components/structures/RoomView-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -42,17 +42,12 @@ describe('RoomView', function () {
it('resolves a room alias to a room id', function (done) {
peg.get().getRoomIdForAlias.returns(q({room_id: "!randomcharacters:aser.ver"}));

var onRoomIdResolved = sinon.spy();
function onRoomIdResolved(room_id) {
expect(room_id).toEqual("!randomcharacters:aser.ver");
done();
}

ReactDOM.render(<RoomView roomAddress="#alias:ser.ver" onRoomIdResolved={onRoomIdResolved} />, parentDiv);

process.nextTick(function() {
// These expect()s don't read very well and don't give very good failure
// messages, but expect's toHaveBeenCalled only takes an expect spy object,
// not a sinon spy object.
expect(onRoomIdResolved.called).toExist();
done();
});
});

it('joins by alias if given an alias', function (done) {
Expand Down
30 changes: 25 additions & 5 deletions test/components/structures/ScrollPanel-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,14 +73,15 @@ var Tester = React.createClass({

/* returns a promise which will resolve when the fill happens */
awaitFill: function(dir) {
console.log("ScrollPanel Tester: awaiting " + dir + " fill");
var defer = q.defer();
this._fillDefers[dir] = defer;
return defer.promise;
},

_onScroll: function(ev) {
var st = ev.target.scrollTop;
console.log("Scroll event; scrollTop: " + st);
console.log("ScrollPanel Tester: scroll event; scrollTop: " + st);
this.lastScrollEvent = st;

var d = this._scrollDefer;
Expand Down Expand Up @@ -159,10 +160,29 @@ describe('ScrollPanel', function() {
scrollingDiv = ReactTestUtils.findRenderedDOMComponentWithClass(
tester, "gm-scroll-view");

// wait for a browser tick to let the initial paginates complete
setTimeout(function() {
done();
}, 0);
// we need to make sure we don't call done() until q has finished
// running the completion handlers from the fill requests. We can't
// just use .done(), because that will end up ahead of those handlers
// in the queue. We can't use window.setTimeout(0), because that also might
// run ahead of those handlers.
const sp = tester.scrollPanel();
let retriesRemaining = 1;
const awaitReady = function() {
return q().then(() => {
if (sp._pendingFillRequests.b === false &&
sp._pendingFillRequests.f === false
) {
return;
}

if (retriesRemaining == 0) {
throw new Error("fillRequests did not complete");
}
retriesRemaining--;
return awaitReady();
});
};
awaitReady().done(done);
});

afterEach(function() {
Expand Down
8 changes: 6 additions & 2 deletions test/components/structures/TimelinePanel-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,11 @@ describe('TimelinePanel', function() {
// the document so that we can interact with it properly.
parentDiv = document.createElement('div');
parentDiv.style.width = '800px';
parentDiv.style.height = '600px';

// This has to be slightly carefully chosen. We expect to have to do
// exactly one pagination to fill it.
parentDiv.style.height = '500px';

parentDiv.style.overflow = 'hidden';
document.body.appendChild(parentDiv);
});
Expand Down Expand Up @@ -235,7 +239,7 @@ describe('TimelinePanel', function() {
expect(client.paginateEventTimeline.callCount).toEqual(0);
done();
}, 0);
}, 0);
}, 10);
});

it("should let you scroll down to the bottom after you've scrolled up", function(done) {
Expand Down
8 changes: 8 additions & 0 deletions test/test-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,15 @@ var MatrixEvent = jssdk.MatrixEvent;
*/
export function beforeEach(context) {
var desc = context.currentTest.fullTitle();

console.log();

// this puts a mark in the chrome devtools timeline, which can help
// figure out what's been going on.
if (console.timeStamp) {
console.timeStamp(desc);
}

console.log(desc);
console.log(new Array(1 + desc.length).join("="));
};
Expand Down