Hi, I've been looking at: <https://github.com/kote...
# kotest-contributors
d
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
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
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
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
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
yeah looks great
challenge is to make it recursive 🙂
data class Foo(val boo: Boo)
d
I guess we can only do that when Boo is also a data class?
s
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
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
I think anything in the constructor is in the equals ?
d
yeah, that's my understanding, so I'm just filtering the props to those that are in the primary constructor
s
I did this kind of thing in hoplite
d
what's hoplite?
Like pureconfig from scala but for kotlin
klass.constructors.first.parameters
it looks like
d
oh nice
s
dunno if you ever used scala
but I hate spring and the other config libraries I didn't like either
d
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
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
ah I'm up in Leeds, are you London based?
s
I used to be, in Chicago atm
d
ah nice!
s
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
I'm afraid I'm not from Leeds originally
s
ah ok
might be scottish with a name like pittendreigh
d
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
I'm from middlesbrough
which is why I hate leeds and newcastle.
cos they're better than us grrr
d
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