Skip to content

Commit

Permalink
fix(ios): setting TextField.value to wrong type triggers change event (
Browse files Browse the repository at this point in the history
…#11778)

Fixes TIMOB-18256
  • Loading branch information
vijaysingh-axway committed Jul 1, 2020
1 parent 9823b0d commit e06f9b5
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 1 deletion.
3 changes: 2 additions & 1 deletion iphone/Classes/TiUITextWidgetProxy.m
Expand Up @@ -119,7 +119,8 @@ - (BOOL)focused:(id)unused

- (void)noteValueChange:(NSString *)newValue
{
if (![[self valueForKey:@"value"] isEqual:newValue]) {
NSString *oldValue = [TiUtils stringValue:[self valueForKey:@"value"]];
if (![oldValue isEqual:newValue]) {
[self replaceValue:newValue forKey:@"value" notification:NO];
[self contentsWillChange];
[self fireEvent:@"change" withObject:[NSDictionary dictionaryWithObject:newValue forKey:@"value"]];
Expand Down
63 changes: 63 additions & 0 deletions tests/Resources/ti.ui.textfield.addontest.js
@@ -0,0 +1,63 @@
/*
* Appcelerator Titanium Mobile
* Copyright (c) 2011-Present by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Apache Public License
* Please see the LICENSE included with this distribution for details.
*/
/* eslint-env titanium, mocha */
/* eslint no-unused-expressions: "off" */
'use strict';
var should = require('./utilities/assertions'),
utilities = require('./utilities/utilities');

describe('Titanium.UI.TextField', function () {
var win;

afterEach(function (done) {
if (win) {
// If `win` is already closed, we're done.
let t = setTimeout(function () {
if (win) {
win = null;
done();
}
}, 3000);

win.addEventListener('close', function listener () {
clearTimeout(t);

if (win) {
win.removeEventListener('close', listener);
}
win = null;
done();
});
win.close();
} else {
win = null;
done();
}
});

// TextField should not receive change event after setting value.
it.ios('change event should not fire after setting textField value', function (finish) {
var textField;
this.timeout(5000);

win = Ti.UI.createWindow();
textField = Ti.UI.createTextField({
value: 123
});
textField.addEventListener('change', function () {
// This should never happen.
finish(new Error('TextField wrongly received change on setting value.'));
});
win.add(textField);
win.addEventListener('postlayout', function listener () {
win.removeEventListener('postlayout', listener);
// If we made it this far, assume TextField did not receive change.
finish();
});
win.open();
});
});

0 comments on commit e06f9b5

Please sign in to comment.