Skip to content

Commit

Permalink
Added a polyfill for Object.assign(), since it's not supported on IE
Browse files Browse the repository at this point in the history
  • Loading branch information
JamesMessinger committed Feb 12, 2019
1 parent f803443 commit 421a6a6
Showing 1 changed file with 27 additions and 15 deletions.
42 changes: 27 additions & 15 deletions test/specs/merge.spec.js
Expand Up @@ -9,7 +9,7 @@ describe("host.merge()", () => {

// Reset the `host` object back to its original state after each test
afterEach("Reset the host object", () => {
Object.assign(host, copy(originalHost));
assign(host, copy(originalHost));
for (let key of Object.keys(host)) {
if (!(key in originalHost)) {
delete host[key];
Expand All @@ -34,7 +34,7 @@ describe("host.merge()", () => {
regexp: /xyz/,
});

expect(host).to.deep.equal(Object.assign(clone, {
expect(host).to.deep.equal(assign(clone, {
boolean: true,
string: "hello, world",
number: 123.456,
Expand All @@ -54,7 +54,7 @@ describe("host.merge()", () => {
undefinedValue: undefined,
});

expect(host).to.deep.equal(Object.assign(clone, {
expect(host).to.deep.equal(assign(clone, {
boolean: false,
string: "",
number: 0,
Expand Down Expand Up @@ -84,7 +84,7 @@ describe("host.merge()", () => {
}
});

expect(host).to.deep.equal(Object.assign(clone, {
expect(host).to.deep.equal(assign(clone, {
emptyObject: {},
object: {
boolean: true,
Expand Down Expand Up @@ -115,10 +115,10 @@ describe("host.merge()", () => {
}
});

expect(host).to.deep.equal(Object.assign(clone, {
expect(host).to.deep.equal(assign(clone, {
node: false,
browser: false,
os: Object.assign({}, clone.os, {
os: assign({}, clone.os, {
windows95: false,
windowsVista: true,
})
Expand Down Expand Up @@ -158,28 +158,40 @@ describe("host.merge()", () => {
* Helper function to create deep copies of the `host` object.
*/
function copy (source) {
let clone = Object.assign({}, source);
clone.os = Object.assign({}, source.os);
clone.env = Object.assign({}, source.env);
let clone = assign({}, source);
clone.os = assign({}, source.os);
clone.env = assign({}, source.env);

if (source.node) {
clone.node = Object.assign({}, source.node);
clone.node = assign({}, source.node);
}

if (source.browser) {
clone.browser = {
IE: source.browser.IE ? Object.assign({}, source.browser.IE) : source.browser.IE,
edge: source.browser.edge ? Object.assign({}, source.browser.edge) : source.browser.edge,
chrome: source.browser.chrome ? Object.assign({}, source.browser.chrome) : source.browser.chrome,
firefox: source.browser.firefox ? Object.assign({}, source.browser.firefox) : source.browser.firefox,
safari: source.browser.safari ? Object.assign({}, source.browser.safari) : source.browser.safari,
IE: source.browser.IE ? assign({}, source.browser.IE) : source.browser.IE,
edge: source.browser.edge ? assign({}, source.browser.edge) : source.browser.edge,
chrome: source.browser.chrome ? assign({}, source.browser.chrome) : source.browser.chrome,
firefox: source.browser.firefox ? assign({}, source.browser.firefox) : source.browser.firefox,
safari: source.browser.safari ? assign({}, source.browser.safari) : source.browser.safari,
mobile: source.browser.mobile,
};
}

return clone;
}

/**
* A simple implementation of `Object.assign()`, since IE 11 doesn't support it.
*/
function assign (target, ...sources) {
for (let source of sources) {
for (let key of Object.keys(source)) {
target[key] = source[key];
}
}
return target;
}

/**
* Helper function to call `host.merge()` with the specified value, to check for errors.
*/
Expand Down

0 comments on commit 421a6a6

Please sign in to comment.