Update tests

This commit is contained in:
Justin Starry 2019-08-25 21:54:58 -04:00
parent 23c23d74ec
commit 5c367d2c6a
3 changed files with 264 additions and 153 deletions

View File

@ -9,13 +9,13 @@ pub struct ChildProperties {
pub int: i32,
}
pub struct ChildComponent;
impl Component for ChildComponent {
pub struct Child;
impl Component for Child {
type Message = ();
type Properties = ChildProperties;
fn create(props: Self::Properties, _: ComponentLink<Self>) -> Self {
ChildComponent
Child
}
fn update(&mut self, _: Self::Message) -> ShouldRender {
@ -23,33 +23,63 @@ impl Component for ChildComponent {
}
}
impl Renderable<ChildComponent> for ChildComponent {
impl Renderable<Self> for Child {
fn view(&self) -> Html<Self> {
unimplemented!()
}
}
#[derive(Properties)]
pub struct ChildContainerProperties {
pub children: ChildrenWithProps<Child, ChildContainer>,
}
pub struct ChildContainer;
impl Component for ChildContainer {
type Message = ();
type Properties = ChildContainerProperties;
fn create(props: Self::Properties, _: ComponentLink<Self>) -> Self {
ChildContainer
}
fn update(&mut self, _: Self::Message) -> ShouldRender {
unimplemented!()
}
}
impl Renderable<Self> for ChildContainer {
fn view(&self) -> Html<Self> {
unimplemented!()
}
}
fn compile_fail() {
html! { <ChildComponent> };
html! { <ChildComponent:: /> };
html! { <ChildComponent with /> };
html! { <ChildComponent props /> };
html! { <ChildComponent with props > };
html! { <ChildComponent with blah /> };
html! { <ChildComponent with props () /> };
html! { <ChildComponent type=0 /> };
html! { <ChildComponent invalid-prop-name=0 /> };
html! { <ChildComponent unknown="unknown" /> };
html! { <ChildComponent string= /> };
html! { <ChildComponent int=1 string={} /> };
html! { <ChildComponent int=1 string=3 /> };
html! { <ChildComponent int=1 string={3} /> };
html! { <ChildComponent int=0u32 /> };
html! { <ChildComponent string="abc" /> };
html! { </ChildComponent> };
html! { <ChildComponent><ChildComponent></ChildComponent> };
html! { <ChildComponent></ChildComponent><ChildComponent></ChildComponent> };
html! { <ChildComponent>{ "Not allowed" }</ChildComponent> };
html! { <Child> };
html! { <Child:: /> };
html! { <Child with /> };
html! { <Child props /> };
html! { <Child with props > };
html! { <Child with blah /> };
html! { <Child with props () /> };
html! { <Child type=0 /> };
html! { <Child invalid-prop-name=0 /> };
html! { <Child unknown="unknown" /> };
html! { <Child string= /> };
html! { <Child int=1 string={} /> };
html! { <Child int=1 string=3 /> };
html! { <Child int=1 string={3} /> };
html! { <Child int=0u32 /> };
html! { <Child string="abc" /> };
html! { </Child> };
html! { <Child><Child></Child> };
html! { <Child></Child><Child></Child> };
html! { <Child>{ "Not allowed" }</Child> };
html! { <ChildContainer>{ "Not allowed" }</ChildContainer> };
html! { <ChildContainer><></></ChildContainer> };
html! { <ChildContainer><ChildContainer /></ChildContainer> };
html! { <ChildContainer><ChildContainer /></ChildContainer> };
html! { <ChildContainer><Child int=1 /><other /></ChildContainer> };
}
fn main() {}

View File

@ -1,141 +1,141 @@
error: this open tag has no corresponding close tag
--> $DIR/html-component-fail.rs:33:13
--> $DIR/html-component-fail.rs:58:13
|
33 | html! { <ChildComponent> };
| ^^^^^^^^^^^^^^^^
58 | html! { <Child> };
| ^^^^^^^
error: expected identifier
--> $DIR/html-component-fail.rs:34:31
--> $DIR/html-component-fail.rs:59:22
|
34 | html! { <ChildComponent:: /> };
59 | html! { <Child:: /> };
| ^
error: this open tag has no corresponding close tag
--> $DIR/html-component-fail.rs:37:13
--> $DIR/html-component-fail.rs:62:13
|
37 | html! { <ChildComponent with props > };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
62 | html! { <Child with props > };
| ^^^^^^^^^^^^^^^^^^^
error: expected type, found `/`
--> $DIR/html-component-fail.rs:49:14
--> $DIR/html-component-fail.rs:74:14
|
49 | html! { </ChildComponent> };
74 | html! { </Child> };
| ^
error: this open tag has no corresponding close tag
--> $DIR/html-component-fail.rs:50:13
--> $DIR/html-component-fail.rs:75:13
|
50 | html! { <ChildComponent><ChildComponent></ChildComponent> };
| ^^^^^^^^^^^^^^^^
75 | html! { <Child><Child></Child> };
| ^^^^^^^
error: only one root html element allowed
--> $DIR/html-component-fail.rs:51:46
--> $DIR/html-component-fail.rs:76:28
|
51 | html! { <ChildComponent></ChildComponent><ChildComponent></ChildComponent> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
76 | html! { <Child></Child><Child></Child> };
| ^^^^^^^^^^^^^^^
error[E0425]: cannot find value `blah` in this scope
--> $DIR/html-component-fail.rs:38:34
--> $DIR/html-component-fail.rs:63:25
|
38 | html! { <ChildComponent with blah /> };
63 | html! { <Child with blah /> };
| ^^^^ not found in this scope
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:35:5
--> $DIR/html-component-fail.rs:60:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
35 | html! { <ChildComponent with /> };
60 | html! { <Child with /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:61:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
61 | html! { <Child props /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:64:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
64 | html! { <Child with props () /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:36:5
--> $DIR/html-component-fail.rs:65:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
36 | html! { <ChildComponent props /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
65 | html! { <Child type=0 /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:39:5
--> $DIR/html-component-fail.rs:66:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
39 | html! { <ChildComponent with props () /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:40:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
40 | html! { <ChildComponent type=0 /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:41:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
41 | html! { <ChildComponent invalid-prop-name=0 /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
66 | html! { <Child invalid-prop-name=0 /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0609]: no field `unknown` on type `ChildProperties`
--> $DIR/html-component-fail.rs:42:29
--> $DIR/html-component-fail.rs:67:20
|
42 | html! { <ChildComponent unknown="unknown" /> };
67 | html! { <Child unknown="unknown" /> };
| ^^^^^^^ unknown field
|
= note: available fields are: `string`, `int`
error[E0599]: no method named `unknown` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:42:29
--> $DIR/html-component-fail.rs:67:20
|
5 | #[derive(Properties, PartialEq)]
| - method `unknown` not found for this
...
42 | html! { <ChildComponent unknown="unknown" /> };
67 | html! { <Child unknown="unknown" /> };
| ^^^^^^^
error[E0599]: no method named `build` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:43:5
--> $DIR/html-component-fail.rs:68:5
|
5 | #[derive(Properties, PartialEq)]
| - method `build` not found for this
...
43 | html! { <ChildComponent string= /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
68 | html! { <Child string= /> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0308]: mismatched types
--> $DIR/html-component-fail.rs:44:42
--> $DIR/html-component-fail.rs:69:33
|
44 | html! { <ChildComponent int=1 string={} /> };
69 | html! { <Child int=1 string={} /> };
| ^^ expected struct `std::string::String`, found ()
|
= note: expected type `std::string::String`
found type `()`
error[E0308]: mismatched types
--> $DIR/html-component-fail.rs:45:42
--> $DIR/html-component-fail.rs:70:33
|
45 | html! { <ChildComponent int=1 string=3 /> };
70 | html! { <Child int=1 string=3 /> };
| ^
| |
| expected struct `std::string::String`, found integer
@ -145,9 +145,9 @@ error[E0308]: mismatched types
found type `{integer}`
error[E0308]: mismatched types
--> $DIR/html-component-fail.rs:46:42
--> $DIR/html-component-fail.rs:71:33
|
46 | html! { <ChildComponent int=1 string={3} /> };
71 | html! { <Child int=1 string={3} /> };
| ^^^
| |
| expected struct `std::string::String`, found integer
@ -157,30 +157,75 @@ error[E0308]: mismatched types
found type `{integer}`
error[E0308]: mismatched types
--> $DIR/html-component-fail.rs:47:33
--> $DIR/html-component-fail.rs:72:24
|
47 | html! { <ChildComponent int=0u32 /> };
72 | html! { <Child int=0u32 /> };
| ^^^^ expected i32, found u32
error[E0599]: no method named `string` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:48:29
--> $DIR/html-component-fail.rs:73:20
|
5 | #[derive(Properties, PartialEq)]
| - method `string` not found for this
...
48 | html! { <ChildComponent string="abc" /> };
73 | html! { <Child string="abc" /> };
| ^^^^^^
error[E0599]: no method named `children` found for type `ChildPropertiesBuilder<ChildPropertiesBuilderStep_missing_required_prop_int>` in the current scope
--> $DIR/html-component-fail.rs:52:5
--> $DIR/html-component-fail.rs:77:5
|
5 | #[derive(Properties, PartialEq)]
| - method `children` not found for this
...
52 | html! { <ChildComponent>{ "Not allowed" }</ChildComponent> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
77 | html! { <Child>{ "Not allowed" }</Child> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
Some errors occurred: E0308, E0425, E0599, E0609.
For more information about an error, try `rustc --explain E0308`.
error[E0277]: the trait bound `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>: std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not satisfied
--> $DIR/html-component-fail.rs:78:5
|
78 | html! { <ChildContainer>{ "Not allowed" }</ChildContainer> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not implemented for `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>`
|
= note: required because of the requirements on the impl of `std::convert::Into<yew::virtual_dom::vcomp::VChild<Child, ChildContainer>>` for `yew::virtual_dom::vnode::VNode<_>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0277]: the trait bound `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>: std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not satisfied
--> $DIR/html-component-fail.rs:79:5
|
79 | html! { <ChildContainer><></></ChildContainer> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not implemented for `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>`
|
= note: required because of the requirements on the impl of `std::convert::Into<yew::virtual_dom::vcomp::VChild<Child, ChildContainer>>` for `yew::virtual_dom::vnode::VNode<_>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0277]: the trait bound `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>: std::convert::From<yew::virtual_dom::vcomp::VChild<ChildContainer, _>>` is not satisfied
--> $DIR/html-component-fail.rs:80:5
|
80 | html! { <ChildContainer><ChildContainer /></ChildContainer> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<yew::virtual_dom::vcomp::VChild<ChildContainer, _>>` is not implemented for `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>`
|
= note: required because of the requirements on the impl of `std::convert::Into<yew::virtual_dom::vcomp::VChild<Child, ChildContainer>>` for `yew::virtual_dom::vcomp::VChild<ChildContainer, _>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0277]: the trait bound `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>: std::convert::From<yew::virtual_dom::vcomp::VChild<ChildContainer, _>>` is not satisfied
--> $DIR/html-component-fail.rs:81:5
|
81 | html! { <ChildContainer><ChildContainer /></ChildContainer> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<yew::virtual_dom::vcomp::VChild<ChildContainer, _>>` is not implemented for `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>`
|
= note: required because of the requirements on the impl of `std::convert::Into<yew::virtual_dom::vcomp::VChild<Child, ChildContainer>>` for `yew::virtual_dom::vcomp::VChild<ChildContainer, _>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
error[E0277]: the trait bound `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>: std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not satisfied
--> $DIR/html-component-fail.rs:82:5
|
82 | html! { <ChildContainer><Child int=1 /><other /></ChildContainer> };
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::convert::From<yew::virtual_dom::vnode::VNode<_>>` is not implemented for `yew::virtual_dom::vcomp::VChild<Child, ChildContainer>`
|
= note: required because of the requirements on the impl of `std::convert::Into<yew::virtual_dom::vcomp::VChild<Child, ChildContainer>>` for `yew::virtual_dom::vnode::VNode<_>`
= note: this error originates in a macro outside of the current crate (in Nightly builds, run with -Z external-macro-backtrace for more info)
Some errors occurred: E0277, E0308, E0425, E0599, E0609.
For more information about an error, try `rustc --explain E0277`.

View File

@ -14,13 +14,13 @@ pub struct ChildProperties {
pub optional_callback: Option<Callback<()>>,
}
pub struct ChildComponent;
impl Component for ChildComponent {
pub struct Child;
impl Component for Child {
type Message = ();
type Properties = ChildProperties;
fn create(_: Self::Properties, _: ComponentLink<Self>) -> Self {
ChildComponent
Child
}
fn update(&mut self, _: Self::Message) -> ShouldRender {
@ -28,26 +28,26 @@ impl Component for ChildComponent {
}
}
impl Renderable<ChildComponent> for ChildComponent {
impl Renderable<Child> for Child {
fn view(&self) -> Html<Self> {
unimplemented!()
}
}
#[derive(Properties, Default)]
pub struct ParentProperties {
pub struct ContainerProperties {
#[props(required)]
pub int: i32,
pub children: Children<ChildComponent>,
pub children: Children<Container>,
}
pub struct ParentComponent;
impl Component for ParentComponent {
pub struct Container;
impl Component for Container {
type Message = ();
type Properties = ParentProperties;
type Properties = ContainerProperties;
fn create(_: Self::Properties, _: ComponentLink<Self>) -> Self {
ParentComponent
Container
}
fn update(&mut self, _: Self::Message) -> ShouldRender {
@ -55,89 +55,116 @@ impl Component for ParentComponent {
}
}
impl Renderable<Self> for ParentComponent {
impl Renderable<Self> for Container {
fn view(&self) -> Html<Self> {
unimplemented!()
}
}
#[derive(Properties, Default)]
pub struct ChildContainerProperties {
#[props(required)]
pub int: i32,
pub children: ChildrenWithProps<Child, ChildContainer>,
}
pub struct ChildContainer;
impl Component for ChildContainer {
type Message = ();
type Properties = ChildContainerProperties;
fn create(_: Self::Properties, _: ComponentLink<Self>) -> Self {
ChildContainer
}
fn update(&mut self, _: Self::Message) -> ShouldRender {
unimplemented!()
}
}
impl Renderable<Self> for ChildContainer {
fn view(&self) -> Html<Self> {
unimplemented!()
}
}
mod scoped {
pub use super::ChildComponent;
pub use super::ParentComponent;
pub use super::Child;
pub use super::Container;
}
pass_helper! {
html! { <ChildComponent int=1 /> };
html! { <Child int=1 /> };
// backwards compat
html! { <ChildComponent: int=1 /> };
html! { <Child: int=1 /> };
html! {
<>
<ChildComponent int=1 />
<scoped::ChildComponent int=1 />
<Child int=1 />
<scoped::Child int=1 />
// backwards compat
<ChildComponent: int=1 />
<scoped::ChildComponent: int=1 />
<Child: int=1 />
<scoped::Child: int=1 />
</>
};
let props = <ChildComponent as Component>::Properties::default();
let props2 = <ChildComponent as Component>::Properties::default();
let props = <Child as Component>::Properties::default();
let props2 = <Child as Component>::Properties::default();
html! {
<>
<ChildComponent with props />
<Child with props />
// backwards compat
<ChildComponent: with props2, />
<Child: with props2, />
</>
};
html! {
<>
<ChildComponent int=1 string="child" />
<ChildComponent int=1 />
<ChildComponent int={1+1} />
<ChildComponent int=1 vec={vec![1]} />
<ChildComponent string={String::from("child")} int=1 />
<Child int=1 string="child" />
<Child int=1 />
<Child int={1+1} />
<Child int=1 vec={vec![1]} />
<Child string={String::from("child")} int=1 />
// backwards compat
<ChildComponent: string="child", int=3, />
<Child: string="child", int=3, />
</>
};
let name_expr = "child";
html! {
<ChildComponent int=1 string=name_expr />
<Child int=1 string=name_expr />
};
html! {
<>
<ChildComponent int=1 />
<ChildComponent int=1 optional_callback=|_| () />
<Child int=1 />
<Child int=1 optional_callback=|_| () />
</>
};
let props = <ParentComponent as Component>::Properties::default();
let props = <Container as Component>::Properties::default();
html! {
<>
<ParentComponent int=1 />
<ParentComponent int=1></ParentComponent>
<Container int=1 />
<Container int=1></Container>
<ParentComponent with props>
<Container with props>
<></>
</ParentComponent>
</Container>
<ParentComponent int=1>
<ChildComponent int=2 />
</ParentComponent>
<Container int=1>
<Child int=2 />
</Container>
<scoped::ParentComponent int=1>
<scoped::ParentComponent int=2/>
</scoped::ParentComponent>
<scoped::Container int=1>
<scoped::Container int=2/>
</scoped::Container>
<ParentComponent int=1 children=ChildrenRenderer::new(
<Container int=1 children=ChildrenRenderer::new(
::std::boxed::Box::new(move || {
|| -> ::std::vec::Vec<_> {
vec![html!{ "String" }]
@ -146,6 +173,15 @@ pass_helper! {
) />
</>
};
html! {
<>
<ChildContainer int=1 />
<ChildContainer int=1></ChildContainer>
<ChildContainer int=1><Child int = 2 /></ChildContainer>
<ChildContainer int=1><Child int = 2 /><Child int = 2 /></ChildContainer>
</>
};
}
fn main() {}