From f0990460a62bda901a0548f3d7e6a579cd06ccce Mon Sep 17 00:00:00 2001 From: Kanchalai Tanglertsampan Date: Wed, 12 Apr 2017 12:17:27 -0700 Subject: [PATCH] Add tests --- .../jsx/checkJsxChildrenProperty1.tsx | 27 ++++++++++ .../jsx/checkJsxChildrenProperty2.tsx | 49 +++++++++++++++++++ .../jsx/checkJsxChildrenProperty3.tsx | 44 +++++++++++++++++ .../jsx/checkJsxChildrenProperty4.tsx | 49 +++++++++++++++++++ .../jsx/checkJsxChildrenProperty5.tsx | 35 +++++++++++++ .../jsx/checkJsxChildrenProperty6.tsx | 48 ++++++++++++++++++ .../jsx/checkJsxChildrenProperty7.tsx | 33 +++++++++++++ .../jsx/checkJsxChildrenProperty8.tsx | 34 +++++++++++++ ...tsxStatelessFunctionComponentOverload6.tsx | 2 +- ...nInFunctionExpressionOfChildrenCallback.ts | 31 ++++++++++++ 10 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty1.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty2.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty3.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty4.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty5.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty6.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty7.tsx create mode 100644 tests/cases/conformance/jsx/checkJsxChildrenProperty8.tsx create mode 100644 tests/cases/fourslash/tscCompletionInFunctionExpressionOfChildrenCallback.ts diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty1.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty1.tsx new file mode 100644 index 00000000000..70b58c03f6a --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty1.tsx @@ -0,0 +1,27 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface Prop { + a: number, + b: string, + children: string | JSX.Element +} + +function Comp(p: Prop) { + return
{p.b}
; +} + +// OK +let k = ; +let k1 = + + hi hi hi! + ; +let k2 = + +
hi hi hi!
+
; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty2.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty2.tsx new file mode 100644 index 00000000000..0c78f8f4125 --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty2.tsx @@ -0,0 +1,49 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface Prop { + a: number, + b: string, + children: string | JSX.Element +} + +function Comp(p: Prop) { + return
{p.b}
; +} + +// Error: missing children +let k = ; + +let k1 = + + hi hi hi! + ; + +// Error: incorrect type +let k2 = + +
My Div
+ {(name: string) =>
My name {name}
} +
; + +let k3 = + +
My Div
+ {1000000} +
; + +let k4 = + +
My Div
+ hi hi hi! +
; + +let k5 = + +
My Div
+
My Div
+
; \ No newline at end of file diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty3.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty3.tsx new file mode 100644 index 00000000000..c67c6d5440d --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty3.tsx @@ -0,0 +1,44 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface IUser { + Name: string; +} + +interface IFetchUserProps { + children: (user: IUser) => JSX.Element; +} + +class FetchUser extends React.Component { + render() { + return this.state + ? this.props.children(this.state.result) + : null; + } +} + +// Ok +function UserName0() { + return ( + + { user => ( +

{ user.Name }

+ ) } +
+ ); +} + +function UserName1() { + return ( + + + { user => ( +

{ user.Name }

+ ) } +
+ ); +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty4.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty4.tsx new file mode 100644 index 00000000000..34877f2000c --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty4.tsx @@ -0,0 +1,49 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface IUser { + Name: string; +} + +interface IFetchUserProps { + children: (user: IUser) => JSX.Element; +} + +class FetchUser extends React.Component { + render() { + return this.state + ? this.props.children(this.state.result) + : null; + } +} + +// Error +function UserName() { + return ( + + { user => ( +

{ user.NAme }

+ ) } +
+ ); +} + +function UserName1() { + return ( + + + + + { user => ( +

{ user.Name }

+ ) } + { user => ( +

{ user.Name }

+ ) } +
+ ); +} \ No newline at end of file diff --git a/tests/cases/conformance/jsx/checkJsxChildrenProperty5.tsx b/tests/cases/conformance/jsx/checkJsxChildrenProperty5.tsx new file mode 100644 index 00000000000..6143e4b0faf --- /dev/null +++ b/tests/cases/conformance/jsx/checkJsxChildrenProperty5.tsx @@ -0,0 +1,35 @@ +// @filename: file.tsx +// @jsx: preserve +// @noLib: true +// @libFiles: react.d.ts,lib.d.ts + +import React = require('react'); + +interface Prop { + a: number, + b: string, + children: Button; +} + +class Button extends React.Component { + render() { + return (
My Button
) + } +} + +function Comp(p: Prop) { + return
{p.b}
; +} + +// Error: no children specified +let k = ; + +// Error: JSX.element is not the same as JSX.ElementClass +let k1 = + +