mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix(angular.copy): change angular.copy to correcly clone RegExp
angular.copy previously copied RegExp as an empty object. Change detects RegExp instance and clones into new RegExp. This change is based on a previous fix to allow Date to be copied. Closes #3473 Closes #3474
This commit is contained in:
parent
43997c1540
commit
f80730f497
2 changed files with 25 additions and 0 deletions
|
|
@ -611,6 +611,8 @@ function copy(source, destination){
|
|||
destination = copy(source, []);
|
||||
} else if (isDate(source)) {
|
||||
destination = new Date(source.getTime());
|
||||
} else if (isRegExp(source)) {
|
||||
destination = new RegExp(source.source);
|
||||
} else if (isObject(source)) {
|
||||
destination = copy(source, {});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -31,6 +31,29 @@ describe('angular', function() {
|
|||
expect(copy(date) === date).toBeFalsy();
|
||||
});
|
||||
|
||||
it("should copy RegExp", function() {
|
||||
var re = new RegExp(".*");
|
||||
expect(copy(re) instanceof RegExp).toBeTruthy();
|
||||
expect(copy(re).source).toBe(".*");
|
||||
expect(copy(re) === re).toBe(false);
|
||||
});
|
||||
|
||||
it("should copy literal RegExp", function() {
|
||||
var re = /.*/;
|
||||
expect(copy(re) instanceof RegExp).toBeTruthy();
|
||||
expect(copy(re).source).toEqual(".*");
|
||||
expect(copy(re) === re).toBeFalsy();
|
||||
});
|
||||
|
||||
it("should deeply copy literal RegExp", function() {
|
||||
var objWithRegExp = {
|
||||
re: /.*/
|
||||
};
|
||||
expect(copy(objWithRegExp).re instanceof RegExp).toBeTruthy();
|
||||
expect(copy(objWithRegExp).re.source).toEqual(".*");
|
||||
expect(copy(objWithRegExp.re) === objWithRegExp.re).toBeFalsy();
|
||||
});
|
||||
|
||||
it("should deeply copy an array into an existing array", function() {
|
||||
var src = [1, {name:"value"}];
|
||||
var dst = [{key:"v"}];
|
||||
|
|
|
|||
Loading…
Reference in a new issue