From 9895cab51c4968f495435987fb959768c0eea949 Mon Sep 17 00:00:00 2001 From: Sandro Martini Date: Wed, 13 May 2020 20:30:18 +0200 Subject: [PATCH] tests: add more tests on interfaces --- vlib/v/checker/checker_test.v | 3 ++- vlib/v/tests/interface_test.v | 30 ++++++++++++++++++++++++------ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/vlib/v/checker/checker_test.v b/vlib/v/checker/checker_test.v index 3f621b1006..5309c39da3 100644 --- a/vlib/v/checker/checker_test.v +++ b/vlib/v/checker/checker_test.v @@ -14,11 +14,12 @@ fn test_all() { files := os.ls(dir) or { panic(err) } - tests := files.filter(it.ends_with('.vv')) + mut tests := files.filter(it.ends_with('.vv')) if tests.len == 0 { println('no compiler tests found') assert false } + tests.sort() for test in tests { path := os.join_path(dir, test).replace('\\', '/') program := path.replace('.vv', '.v') diff --git a/vlib/v/tests/interface_test.v b/vlib/v/tests/interface_test.v index 6ffffc1ede..68391a7d2e 100644 --- a/vlib/v/tests/interface_test.v +++ b/vlib/v/tests/interface_test.v @@ -30,9 +30,9 @@ fn (c mut Cat) set_breed(new string) { c.breed = new } -// utility function to convert to string, as a sample +// utility function to override default conversion to string, as a sample fn (c Cat) str() string { - return 'Cat: $c.breed' + return 'Custom string conversion for Cat: $c.breed' } fn (d Dog) speak(s string) { @@ -53,7 +53,8 @@ fn (d mut Dog) set_breed(new string) { println('Nah') } -// do not add to Dog the utility function 'str', as a sample +// do not add to Dog the utility function 'str', so the default one will be used, as a sample + fn test_todo() { if true { } else { @@ -69,6 +70,8 @@ fn perform_speak(a Animal) { // assert name == 'Dog' // } println(a.name()) + println('Got animal of type: ${typeof(a)}') // TODO: get implementation type (if possible) + // assert a is Dog || a is Cat // TODO: enable when available } fn perform_speak_on_ptr(a &Animal) { @@ -80,6 +83,8 @@ fn perform_speak_on_ptr(a &Animal) { // assert name == 'Dog' // } println(a.name()) + println('Got animal of type: ${typeof(a)}') // TODO: get implementation type (if possible) + // assert a is Dog || a is Cat // TODO: enable when available } fn test_perform_speak() { @@ -130,22 +135,35 @@ fn test_perform_name_detailed() { dog := Dog{ breed: 'Labrador Retriever' } - println('Test on Dog: $dog ...') + println('Test on Dog: $dog ...') // using default conversion to string perform_name_detailed(dog) cat := Cat{} - println('Test on Cat: $cat ...') + println('Test on empty Cat: $cat ...') perform_speak(cat) - println('Test on another Cat: ...') + println('Test on a Persian Cat: ...') perform_speak(Cat{ breed: 'Persian' }) + cat_persian2 := Cat{ + breed: 'Persian' + } + println('Test on another Persian Cat: "$cat_persian2" ...') + perform_speak(cat_persian2) + cat_persian2_str := cat_persian2.str() + println("Persian Cat 2: '$cat_persian2_str' ...") + assert cat_persian2_str == "Custom string conversion for Cat: Persian" println('Test (dummy/empty) on array of animals ...') handle_animals([dog, cat]) + handle_animals_mutable([dog, cat]) + assert true } fn handle_animals(a []Animal) { } +fn handle_animals_mutable(a []Animal) { +} + interface Register { register() }