Merge "Fix diff mode selector initial state"
This commit is contained in:
@@ -334,6 +334,12 @@
|
|||||||
|
|
||||||
_resetFileListViewState: function() {
|
_resetFileListViewState: function() {
|
||||||
this.set('viewState.selectedFileIndex', 0);
|
this.set('viewState.selectedFileIndex', 0);
|
||||||
|
if (!!this.viewState.changeNum &&
|
||||||
|
this.viewState.changeNum !== this._changeNum) {
|
||||||
|
// Reset the diff mode to null when navigating from one change to
|
||||||
|
// another, so that the user's preference is restored.
|
||||||
|
this.set('viewState.diffMode', null);
|
||||||
|
}
|
||||||
this.set('viewState.changeNum', this._changeNum);
|
this.set('viewState.changeNum', this._changeNum);
|
||||||
this.set('viewState.patchRange', this._patchRange);
|
this.set('viewState.patchRange', this._patchRange);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -165,6 +165,36 @@ limitations under the License.
|
|||||||
assert.deepEqual(element._diffDrafts, {});
|
assert.deepEqual(element._diffDrafts, {});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('change num change', function() {
|
||||||
|
element._changeNum = null;
|
||||||
|
element._patchRange = {
|
||||||
|
basePatchNum: 'PARENT',
|
||||||
|
patchNum: 2,
|
||||||
|
};
|
||||||
|
element._change = {
|
||||||
|
change_id: 'Iad9dc96274af6946f3632be53b106ef80f7ba6ca',
|
||||||
|
labels: {},
|
||||||
|
};
|
||||||
|
element.viewState.changeNum = null;
|
||||||
|
element.viewState.diffMode = 'UNIFIED';
|
||||||
|
flushAsynchronousOperations();
|
||||||
|
assert.equal(element.viewState.diffMode, 'UNIFIED');
|
||||||
|
|
||||||
|
element._changeNum = '1';
|
||||||
|
element.params = {changeNum: '1'};
|
||||||
|
element._change.newProp = '1';
|
||||||
|
flushAsynchronousOperations();
|
||||||
|
assert.equal(element.viewState.diffMode, 'UNIFIED');
|
||||||
|
assert.equal(element.viewState.changeNum, '1');
|
||||||
|
|
||||||
|
element._changeNum = '2';
|
||||||
|
element.params = {changeNum: '2'};
|
||||||
|
element._change.newProp = '2';
|
||||||
|
flushAsynchronousOperations();
|
||||||
|
assert.isNull(element.viewState.diffMode);
|
||||||
|
assert.equal(element.viewState.changeNum, '2');
|
||||||
|
});
|
||||||
|
|
||||||
test('patch num change', function(done) {
|
test('patch num change', function(done) {
|
||||||
element._changeNum = '42';
|
element._changeNum = '42';
|
||||||
element._patchRange = {
|
element._patchRange = {
|
||||||
@@ -183,7 +213,9 @@ limitations under the License.
|
|||||||
status: 'NEW',
|
status: 'NEW',
|
||||||
labels: {},
|
labels: {},
|
||||||
};
|
};
|
||||||
|
element.viewState.diffMode = 'UNIFIED';
|
||||||
flushAsynchronousOperations();
|
flushAsynchronousOperations();
|
||||||
|
|
||||||
var selectEl = element.$$('.patchInfo-header select');
|
var selectEl = element.$$('.patchInfo-header select');
|
||||||
assert.ok(selectEl);
|
assert.ok(selectEl);
|
||||||
var optionEls = Polymer.dom(element.root).querySelectorAll(
|
var optionEls = Polymer.dom(element.root).querySelectorAll(
|
||||||
@@ -201,6 +233,7 @@ limitations under the License.
|
|||||||
|
|
||||||
var numEvents = 0;
|
var numEvents = 0;
|
||||||
selectEl.addEventListener('change', function(e) {
|
selectEl.addEventListener('change', function(e) {
|
||||||
|
assert.equal(element.viewState.diffMode, 'UNIFIED');
|
||||||
numEvents++;
|
numEvents++;
|
||||||
if (numEvents == 1) {
|
if (numEvents == 1) {
|
||||||
assert(showStub.lastCall.calledWithExactly('/c/42/1'),
|
assert(showStub.lastCall.calledWithExactly('/c/42/1'),
|
||||||
|
|||||||
@@ -105,6 +105,15 @@
|
|||||||
}
|
}
|
||||||
}.bind(this));
|
}.bind(this));
|
||||||
|
|
||||||
|
if (this.changeViewState.diffMode === null) {
|
||||||
|
// Initialize with user's diff mode preference. Default to
|
||||||
|
// SIDE_BY_SIDE in the meantime.
|
||||||
|
this.set('changeViewState.diffMode', DiffViewMode.SIDE_BY_SIDE);
|
||||||
|
this.$.restAPI.getPreferences().then(function(prefs) {
|
||||||
|
this.set('changeViewState.diffMode', prefs.diff_view);
|
||||||
|
}.bind(this));
|
||||||
|
}
|
||||||
|
|
||||||
if (this._path) {
|
if (this._path) {
|
||||||
this.fire('title-change',
|
this.fire('title-change',
|
||||||
{title: this._computeFileDisplayName(this._path)});
|
{title: this._computeFileDisplayName(this._path)});
|
||||||
@@ -113,11 +122,6 @@
|
|||||||
this.$.cursor.push('diffs', this.$.diff);
|
this.$.cursor.push('diffs', this.$.diff);
|
||||||
},
|
},
|
||||||
|
|
||||||
detached: function() {
|
|
||||||
// Reset the diff mode to null so that it reverts to the user preference.
|
|
||||||
this.changeViewState.diffMode = null;
|
|
||||||
},
|
|
||||||
|
|
||||||
_getLoggedIn: function() {
|
_getLoggedIn: function() {
|
||||||
return this.$.restAPI.getLoggedIn();
|
return this.$.restAPI.getLoggedIn();
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -32,6 +32,12 @@ limitations under the License.
|
|||||||
</template>
|
</template>
|
||||||
</test-fixture>
|
</test-fixture>
|
||||||
|
|
||||||
|
<test-fixture id="blank">
|
||||||
|
<template>
|
||||||
|
<div></div>
|
||||||
|
</template>
|
||||||
|
</text-fixture>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
suite('gr-diff-view tests', function() {
|
suite('gr-diff-view tests', function() {
|
||||||
var element;
|
var element;
|
||||||
@@ -394,6 +400,29 @@ limitations under the License.
|
|||||||
assert.equal(element._getDiffViewMode(), diffDisplay.viewMode);
|
assert.equal(element._getDiffViewMode(), diffDisplay.viewMode);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('diff mode selector initializes from preferences', function() {
|
||||||
|
var resolvePrefs;
|
||||||
|
var prefsPromise = new Promise(function(resolve) {
|
||||||
|
resolvePrefs = resolve;
|
||||||
|
});
|
||||||
|
var getPreferencesStub = sinon.stub(element.$.restAPI, 'getPreferences',
|
||||||
|
function() { return prefsPromise; });
|
||||||
|
|
||||||
|
// Attach a new gr-diff-view so we can intercept the preferences fetch.
|
||||||
|
var view = document.createElement('gr-diff-view');
|
||||||
|
var select = view.$.modeSelect;
|
||||||
|
fixture('blank').appendChild(view);
|
||||||
|
flushAsynchronousOperations();
|
||||||
|
|
||||||
|
// At this point the diff mode doesn't yet have the user's preference.
|
||||||
|
assert.equal(select.value, 'SIDE_BY_SIDE');
|
||||||
|
|
||||||
|
// Receive the overriding preference.
|
||||||
|
resolvePrefs({diff_view: 'UNIFIED'});
|
||||||
|
flushAsynchronousOperations();
|
||||||
|
assert.equal(select.value, 'SIDE_BY_SIDE');
|
||||||
|
});
|
||||||
|
|
||||||
test('_loadHash', function() {
|
test('_loadHash', function() {
|
||||||
assert.isNotOk(element.$.cursor.initialLineNumber);
|
assert.isNotOk(element.$.cursor.initialLineNumber);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user