https://kotlinlang.org logo
#kotest-contributors
Title
# kotest-contributors
d

dr.dreigh

05/11/2020, 5:57 PM
Hi, I've been looking at: https://github.com/kotest/kotest/issues/826, I've done a basic POC, just wanted to get some opinions. If I include the diff text below the expected/actual bit:
Copy code
expected:<Foo(a=a, b=a, c=a)> but was:<Foo(a=a, b=b, c=c)>
- diff in field Foo.b: "b" did not equal "a"
- diff in field Foo.c: "c" did not equal "a"
It doesn't hook into the intellij expected pattern to highlight the diff in the comparison window. If we move the diff bit above the expected / actual section, it works, but I think the text looks a little out of context. What do you think?!
s

sam

05/11/2020, 5:59 PM
Tricky one. I think I'd like to include the intellij diff. So I guess put it first? When you do the diff bit, are you using
Show
to ensure you get a nice presentation (so that a long is 3L for example)
d

dr.dreigh

05/11/2020, 6:01 PM
Ok I'll give that a go, we can always tweak it. ah no I hadn't used
Show
, I'll have a go now, it's very much a little hack to see if I could make it work. I'll write it properly, with tests, next.
s

sam

05/11/2020, 6:01 PM
Ok cool. Basically show is a typeclass that when you do something.show() you'll get back a Printed object that contains a nice representaiton
so "" -> <empty string> and things like that, so when comparing int to long, you get 3 was not 3L. So you're not tearing your hair out wondering why 3 != 3
and why " " != " " when its "\s" != "\t"
d

dr.dreigh

05/11/2020, 6:09 PM
aaah nice. I've just plugged that in (and played with the format a bit)
Copy code
Diff in Foo:
 - field a: 321L did not equal 123L
 - field b: "b" did not equal "a"
 - field c: "c" did not equal "a"
s

sam

05/11/2020, 6:10 PM
yeah looks great
challenge is to make it recursive 🙂
data class Foo(val boo: Boo)
d

dr.dreigh

05/11/2020, 6:10 PM
I guess we can only do that when Boo is also a data class?
s

sam

05/11/2020, 6:11 PM
Yep
I gues you're using reflection to pull back the list of properties ?
you can call .isData on the kclass of each parameter
Also this probably will only work for JVM, so you might need to have an expect function that is called by the comparsion code, which on JS and Native just does the old stuff
d

dr.dreigh

05/11/2020, 6:18 PM
re isData and reflection on the properties - yes to both - it's not very pretty. As data classes seem to only care about the properties in the primary constructor, so I have to get the constructors, and then filter the properties based on their name. I was rather hoping to get a list of properties that are in scope of equals in a data class. I suspect there is and I'm not looking hard enough.
s

sam

05/11/2020, 6:19 PM
I think anything in the constructor is in the equals ?
d

dr.dreigh

05/11/2020, 6:19 PM
yeah, that's my understanding, so I'm just filtering the props to those that are in the primary constructor
s

sam

05/11/2020, 6:20 PM
I did this kind of thing in hoplite
d

dr.dreigh

05/11/2020, 6:20 PM
what's hoplite?
Like pureconfig from scala but for kotlin
klass.constructors.first.parameters
it looks like
d

dr.dreigh

05/11/2020, 6:21 PM
oh nice
s

sam

05/11/2020, 6:22 PM
dunno if you ever used scala
but I hate spring and the other config libraries I didn't like either
d

dr.dreigh

05/11/2020, 6:23 PM
no, I'd very much like to try it. I was a Java dev for a long time, recently discovered things like Kotlin, I like Haskell but there's no jobs, so I might play with Scala sometime soon.
s

sam

05/11/2020, 6:24 PM
yeah no jobs in haskell, plenty of scala jobs though, more than kotlin (unless you like android)
loads of the banks in canary wharf use scala
d

dr.dreigh

05/11/2020, 6:26 PM
ah I'm up in Leeds, are you London based?
s

sam

05/11/2020, 6:26 PM
I used to be, in Chicago atm
d

dr.dreigh

05/11/2020, 6:26 PM
ah nice!
s

sam

05/11/2020, 6:26 PM
other than the weather, the cost of beer and food, and the lack of jobs, yeah it's a real winner
😄 1
truth be told, I had to move away once it looked like dirty leeds were gonna get promoted
d

dr.dreigh

05/11/2020, 6:28 PM
I'm afraid I'm not from Leeds originally
s

sam

05/11/2020, 6:29 PM
ah ok
might be scottish with a name like pittendreigh
d

dr.dreigh

05/11/2020, 6:30 PM
You're spot on, my grandad was scottish! There's tons of Pittendreighs in the US
but I'm from the midlands, moved up to Leeds for uni, never moved away
s

sam

05/11/2020, 6:31 PM
I'm from middlesbrough
which is why I hate leeds and newcastle.
cos they're better than us grrr
d

dr.dreigh

05/11/2020, 6:50 PM
ah nice, got a mate from Middlesbrough - taught me the meaning of the word doyle/doylem 🤣
😂 1
cool, right gonna catch a film - thanks for the help Sam! I'll hopefully have something in the next few days if I can work out the native stuff and recursion
👍🏻 1
2 Views