From 6879bc1ea194a9fbd2d929dbb1037f5e2831e714 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Wed, 5 Apr 2017 13:45:51 -0700 Subject: [PATCH] Test that spread removes readonly from properties --- .../reference/spreadTypeRemovesReadonly.js | 22 +++++++++++++++ .../spreadTypeRemovesReadonly.symbols | 22 +++++++++++++++ .../reference/spreadTypeRemovesReadonly.types | 27 +++++++++++++++++++ .../compiler/spreadTypeRemovesReadonly.ts | 7 +++++ 4 files changed, 78 insertions(+) create mode 100644 tests/baselines/reference/spreadTypeRemovesReadonly.js create mode 100644 tests/baselines/reference/spreadTypeRemovesReadonly.symbols create mode 100644 tests/baselines/reference/spreadTypeRemovesReadonly.types create mode 100644 tests/cases/compiler/spreadTypeRemovesReadonly.ts diff --git a/tests/baselines/reference/spreadTypeRemovesReadonly.js b/tests/baselines/reference/spreadTypeRemovesReadonly.js new file mode 100644 index 00000000000..966a5984b45 --- /dev/null +++ b/tests/baselines/reference/spreadTypeRemovesReadonly.js @@ -0,0 +1,22 @@ +//// [spreadTypeRemovesReadonly.ts] +interface ReadonlyData { + readonly value: string; +} + +const data: ReadonlyData = { value: 'foo' }; +const clone = { ...data }; +clone.value = 'bar'; + + +//// [spreadTypeRemovesReadonly.js] +var __assign = (this && this.__assign) || Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; +}; +var data = { value: 'foo' }; +var clone = __assign({}, data); +clone.value = 'bar'; diff --git a/tests/baselines/reference/spreadTypeRemovesReadonly.symbols b/tests/baselines/reference/spreadTypeRemovesReadonly.symbols new file mode 100644 index 00000000000..0d15ca53e0a --- /dev/null +++ b/tests/baselines/reference/spreadTypeRemovesReadonly.symbols @@ -0,0 +1,22 @@ +=== tests/cases/compiler/spreadTypeRemovesReadonly.ts === +interface ReadonlyData { +>ReadonlyData : Symbol(ReadonlyData, Decl(spreadTypeRemovesReadonly.ts, 0, 0)) + + readonly value: string; +>value : Symbol(ReadonlyData.value, Decl(spreadTypeRemovesReadonly.ts, 0, 24)) +} + +const data: ReadonlyData = { value: 'foo' }; +>data : Symbol(data, Decl(spreadTypeRemovesReadonly.ts, 4, 5)) +>ReadonlyData : Symbol(ReadonlyData, Decl(spreadTypeRemovesReadonly.ts, 0, 0)) +>value : Symbol(value, Decl(spreadTypeRemovesReadonly.ts, 4, 28)) + +const clone = { ...data }; +>clone : Symbol(clone, Decl(spreadTypeRemovesReadonly.ts, 5, 5)) +>data : Symbol(data, Decl(spreadTypeRemovesReadonly.ts, 4, 5)) + +clone.value = 'bar'; +>clone.value : Symbol(value, Decl(spreadTypeRemovesReadonly.ts, 0, 24)) +>clone : Symbol(clone, Decl(spreadTypeRemovesReadonly.ts, 5, 5)) +>value : Symbol(value, Decl(spreadTypeRemovesReadonly.ts, 0, 24)) + diff --git a/tests/baselines/reference/spreadTypeRemovesReadonly.types b/tests/baselines/reference/spreadTypeRemovesReadonly.types new file mode 100644 index 00000000000..862cacb8a1b --- /dev/null +++ b/tests/baselines/reference/spreadTypeRemovesReadonly.types @@ -0,0 +1,27 @@ +=== tests/cases/compiler/spreadTypeRemovesReadonly.ts === +interface ReadonlyData { +>ReadonlyData : ReadonlyData + + readonly value: string; +>value : string +} + +const data: ReadonlyData = { value: 'foo' }; +>data : ReadonlyData +>ReadonlyData : ReadonlyData +>{ value: 'foo' } : { value: string; } +>value : string +>'foo' : "foo" + +const clone = { ...data }; +>clone : { value: string; } +>{ ...data } : { value: string; } +>data : ReadonlyData + +clone.value = 'bar'; +>clone.value = 'bar' : "bar" +>clone.value : string +>clone : { value: string; } +>value : string +>'bar' : "bar" + diff --git a/tests/cases/compiler/spreadTypeRemovesReadonly.ts b/tests/cases/compiler/spreadTypeRemovesReadonly.ts new file mode 100644 index 00000000000..bfadf23857c --- /dev/null +++ b/tests/cases/compiler/spreadTypeRemovesReadonly.ts @@ -0,0 +1,7 @@ +interface ReadonlyData { + readonly value: string; +} + +const data: ReadonlyData = { value: 'foo' }; +const clone = { ...data }; +clone.value = 'bar';