aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/ty/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/ty/tests.rs')
-rw-r--r--crates/ra_hir/src/ty/tests.rs134
1 files changed, 134 insertions, 0 deletions
diff --git a/crates/ra_hir/src/ty/tests.rs b/crates/ra_hir/src/ty/tests.rs
index 3affcb4fe..f04e9109c 100644
--- a/crates/ra_hir/src/ty/tests.rs
+++ b/crates/ra_hir/src/ty/tests.rs
@@ -608,6 +608,140 @@ fn test() -> i128 {
608} 608}
609 609
610#[test] 610#[test]
611fn infer_associated_const() {
612 check_inference(
613 "infer_associated_const",
614 r#"
615struct Struct;
616
617impl Struct {
618 const FOO: u32 = 1;
619}
620
621enum Enum;
622
623impl Enum {
624 const BAR: u32 = 2;
625}
626
627trait Trait {
628 const ID: u32;
629}
630
631struct TraitTest;
632
633impl Trait for TraitTest {
634 const ID: u32 = 5;
635}
636
637fn test() {
638 let x = Struct::FOO;
639 let y = Enum::BAR;
640 let z = TraitTest::ID;
641}
642"#,
643 );
644}
645
646#[test]
647fn infer_associated_method_struct() {
648 check_inference(
649 "infer_associated_method_struct",
650 r#"
651struct A { x: u32 };
652
653impl A {
654 fn new() -> A {
655 A { x: 0 }
656 }
657}
658fn test() {
659 let a = A::new();
660 a.x;
661}
662"#,
663 );
664}
665
666#[test]
667fn infer_associated_method_enum() {
668 check_inference(
669 "infer_associated_method_enum",
670 r#"
671enum A { B, C };
672
673impl A {
674 pub fn b() -> A {
675 A::B
676 }
677 pub fn c() -> A {
678 A::C
679 }
680}
681fn test() {
682 let a = A::b();
683 a;
684 let c = A::c();
685 c;
686}
687"#,
688 );
689}
690
691#[test]
692fn infer_associated_method_with_modules() {
693 check_inference(
694 "infer_associated_method_with_modules",
695 r#"
696mod a {
697 struct A;
698 impl A { pub fn thing() -> A { A {} }}
699}
700
701mod b {
702 struct B;
703 impl B { pub fn thing() -> u32 { 99 }}
704
705 mod c {
706 struct C;
707 impl C { pub fn thing() -> C { C {} }}
708 }
709}
710use b::c;
711
712fn test() {
713 let x = a::A::thing();
714 let y = b::B::thing();
715 let z = c::C::thing();
716}
717"#,
718 );
719}
720
721#[test]
722#[ignore] // FIXME: After https://github.com/rust-analyzer/rust-analyzer/pull/866 is merged
723fn infer_associated_method_generics() {
724 check_inference(
725 "infer_associated_method_generics",
726 r#"
727struct Gen<T> {
728 val: T
729}
730
731impl<T> Gen<T> {
732 pub fn make(val: T) -> Gen<T> {
733 Gen { val }
734 }
735}
736
737fn test() {
738 let a = Gen::make(0u32);
739}
740"#,
741 );
742}
743
744#[test]
611fn no_panic_on_field_of_enum() { 745fn no_panic_on_field_of_enum() {
612 check_inference( 746 check_inference(
613 "no_panic_on_field_of_enum", 747 "no_panic_on_field_of_enum",