1
0
mirror of https://github.com/matrix-org/matrix-js-sdk.git synced 2025-11-29 16:43:09 +03:00

make the tests pass again

This commit is contained in:
Matthew Hodgson
2016-08-30 23:34:11 +01:00
parent e18b446190
commit d25d60f0f0
4 changed files with 61 additions and 52 deletions

View File

@@ -21,6 +21,16 @@ var EventEmitter = require("events").EventEmitter;
var utils = require("../utils"); var utils = require("../utils");
var EventTimeline = require("./event-timeline"); var EventTimeline = require("./event-timeline");
// var DEBUG = false;
var DEBUG = true;
if (DEBUG) {
// using bind means that we get to keep useful line numbers in the console
var debuglog = console.log.bind(console);
} else {
var debuglog = function() {};
}
/** /**
* Construct a set of EventTimeline objects, typically on behalf of a given * Construct a set of EventTimeline objects, typically on behalf of a given
* room. A room may have multiple EventTimelineSets for different levels * room. A room may have multiple EventTimelineSets for different levels
@@ -82,6 +92,18 @@ EventTimelineList.prototype.getLiveTimeline = function(filterId) {
return this._liveTimeline; return this._liveTimeline;
}; };
EventTimelineList.prototype.eventIdToTimeline = function(eventId) {
return this._eventIdToTimeline[eventId];
};
EventTimelineList.prototype.replaceEventId = function(oldEventId, newEventId) {
var existingTimeline = this._eventIdToTimeline[oldEventId];
if (existingTimeline) {
delete this._eventIdToTimeline[oldEventId];
this._eventIdToTimeline[newEventId] = existingTimeline;
}
};
/** /**
* Reset the live timeline, and start a new one. * Reset the live timeline, and start a new one.
* *
@@ -149,7 +171,7 @@ EventTimelineList.prototype.findEventById = function(eventId) {
}; };
/** /**
* Add a new timeline to this room * Add a new timeline to this timeline list
* *
* @return {module:models/event-timeline~EventTimeline} newly-created timeline * @return {module:models/event-timeline~EventTimeline} newly-created timeline
*/ */
@@ -360,7 +382,7 @@ EventTimelineList.prototype.addLiveEvent = function(event, duplicateStrategy) {
for (var j = 0; j < tlEvents.length; j++) { for (var j = 0; j < tlEvents.length; j++) {
if (tlEvents[j].getId() === event.getId()) { if (tlEvents[j].getId() === event.getId()) {
// still need to set the right metadata on this event // still need to set the right metadata on this event
this.setEventMetadata( EventTimeline.setEventMetadata(
event, event,
timeline.getState(EventTimeline.FORWARDS), timeline.getState(EventTimeline.FORWARDS),
false false
@@ -421,29 +443,6 @@ EventTimelineList.prototype.replaceOrAddEvent = function(localEvent, oldEventId,
} }
}; };
/**
* Helper method to set sender and target properties, private to Room and EventTimelineList
*/
EventTimelineList.prototype.setEventMetadata = function(event, stateContext, toStartOfTimeline) {
event.sender = stateContext.getSentinelMember(
event.getSender()
);
if (event.getType() === "m.room.member") {
event.target = stateContext.getSentinelMember(
event.getStateKey()
);
}
if (event.isState()) {
// room state has no concept of 'old' or 'current', but we want the
// room state to regress back to previous values if toStartOfTimeline
// is set, which means inspecting prev_content if it exists. This
// is done by toggling the forwardLooking flag.
if (toStartOfTimeline) {
event.forwardLooking = false;
}
}
}
/** /**
* Removes a single event from this room. * Removes a single event from this room.
* *

View File

@@ -217,7 +217,7 @@ EventTimeline.prototype.setNeighbouringTimeline = function(neighbour, direction)
EventTimeline.prototype.addEvent = function(event, atStart) { EventTimeline.prototype.addEvent = function(event, atStart) {
var stateContext = atStart ? this._startState : this._endState; var stateContext = atStart ? this._startState : this._endState;
setEventMetadata(event, stateContext, atStart); EventTimeline.setEventMetadata(event, stateContext, atStart);
// modify state // modify state
if (event.isState()) { if (event.isState()) {
@@ -233,7 +233,7 @@ EventTimeline.prototype.addEvent = function(event, atStart) {
// member event, whereas we want to set the .sender value for the ACTUAL // member event, whereas we want to set the .sender value for the ACTUAL
// member event itself. // member event itself.
if (!event.sender || (event.getType() === "m.room.member" && !atStart)) { if (!event.sender || (event.getType() === "m.room.member" && !atStart)) {
setEventMetadata(event, stateContext, atStart); EventTimeline.setEventMetadata(event, stateContext, atStart);
} }
} }
@@ -251,7 +251,10 @@ EventTimeline.prototype.addEvent = function(event, atStart) {
} }
}; };
function setEventMetadata(event, stateContext, toStartOfTimeline) { /**
* Static helper method to set sender and target properties
*/
EventTimeline.setEventMetadata = function(event, stateContext, toStartOfTimeline) {
// set sender and target properties // set sender and target properties
event.sender = stateContext.getSentinelMember( event.sender = stateContext.getSentinelMember(
event.getSender() event.getSender()

View File

@@ -256,6 +256,15 @@ Room.prototype.getTimelineForEvent = function(eventId) {
return this._timelineLists[0].getTimelineForEvent(eventId); return this._timelineLists[0].getTimelineForEvent(eventId);
}; };
/**
* Add a new timeline to this room's unfiltered timeline list
*
* @return {module:models/event-timeline~EventTimeline} newly-created timeline
*/
Room.prototype.addTimeline = function() {
return this._timelineLists[0].addTimeline();
};
/** /**
* Get an event which is stored in our unfiltered timeline set * Get an event which is stored in our unfiltered timeline set
* *
@@ -264,7 +273,7 @@ Room.prototype.getTimelineForEvent = function(eventId) {
*/ */
Room.prototype.findEventById = function(eventId) { Room.prototype.findEventById = function(eventId) {
return this._timelineLists[0].findEventById(eventId); return this._timelineLists[0].findEventById(eventId);
} };
/** /**
* Get one of the notification counts for this room * Get one of the notification counts for this room
@@ -578,7 +587,7 @@ Room.prototype.addPendingEvent = function(event, txnId) {
// call setEventMetadata to set up event.sender etc // call setEventMetadata to set up event.sender etc
// as event is shared over all timelinelists, we set up its metadata based // as event is shared over all timelinelists, we set up its metadata based
// on the unfiltered timelineList. // on the unfiltered timelineList.
this._timelineLists[0].setEventMetadata( EventTimeline.setEventMetadata(
event, event,
this._timelineLists[0].getLiveTimeline().getState(EventTimeline.FORWARDS), this._timelineLists[0].getLiveTimeline().getState(EventTimeline.FORWARDS),
false false
@@ -696,7 +705,7 @@ Room.prototype.updatePendingEvent = function(event, newStatus, newEventId) {
// SENT races against /sync, so we have to special-case it. // SENT races against /sync, so we have to special-case it.
if (newStatus == EventStatus.SENT) { if (newStatus == EventStatus.SENT) {
var timeline = this._eventIdToTimeline[newEventId]; var timeline = this._timelineLists[0].eventIdToTimeline(newEventId);
if (timeline) { if (timeline) {
// we've already received the event via the event stream. // we've already received the event via the event stream.
// nothing more to do here. // nothing more to do here.
@@ -727,10 +736,8 @@ Room.prototype.updatePendingEvent = function(event, newStatus, newEventId) {
// if the event was already in the timeline (which will be the case if // if the event was already in the timeline (which will be the case if
// opts.pendingEventOrdering==chronological), we need to update the // opts.pendingEventOrdering==chronological), we need to update the
// timeline map. // timeline map.
var existingTimeline = this._eventIdToTimeline[oldEventId]; for (var i = 0; i < this._timelineLists.length; i++) {
if (existingTimeline) { this._timelineLists[i].replaceEventId(oldEventId, newEventId);
delete this._eventIdToTimeline[oldEventId];
this._eventIdToTimeline[newEventId] = existingTimeline;
} }
} }
else if (newStatus == EventStatus.CANCELLED) { else if (newStatus == EventStatus.CANCELLED) {

View File

@@ -479,14 +479,14 @@ describe("Room", function() {
it("should handle events in the same timeline", function() { it("should handle events in the same timeline", function() {
room.addLiveEvents(events); room.addLiveEvents(events);
expect(room.compareEventOrdering(events[0].getId(), expect(room._timelineLists[0].compareEventOrdering(events[0].getId(),
events[1].getId())) events[1].getId()))
.toBeLessThan(0); .toBeLessThan(0);
expect(room.compareEventOrdering(events[2].getId(), expect(room._timelineLists[0].compareEventOrdering(events[2].getId(),
events[1].getId())) events[1].getId()))
.toBeGreaterThan(0); .toBeGreaterThan(0);
expect(room.compareEventOrdering(events[1].getId(), expect(room._timelineLists[0].compareEventOrdering(events[1].getId(),
events[1].getId())) events[1].getId()))
.toEqual(0); .toEqual(0);
}); });
@@ -498,11 +498,11 @@ describe("Room", function() {
room.addEventsToTimeline([events[0]], false, oldTimeline); room.addEventsToTimeline([events[0]], false, oldTimeline);
room.addLiveEvents([events[1]]); room.addLiveEvents([events[1]]);
expect(room.compareEventOrdering(events[0].getId(), expect(room._timelineLists[0].compareEventOrdering(events[0].getId(),
events[1].getId())) events[1].getId()))
.toBeLessThan(0); .toBeLessThan(0);
expect(room.compareEventOrdering(events[1].getId(), expect(room._timelineLists[0].compareEventOrdering(events[1].getId(),
events[0].getId())) events[0].getId()))
.toBeGreaterThan(0); .toBeGreaterThan(0);
}); });
@@ -512,22 +512,22 @@ describe("Room", function() {
room.addEventsToTimeline([events[0]], false, oldTimeline); room.addEventsToTimeline([events[0]], false, oldTimeline);
room.addLiveEvents([events[1]]); room.addLiveEvents([events[1]]);
expect(room.compareEventOrdering(events[0].getId(), expect(room._timelineLists[0].compareEventOrdering(events[0].getId(),
events[1].getId())) events[1].getId()))
.toBe(null); .toBe(null);
expect(room.compareEventOrdering(events[1].getId(), expect(room._timelineLists[0].compareEventOrdering(events[1].getId(),
events[0].getId())) events[0].getId()))
.toBe(null); .toBe(null);
}); });
it("should return null for unknown events", function() { it("should return null for unknown events", function() {
room.addLiveEvents(events); room.addLiveEvents(events);
expect(room.compareEventOrdering(events[0].getId(), "xxx")) expect(room._timelineLists[0].compareEventOrdering(events[0].getId(), "xxx"))
.toBe(null); .toBe(null);
expect(room.compareEventOrdering("xxx", events[0].getId())) expect(room._timelineLists[0].compareEventOrdering("xxx", events[0].getId()))
.toBe(null); .toBe(null);
expect(room.compareEventOrdering(events[0].getId(), expect(room._timelineLists[0].compareEventOrdering(events[0].getId(),
events[0].getId())) events[0].getId()))
.toBe(0); .toBe(0);
}); });