From aea7d0957834adedbec661a2019169c65966be58 Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Tue, 8 Nov 2016 09:32:26 -0800 Subject: [PATCH] Add tests for using spread attributes resolution in JSX stateful component --- .../jsx/tsxSpreadAttributesResolution1.tsx | 18 ++++++++++ .../jsx/tsxSpreadAttributesResolution10.tsx | 27 ++++++++++++++ .../jsx/tsxSpreadAttributesResolution11.tsx | 36 +++++++++++++++++++ .../jsx/tsxSpreadAttributesResolution12.tsx | 34 ++++++++++++++++++ .../jsx/tsxSpreadAttributesResolution2.tsx | 24 +++++++++++++ .../jsx/tsxSpreadAttributesResolution3.tsx | 26 ++++++++++++++ .../jsx/tsxSpreadAttributesResolution4.tsx | 25 +++++++++++++ .../jsx/tsxSpreadAttributesResolution5.tsx | 25 +++++++++++++ .../jsx/tsxSpreadAttributesResolution6.tsx | 22 ++++++++++++ .../jsx/tsxSpreadAttributesResolution7.tsx | 29 +++++++++++++++ .../jsx/tsxSpreadAttributesResolution8.tsx | 31 ++++++++++++++++ .../jsx/tsxSpreadAttributesResolution9.tsx | 29 +++++++++++++++ 12 files changed, 326 insertions(+) create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx create mode 100644 tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx new file mode 100644 index 00000000000..6d5225df2d9 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution1.tsx @@ -0,0 +1,18 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +class Poisoned extends React.Component<{}, {}> { + render() { + return
Hello
; + } +} + +const obj: Object = {}; + +// OK +let p = ; +let y = ; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx new file mode 100644 index 00000000000..6410f075ae9 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution10.tsx @@ -0,0 +1,27 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface OptionProp { + x?: 2 +} + +class Opt extends React.Component { + render() { + return
Hello
; + } +} + +const obj: OptionProp = {}; +const obj1: OptionProp = { + x: 2 +} + +// Error +let y = ; +let y1 = ; +let y2 = ; +let y3 = ; diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx new file mode 100644 index 00000000000..c8008623441 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution11.tsx @@ -0,0 +1,36 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +const obj = {}; +const obj1: { x: 2 } = { + x: 2 +} +const obj3: {y: true, overwrite: string } = { + y: true, + overwrite: "hi" +} + +interface Prop { + x: 2 + y: true + overwrite: string +} + +class OverWriteAttr extends React.Component { + render() { + return
Hello
; + } +} + +let anyobj: any; +// OK +let x = +let x1 = +let x2 = +let x3 = +let x4 = +let x5 = \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx new file mode 100644 index 00000000000..b5150bd27ff --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution12.tsx @@ -0,0 +1,34 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +const obj = {}; +const obj1: {x: 2} = { + x: 2 +} +const obj3: {y: false, overwrite: string} = { + y: false, + overwrite: "hi" +} + +interface Prop { + x: 2 + y: false + overwrite: string +} + +class OverWriteAttr extends React.Component { + render() { + return
Hello
; + } +} + +let anyobj: any; + +// Error +let x = +let x1 = +let x2 = diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx new file mode 100644 index 00000000000..1d647226ade --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution2.tsx @@ -0,0 +1,24 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface PoisonedProp { + x: string; + y: "2"; +} + +class Poisoned extends React.Component { + render() { + return
Hello
; + } +} + +const obj = {}; + +// Error +let p = ; +let y = ; +let z = ; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx new file mode 100644 index 00000000000..8bff2abbd2c --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution3.tsx @@ -0,0 +1,26 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface PoisonedProp { + x: string; + y: number; +} + +class Poisoned extends React.Component { + render() { + return
Hello
; + } +} + +const obj = { + x: "hello world", + y: 2 +}; + +// OK +let p = ; +let y = ; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx new file mode 100644 index 00000000000..803853aacdb --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution4.tsx @@ -0,0 +1,25 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface PoisonedProp { + x: string; + y: 2; +} + +class Poisoned extends React.Component { + render() { + return
Hello
; + } +} + +const obj: PoisonedProp = { + x: "hello world", + y: 2 +}; + +// OK +let p = ; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx new file mode 100644 index 00000000000..76ff79149f3 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution5.tsx @@ -0,0 +1,25 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface PoisonedProp { + x: string; + y: 2; +} + +class Poisoned extends React.Component { + render() { + return
Hello
; + } +} + +let obj = { + x: "hello world", + y: 2 +}; + +// Error as "obj" has type { x: string; y: number } +let p = ; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx new file mode 100644 index 00000000000..35a190e10cc --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution6.tsx @@ -0,0 +1,22 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +type TextProps = { editable: false } + | { editable: true, onEdit: (newText: string) => void }; + +class TextComponent extends React.Component { + render() { + return Some Text..; + } +} + +// Error +let x = + +const textProps: TextProps = { + editable: false +}; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx new file mode 100644 index 00000000000..55e3222c022 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution7.tsx @@ -0,0 +1,29 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +type TextProps = { editable: false } + | { editable: true, onEdit: (newText: string) => void }; + +class TextComponent extends React.Component { + render() { + return Some Text..; + } +} + +// OK +const textPropsFalse: TextProps = { + editable: false +}; + +let y1 = + +const textPropsTrue: TextProps = { + editable: true, + onEdit: () => {} +}; + +let y2 = \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx new file mode 100644 index 00000000000..937678605d6 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution8.tsx @@ -0,0 +1,31 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +const obj = {}; +const obj1 = { + x: 2 +} +const obj3 = { + y: true, + overwrite: "hi" +} + +interface Prop { + x: number + y: boolean + overwrite: string +} + +class OverWriteAttr extends React.Component { + render() { + return
Hello
; + } +} + +// OK +let x = +let x1 = \ No newline at end of file diff --git a/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx new file mode 100644 index 00000000000..9f2a63a56b6 --- /dev/null +++ b/tests/cases/conformance/jsx/tsxSpreadAttributesResolution9.tsx @@ -0,0 +1,29 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface OptionProp { + x?: 2 + y?: boolean +} + +class Opt extends React.Component { + render() { + return
Hello
; + } +} + +const obj: OptionProp = {}; +const obj1: OptionProp = { + x: 2 +} + +// OK +let p = ; +let y = ; +let y1 = ; +let y2 = ; +let y3 = ; \ No newline at end of file