Skip to content

Commit

Permalink
[INTERNAL] sap.m.Fiori20Adapter: Property change listener checks prop…
Browse files Browse the repository at this point in the history
…erty name

Background:
The Header Adapter registers property change listener for changes in the property values of the adapted sap.m.Text/sap.m.Title and sap.n.Button controls

Problem:
Check for the exact name of the property name in the property change listener was omitted => resulted in processing of unrelated property changes

Solution:
Ensured check for the name of the changed property

Change-Id: I2681a8d87953ab26749e9a57c09a3154db710864
BCP: 002075129400002890412018
(cherry picked from commit 28ca1e1)
CR-Id: 002075125900002474022018
  • Loading branch information
kineticjs committed Jul 3, 2018
1 parent cad2ac9 commit fc0a197
Show file tree
Hide file tree
Showing 2 changed files with 80 additions and 4 deletions.
16 changes: 12 additions & 4 deletions src/sap.m/src/sap/m/Fiori20Adapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ sap.ui.define(['jquery.sap.global', 'sap/ui/base/Object', 'sap/ui/base/EventProv
id: oTitle.getId(),
text: oTitle.getText(),
oControl: oTitle,
sChangeEventId: "_change"
sChangeEventId: "_change",
sPropertyName: "text"
};
}
}
Expand All @@ -157,7 +158,8 @@ sap.ui.define(['jquery.sap.global', 'sap/ui/base/Object', 'sap/ui/base/EventProv
id: oHeaderTitle.getId(),
text: oHeaderTitle.getObjectTitle(),
oControl: oHeaderTitle,
sChangeEventId: "_titleChange"
sChangeEventId: "_titleChange",
sPropertyName: "objectTitle"
};
}
}
Expand All @@ -174,7 +176,8 @@ sap.ui.define(['jquery.sap.global', 'sap/ui/base/Object', 'sap/ui/base/EventProv
return {
id: oBackButton.getId(),
oControl: oBackButton,
sChangeEventId: "_change"
sChangeEventId: "_change",
sPropertyName: "visible"
};
}
}
Expand Down Expand Up @@ -693,6 +696,9 @@ sap.ui.define(['jquery.sap.global', 'sap/ui/base/Object', 'sap/ui/base/EventProv

var fnChangeListener = function (oEvent) {
var oTitleInfo = aTitleInfoCache[sViewId];
if (oEvent.getParameter("name") !== oTitleInfo.sPropertyName) {
return; // different property changed
}
oTitleInfo.text = oEvent.getParameter("newValue");
this._fireViewChange(sViewId, oAdaptOptions);
}.bind(this);
Expand All @@ -709,7 +715,9 @@ sap.ui.define(['jquery.sap.global', 'sap/ui/base/Object', 'sap/ui/base/EventProv
if (oControlInfo && oControlInfo.oControl && oControlInfo.sChangeEventId && !oInfoToMerge.aChangeListeners[oControlInfo.id]) {

var fnChangeListener = function (oEvent) {

if (oEvent.getParameter("name") !== oControlInfo.sPropertyName) {
return; // different property changed
}
bVisible = oEvent.getParameter("newValue"); //actualize the value
if (!bVisible) {
jQuery.each(aControlInfoCache, function(iIndex, oCachedControlInfo) {
Expand Down
68 changes: 68 additions & 0 deletions src/sap.m/test/sap/m/qunit/Fiori20Adapter.qunit.html
Original file line number Diff line number Diff line change
Expand Up @@ -495,6 +495,55 @@
Fiori20Adapter.detachViewChange(oSpy);
});

QUnit.test("Button visibility is post adapted", function(assert) {
var oAdaptOptions = {bHideBackButton: true},
oBackButton = new sap.m.Button("newBackButton", {type: "Back", visible: false}),
oChangedBackButton,
fnViewListener = function(oEvent) {
oChangedBackButton = oEvent.getParameter("oBackButton");
},
oSpy = sinon.spy(fnViewListener);

this.oPage.setCustomHeader(new sap.m.Bar({
contentLeft: [oBackButton]
}));
Fiori20Adapter.traverse(this.oApp, oAdaptOptions);
Fiori20Adapter.attachViewChange(oSpy);

oBackButton.setVisible(true);

// Assert
assert.strictEqual(oSpy.callCount, 1, "change is fired");
assert.strictEqual(oChangedBackButton.getVisible(), true, "correct change is fired");

// cleanup
Fiori20Adapter.detachViewChange(oSpy);
});

QUnit.test("Unrelated button properties are skipped in post adaptation", function(assert) {
var oAdaptOptions = {bHideBackButton: true},
oBackButton = new sap.m.Button("newBackButton", {type: "Back", visible: false}),
oChangedBackButton,
fnViewListener = function(oEvent) {
oChangedBackButton = oEvent.getParameter("oBackButton");
},
oSpy = sinon.spy(fnViewListener);

this.oPage.setCustomHeader(new sap.m.Bar({
contentLeft: [oBackButton]
}));
Fiori20Adapter.traverse(this.oApp, oAdaptOptions);
Fiori20Adapter.attachViewChange(oSpy);

// Act: change unrelated property
oBackButton.setText("Back");

// Assert
assert.strictEqual(oSpy.callCount, 0, "no change is fired");

// cleanup
Fiori20Adapter.detachViewChange(oSpy);
});

QUnit.test("Header is adapted if page body content is inserted at a later time", function(assert) {
var oAdaptOptions = {bMoveTitle: true, bHideBackButton: true, bCollapseHeader: true},
Expand Down Expand Up @@ -1610,6 +1659,25 @@
Fiori20Adapter.detachViewChange(fnTitleListener);
});

QUnit.test("Only text of title is adapted if changed at a later time", function(assert) {
var oAdaptOptions = {bMoveTitle: true, bHideBackButton: true, bCollapseHeader: true},
oTitleInfo,
fnTitleListener = function(oEvent) {
oTitleInfo = oEvent.getParameter("oTitleInfo");
};
Fiori20Adapter.traverse(this.oPage, oAdaptOptions);
Fiori20Adapter.attachViewChange(fnTitleListener);

// Act: change unrelated property
this.oPage.byId("title").setMaxLines(1);

// Assert
assert.ok(!oTitleInfo, "no change is fired");

//cleanup
Fiori20Adapter.detachViewChange(fnTitleListener);
});

QUnit.test("Header is adapted if changed at a later time", function(assert) {
var oAdaptOptions = {bMoveTitle: true, bHideBackButton: true, bCollapseHeader: true},
oTitleInfo,
Expand Down

0 comments on commit fc0a197

Please sign in to comment.