WEBVTT


00:00:08.740 --> 00:00:09.240
[Speaker 0]: Do we have any listeners?

00:00:13.340 --> 00:00:13.840
It's you and I. I have a question.

00:00:16.420 --> 00:00:16.640
How many tests do you have for hyperbole and

00:00:18.800 --> 00:00:19.279
How would you rate the test coverage compared

00:00:21.279 --> 00:00:21.500
to other packages? Well,

00:00:28.279 --> 00:00:28.700
that's a tricky 1. Shall I spell it out loud

00:00:31.100 --> 00:00:31.600
and then maybe type it at the same time?

00:00:36.420 --> 00:00:36.920
So, I believe it's around like more than 300

00:00:43.660 --> 00:00:44.059
test cases now. But I cannot compare the test

00:00:45.220 --> 00:00:45.720
coverage to any other

00:01:00.020 --> 00:01:00.520
other package. Maybe I can type that later.

00:01:01.560 --> 00:01:02.060
What do you say, Badal?

00:01:02.660 --> 00:01:02.900
[Speaker 1]: package. I have no knowledge of any Yeah,

00:01:03.840 --> 00:01:04.239
sure, yeah, that's totally fine.

00:01:05.660 --> 00:01:06.160
Feel free to just answer them with voice.

00:01:08.720 --> 00:01:09.220
[Speaker 0]: Yeah, yeah. There's another question.

00:01:10.520 --> 00:01:10.920
1 small suggestion to me,

00:01:11.440 --> 00:01:11.940
should means optional,

00:01:13.660 --> 00:01:14.160
where shall or must means required.

00:01:15.940 --> 00:01:16.220
Not sure if it is too late to make a major

00:01:17.220 --> 00:01:17.540
grammar change like that.

00:01:18.080 --> 00:01:18.580
Very nice presentation.

00:01:19.840 --> 00:01:20.340
So thanks for presentation,

00:01:24.380 --> 00:01:24.780
but the package ERT, well,

00:01:27.920 --> 00:01:28.080
it's not something that we have come up with.

00:01:28.920 --> 00:01:29.340
It's a standard package.

00:01:32.320 --> 00:01:32.560
So I believe it has been around for a long

00:01:37.760 --> 00:01:38.000
time. So, but please feel free to make

00:01:39.680 --> 00:01:40.180
suggestions and maybe you can,

00:01:43.660 --> 00:01:43.860
you know, like do a copy or like an alias for

00:01:46.080 --> 00:01:46.200
that. If you believe it makes more sense for

00:01:48.080 --> 00:01:48.580
your test cases to have that instead.

00:01:53.540 --> 00:01:53.720
And then we have another question here.

00:01:55.540 --> 00:01:55.680
For your info, you may find this helpful for

00:01:58.780 --> 00:01:59.020
running MX test lint both from a command line

00:02:01.220 --> 00:02:01.720
and from within MX with a transit menu.

00:02:03.600 --> 00:02:04.040
GitHub alpha papa make sure,

00:02:06.760 --> 00:02:07.100
yes. It also works on remote CI.

00:02:08.240 --> 00:02:08.740
Yeah, thank you, Alpha Papa.

00:02:10.580 --> 00:02:11.080
I think I've looked into that,

00:02:13.440 --> 00:02:13.940
but we haven't made any use of that.

00:02:17.920 --> 00:02:18.080
But maybe you'll inspire me to give it

00:02:18.400 --> 00:02:18.900
another look.

00:02:29.260 --> 00:02:29.760
[Speaker 2]: Hey guys.

00:02:34.120 --> 00:02:34.460
[Speaker 0]: I remember, I recognize that voice.

00:02:37.160 --> 00:02:37.660
Hi, Bob. Hey, how are you?

00:02:40.240 --> 00:02:40.580
Congratulations, man. Thanks,

00:02:43.020 --> 00:02:43.320
Hugh. Thank you. I have another question

00:02:45.520 --> 00:02:45.900
here. It is easy to run ad hoc tests inside

00:02:48.400 --> 00:02:48.600
an Emacs session given the command line

00:02:51.180 --> 00:02:51.560
scripts you need to run to get the batch test

00:02:54.960 --> 00:02:55.120
session running? You said it's to run an

00:03:05.680 --> 00:03:05.920
ad-hoc test. I'm not sure I understand that

00:03:14.440 --> 00:03:14.940
question. Yes, please.

00:03:15.660 --> 00:03:16.160
[Speaker 1]: Maybe I can rephrase. Sure.

00:03:19.900 --> 00:03:20.400
So I think what I understand is that since

00:03:22.540 --> 00:03:23.040
you have to use some of these command lines

00:03:25.440 --> 00:03:25.940
scripts to get a batch test session running,

00:03:28.780 --> 00:03:29.180
is it easy to run ad hoc tests in an Emacs

00:03:30.700 --> 00:03:30.900
session or does that, like in your

00:03:32.040 --> 00:03:32.540
experience, has that been difficult?

00:03:36.820 --> 00:03:37.320
[Speaker 0]: Well, from the command line,

00:03:38.660 --> 00:03:38.940
if you look at the command line,

00:03:44.160 --> 00:03:44.340
you'll see that it's only like a few image

00:03:46.480 --> 00:03:46.980
functions to call to get that behavior to run

00:03:55.080 --> 00:03:55.240
the batch tests. So I think we made some

00:03:57.100 --> 00:03:57.600
support function for that in hyperbole.

00:04:02.800 --> 00:04:02.960
So it's not, I don't think it's possible out

00:04:05.540 --> 00:04:06.040
of the box to do it, but it's not complicated

00:04:08.060 --> 00:04:08.560
to do it.

00:04:12.190 --> 00:04:12.340
[Speaker 2]: You can define a test anytime,

00:04:14.780 --> 00:04:15.280
right? Just like a new function.

00:04:18.899 --> 00:04:19.240
So that's ad hoc. You just write your test

00:04:20.019 --> 00:04:20.519
and you can run it.

00:04:22.900 --> 00:04:23.400
[Speaker 0]: Yeah, yeah, I mean, of course,

00:04:25.900 --> 00:04:26.180
but I got the impression it was about running

00:04:28.620 --> 00:04:29.060
all your tests like we did with the command

00:04:35.740 --> 00:04:36.020
line. Well, so the question is more about how

00:04:38.260 --> 00:04:38.600
would you run all your test cases from within

00:04:44.860 --> 00:04:45.140
Emacs? And the easy answer to that is

00:04:48.420 --> 00:04:48.860
actually you load all your test case files,

00:04:51.760 --> 00:04:52.080
and then you run ERT with the T as the test

00:04:53.600 --> 00:04:53.880
selector and then it will run all your test

00:04:53.880 --> 00:04:54.380
cases.

00:05:01.780 --> 00:05:01.960
[Speaker 1]: Right. And I think they have expanded on

00:05:03.180 --> 00:05:03.520
their question a little bit as well,

00:05:04.960 --> 00:05:05.220
clarifying that. In other words,

00:05:07.200 --> 00:05:07.360
can you tweak tests in an Emacs session and

00:05:08.860 --> 00:05:09.360
run them right away? Which I believe,

00:05:11.400 --> 00:05:11.640
if I understand correctly what Bob was

00:05:13.820 --> 00:05:14.320
saying, you can basically define or redefine

00:05:15.920 --> 00:05:16.080
functions on the fly and then have them be

00:05:16.440 --> 00:05:16.940
run, right?

00:05:22.200 --> 00:05:22.360
[Speaker 0]: Yes, yes. You just go into that test case and

00:05:24.120 --> 00:05:24.620
you just change it and you run it again.

00:05:29.060 --> 00:05:29.200
And either you have to sort of load it or you

00:05:31.560 --> 00:05:32.060
can use like the commercial thing I did.

00:05:36.140 --> 00:05:36.340
You use hyperbole and just hit meta return on

00:05:38.560 --> 00:05:38.860
the test case and it will load it and run the

00:05:42.240 --> 00:05:42.360
test case again. So that's of course what you

00:05:44.220 --> 00:05:44.720
normally do when you're defining a test or

00:05:47.440 --> 00:05:47.940
debug a test case or develop a test case.

00:05:49.960 --> 00:05:50.460
Just start with something small,

00:05:52.700 --> 00:05:53.200
just make sure maybe you can prepare the test

00:05:55.320 --> 00:05:55.680
properly and run it again and again and again

00:05:56.720 --> 00:05:57.220
until you're ready with it.

00:05:59.760 --> 00:05:59.960
That's a good point. You can definitely do

00:06:02.800 --> 00:06:03.280
that and that's part of how I normally

00:06:06.420 --> 00:06:06.920
develop the test cases that I mean start with

00:06:09.160 --> 00:06:09.400
something small so I can see that I get there

00:06:12.180 --> 00:06:12.240
maybe the right input in the buffer that I

00:06:14.180 --> 00:06:14.340
want to test on or something and I expand on

00:06:18.160 --> 00:06:18.400
that more and more and add more and more more

00:06:18.460 --> 00:06:18.960
and more more

00:06:31.040 --> 00:06:31.540
[Speaker 2]: tests to it. You might tell them a bit about

00:06:33.280 --> 00:06:33.480
how many test cases you have.

00:06:36.020 --> 00:06:36.440
I guess you commented on that and like what

00:06:40.320 --> 00:06:40.820
happens, you know, with the CICD pipeline,

00:06:43.780 --> 00:06:44.020
every time we commit, you know,

00:06:46.360 --> 00:06:46.560
across all the versions and what you have set

00:06:48.760 --> 00:06:49.040
up there because you know I wish people could

00:06:53.940 --> 00:06:54.140
see it. You can go and check on GitHub and

00:06:57.440 --> 00:06:57.720
you can see the logs right of any of the

00:06:59.760 --> 00:06:59.960
builds and but tell them a bit about that

00:07:01.080 --> 00:07:01.320
Mats because I think that's pretty

00:07:01.320 --> 00:07:01.820
impressive.

00:07:07.280 --> 00:07:07.760
[Speaker 0]: Well, that's part of more the CI,

00:07:11.760 --> 00:07:12.160
CD, part of how we developed this using

00:07:15.460 --> 00:07:15.580
GitHub and workflows that you get out of the

00:07:20.740 --> 00:07:20.900
box from there. So this more than 300 test

00:07:23.440 --> 00:07:23.720
cases on our round for I think 5 different

00:07:26.480 --> 00:07:26.980
versions of Emacs when we do a pull request

00:07:33.900 --> 00:07:34.400
or a commit. So that's a good way to ensure

00:07:38.040 --> 00:07:38.540
that it works from version 27.2

00:07:42.240 --> 00:07:42.740
up to the latest master version because

00:07:45.860 --> 00:07:46.360
there's some changes in Emacs over different

00:07:48.940 --> 00:07:49.340
versions that can affect your functions or

00:07:49.600 --> 00:07:50.100
your code.

00:07:56.580 --> 00:07:56.720
[Speaker 2]: They all run in parallel and so typically in

00:08:00.580 --> 00:08:00.780
under 60 seconds I think you've got all of

00:08:03.960 --> 00:08:04.460
them run so you've got pretty extensive

00:08:08.860 --> 00:08:09.240
testing which does catch interesting bugs

00:08:09.760 --> 00:08:10.260
here and there, right?

00:08:13.320 --> 00:08:13.820
[Speaker 0]: Yes, of course it does.

00:08:18.060 --> 00:08:18.560
I mean, you normally develop with 1 version

00:08:20.280 --> 00:08:20.540
and then you think everything is okay.

00:08:21.720 --> 00:08:21.820
But then when you're tested with the

00:08:23.460 --> 00:08:23.960
different versions, you find out that there

00:08:26.080 --> 00:08:26.580
are some changes and there are things you

00:08:30.140 --> 00:08:30.400
might not sort of keep track of what's

00:08:34.340 --> 00:08:34.640
happening also. So that's a way to get

00:08:38.559 --> 00:08:38.940
noticed that the core developers of Emacs

00:08:41.120 --> 00:08:41.480
have changed something that you sort of based

00:08:44.380 --> 00:08:44.840
your code on. Now I got another question

00:08:47.900 --> 00:08:48.160
here. Did you have to change hyperbole code

00:08:50.580 --> 00:08:50.760
and design to be more readily testable as you

00:08:52.160 --> 00:08:52.660
were increasing your test coverage?

00:08:55.520 --> 00:08:56.020
Well, we haven't done that to a lot,

00:09:00.160 --> 00:09:00.320
to a big degree, although I believe that that

00:09:03.760 --> 00:09:04.260
is an important thing for sort of the future

00:09:06.020 --> 00:09:06.500
to do that because some of the hyperbolic

00:09:08.520 --> 00:09:08.720
functions are very complicated and long and

00:09:10.640 --> 00:09:11.140
that makes testing them rather difficult.

00:09:14.660 --> 00:09:14.900
So, at a few places we have sort of broken up

00:09:17.260 --> 00:09:17.720
functions in smaller pieces so it'd be easier

00:09:20.280 --> 00:09:20.660
to do like unit tests of the different parts

00:09:27.740 --> 00:09:27.980
of it. But there's a lot of more work that

00:09:28.680 --> 00:09:29.180
has to be done there.

00:09:33.820 --> 00:09:34.020
[Speaker 2]: 1 of the nice things is you know the great

00:09:36.760 --> 00:09:36.820
environment in Lisp where we're able to do a

00:09:40.520 --> 00:09:40.900
lot of interactive bottom-up testing before

00:09:42.840 --> 00:09:43.280
we even get to lighting tech pieces.

00:09:48.740 --> 00:09:49.140
So it does tend to be more higher level bugs,

00:09:51.140 --> 00:09:51.640
I think, that get caught in cross-functional

00:09:55.940 --> 00:09:56.100
interaction. We had 1 recently that was an

00:09:58.100 --> 00:09:58.600
Emacs version change. It had been a function

00:10:01.100 --> 00:10:01.600
that had existed for a long time.

00:10:03.340 --> 00:10:03.840
It had an and rest in it,

00:10:05.740 --> 00:10:06.240
in its argument list, so it would assemble

00:10:08.600 --> 00:10:09.100
the list of arguments from individual

00:10:10.320 --> 00:10:10.820
arguments that you would give it,

00:10:13.100 --> 00:10:13.600
and they decided in a recent version,

00:10:15.200 --> 00:10:15.700
I think with Stefan's input,

00:10:19.400 --> 00:10:19.840
to change that to a list and allow the prior

00:10:22.740 --> 00:10:22.900
behavior, but it would issue a warning if you

00:10:23.620 --> 00:10:24.060
use the prior behavior.

00:10:25.560 --> 00:10:25.840
So all of a sudden, the way you were supposed

00:10:27.180 --> 00:10:27.680
to do it became semi-invalid.

00:10:30.440 --> 00:10:30.940
And so we started getting the warning,

00:10:32.760 --> 00:10:33.040
and we've tried to eliminate all those

00:10:35.600 --> 00:10:36.060
warnings in recent hyperbole developments.

00:10:37.120 --> 00:10:37.620
So we're like, what do we do?

00:10:39.020 --> 00:10:39.440
You know, because we wanted to be backward

00:10:42.140 --> 00:10:42.640
compatible to where you couldn't use a list.

00:10:44.620 --> 00:10:45.120
It required you to use individual arguments.

00:10:48.380 --> 00:10:48.560
And now it's sort of requiring you to do

00:10:51.660 --> 00:10:51.820
that. And all of that was caused by the

00:10:52.940 --> 00:10:53.440
automatic testing on it.

00:11:08.680 --> 00:11:08.860
So you said, Max, you were going to tell us

00:11:12.740 --> 00:11:13.220
what you learned. So what are the major

00:11:15.368 --> 00:11:15.396
things that you learned in doing all of this

00:11:15.680 --> 00:11:16.180
work? All of this work?

00:11:26.520 --> 00:11:26.740
[Speaker 0]: Well, I tried to cover some of it in the

00:11:29.380 --> 00:11:29.800
presentation, but as I was going along,

00:11:33.420 --> 00:11:33.920
the presentation became like twice as long as

00:11:36.180 --> 00:11:36.680
fitted into the time we had so I had to cut

00:11:42.380 --> 00:11:42.880
it out. But I think some of the core things

00:11:44.340 --> 00:11:44.840
still is in the presentation.

00:11:49.560 --> 00:11:50.060
From a personal perspective,

00:11:52.440 --> 00:11:52.940
And this might not be hard to realize,

00:11:56.960 --> 00:11:57.460
but forcing yourself to test functions,

00:12:02.900 --> 00:12:03.060
test code really forces you to understand the

00:12:05.080 --> 00:12:05.280
code a little bit better in a way that sort

00:12:07.300 --> 00:12:07.400
of makes it easier than just to read the

00:12:11.460 --> 00:12:11.960
code. I don't know how it is for the rest

00:12:13.780 --> 00:12:13.980
listening to this, but for me it works so

00:12:16.580 --> 00:12:17.080
that if I just read the code then I don't

00:12:20.140 --> 00:12:20.320
sort of become as sharp as I should be but if

00:12:22.500 --> 00:12:22.640
I try to write the test case for it then I

00:12:24.680 --> 00:12:24.880
really need to understand better of all the

00:12:27.660 --> 00:12:28.160
edge cases and all the sort of states and etc

00:12:30.060 --> 00:12:30.320
that is involved and I think that's That's

00:12:33.080 --> 00:12:33.200
what's sort of 1 of the learning things I

00:12:34.960 --> 00:12:35.280
wanted to communicate as well that I don't

00:12:38.940 --> 00:12:39.080
think I covered in detail in the

00:12:41.480 --> 00:12:41.980
presentation. Maybe all this,

00:12:48.060 --> 00:12:48.340
but try it. 1 other sort of more from the fun

00:12:50.740 --> 00:12:51.000
side is that I really think it's fun to write

00:12:55.080 --> 00:12:55.440
the test. So if you haven't tests in your

00:12:58.020 --> 00:12:58.520
package, you should start doing that because

00:13:05.740 --> 00:13:06.080
it is fun. It might feel like some extra

00:13:08.080 --> 00:13:08.580
work, but it really pays off in the long run,

00:13:10.320 --> 00:13:10.760
especially if you have it in like a pipeline

00:13:12.520 --> 00:13:12.980
and where you can run it regularly when you

00:13:13.940 --> 00:13:14.380
do new commits, et cetera.

00:13:16.560 --> 00:13:17.060
So, I mean, that's maybe obvious from,

00:13:19.160 --> 00:13:19.440
if you look from the commercial side or your

00:13:21.080 --> 00:13:21.340
work side to do it like that.

00:13:22.260 --> 00:13:22.660
But even for your hobby project,

00:13:26.260 --> 00:13:26.760
it can be very sort of pay off really well.

00:13:32.900 --> 00:13:33.160
[Speaker 2]: It's worked really well when we're adding new

00:13:35.020 --> 00:13:35.180
functionality or we're changing some of the

00:13:36.560 --> 00:13:37.060
plumbing in the system.

00:13:40.400 --> 00:13:40.580
You know, you go and you do some surgery and

00:13:41.320 --> 00:13:41.820
then you run the tests.

00:13:45.400 --> 00:13:45.900
And sometimes 6 to 10 tests will fail.

00:13:48.260 --> 00:13:48.420
And you find there, you know,

00:13:50.460 --> 00:13:50.660
it tends to be they're all interconnected and

00:13:52.920 --> 00:13:53.320
it leads you back to the single source.

00:13:56.660 --> 00:13:56.980
You fix that and you know it could be an edge

00:14:00.560 --> 00:14:00.760
case and off by 1 or Sometimes it's an

00:14:03.520 --> 00:14:03.800
assumption about the way something is used

00:14:05.980 --> 00:14:06.480
and it's not actually always true.

00:14:09.520 --> 00:14:10.020
And so, Matt's just really good at

00:14:13.540 --> 00:14:14.040
identifying some of those scenarios and

00:14:17.480 --> 00:14:17.980
keeping us honest, I guess I would say.

00:14:22.900 --> 00:14:23.400
So I love, I run it as much as I before,

00:14:26.400 --> 00:14:26.900
you know, even before I commit something.

00:14:29.960 --> 00:14:30.060
So I get to see, you know,

00:14:30.940 --> 00:14:31.440
if anything has progressed.

00:14:39.480 --> 00:14:39.920
So yeah, I really recommend this process to

00:14:42.120 --> 00:14:42.620
people. I haven't seen it done.

00:14:45.720 --> 00:14:46.080
I don't think that, I don't know any other

00:14:47.800 --> 00:14:48.300
package that has done it to this level.

00:14:51.560 --> 00:14:51.820
And it's been working really great for us.

00:14:55.440 --> 00:14:55.640
And I think, well, we'll see too when we

00:14:56.780 --> 00:14:57.280
release to the general public.

00:15:04.380 --> 00:15:04.540
[Speaker 0]: But Bob, also, maybe the test part of

00:15:06.400 --> 00:15:06.560
different packages is not the first thing you

00:15:08.900 --> 00:15:09.100
look at. So I know there are packages that

00:15:10.960 --> 00:15:11.380
have testing, a lot of testing,

00:15:13.860 --> 00:15:14.160
but how much, much testing they have or not,

00:15:16.060 --> 00:15:16.220
I don't know. It's not what you normally look

00:15:17.900 --> 00:15:18.400
into when you look at someone's else code.

00:15:20.600 --> 00:15:20.820
You look maybe on the functionality side but

00:15:22.760 --> 00:15:23.000
not on how they've done the sort of the

00:15:26.540 --> 00:15:26.760
quality side. So there could be other

00:15:28.780 --> 00:15:29.280
packages out there that are well equipped.

00:15:31.800 --> 00:15:32.300
[Speaker 2]: I hope so. I hope so.

00:15:39.860 --> 00:15:40.180
[Speaker 0]: What's the craziest bug you found when

00:15:44.700 --> 00:15:45.200
writing these tests? Well,

00:15:50.760 --> 00:15:50.940
What springs to my mind just now is that we

00:15:52.760 --> 00:15:52.960
were doing some tests or I would do some

00:15:55.920 --> 00:15:56.420
tests for when you narrow,

00:15:57.940 --> 00:15:58.440
what do you say that? When you,

00:16:04.500 --> 00:16:05.000
in outlining, when you sort of compress

00:16:06.480 --> 00:16:06.980
things in an outline, so you just,

00:16:08.540 --> 00:16:09.040
sorry Bob, maybe you have it,

00:16:12.100 --> 00:16:12.600
[Speaker 2]: When you hide text.

00:16:12.740 --> 00:16:13.240
[Speaker 0]: What I'm looking for? Yeah,

00:16:15.580 --> 00:16:15.920
when you hide. So I was doing some cursor

00:16:17.780 --> 00:16:17.980
movement over that. And I always assume that

00:16:22.540 --> 00:16:22.900
if you do like a prefix argument to like a

00:16:23.800 --> 00:16:24.240
simple cursor movement,

00:16:26.420 --> 00:16:26.920
like control F moving 1 character position,

00:16:28.340 --> 00:16:28.840
and you would give it the,

00:16:36.580 --> 00:16:37.080
and then the prefix, like you want to move

00:16:39.140 --> 00:16:39.640
like 2 or 3 positions,

00:16:43.040 --> 00:16:43.140
you would do like control U 3 and then

00:16:44.240 --> 00:16:44.740
control F and you move 3.

00:16:46.560 --> 00:16:46.960
I always assumed that that would be exactly

00:16:49.240 --> 00:16:49.440
the same as if you just hit the key control F

00:16:50.740 --> 00:16:51.240
3 times, but it's not.

00:16:53.160 --> 00:16:53.560
So it's not the bug, it's a feature,

00:16:54.620 --> 00:16:55.080
but that was the craziest thing.

00:16:58.180 --> 00:16:58.360
I spent the night trying to figure out why

00:17:00.720 --> 00:17:01.000
our code was wrong, but It turns out that's

00:17:03.560 --> 00:17:04.060
how Emacs behaves. Try it out yourself.

00:17:07.920 --> 00:17:08.300
Try to move over the 3 dots at the end of

00:17:09.140 --> 00:17:09.640
that and see what happens.

00:17:14.060 --> 00:17:14.240
Do it with cursor hitting the key or using a

00:17:16.260 --> 00:17:16.680
prefix argument and you see it behaves

00:17:18.720 --> 00:17:19.220
differently. That was the craziest thing.

00:17:21.960 --> 00:17:22.339
I think there was some other crazy thing or

00:17:24.280 --> 00:17:24.480
deep learning also, but I can't come up with

00:17:26.599 --> 00:17:26.760
it at the moment. So maybe I can write it in

00:17:27.900 --> 00:17:28.400
the Q&A later.

00:17:31.200 --> 00:17:31.440
[Speaker 1]: I think we're out of time on the stream,

00:17:33.360 --> 00:17:33.600
but people are welcome to join Mats and Bob

00:17:35.280 --> 00:17:35.640
here on BigBlueButton to further discuss

00:17:36.480 --> 00:17:36.980
this. Thank you both.

00:17:38.674 --> 00:17:38.792
[Speaker 0]: Okay, thank you. Thanks,

00:17:46.100 --> 00:17:46.600
Makaay. Thank you. I don't know,

00:17:48.740 --> 00:17:49.240
Is it only me and Bob here?

00:17:50.680 --> 00:17:51.180
So Bob, do you want to say something?

00:17:57.440 --> 00:17:57.940
[Speaker 2]: Well, I think it's been a great day.

00:18:00.720 --> 00:18:01.220
And I'm glad we did this.

00:18:02.280 --> 00:18:02.780
It takes a lot of energy.

00:18:15.140 --> 00:18:15.640
I'm just really excited about the progress

00:18:20.580 --> 00:18:20.740
that this, and we're actually doing a lot of

00:18:23.940 --> 00:18:24.160
QA at work and my professional software work

00:18:28.500 --> 00:18:28.840
and looking at you know how we can do more

00:18:32.980 --> 00:18:33.480
test driven development and so everybody's

00:18:35.980 --> 00:18:36.200
talking about this you know we've got AI over

00:18:37.540 --> 00:18:38.040
here that can generate test cases.

00:18:40.200 --> 00:18:40.700
But, you know, strangely enough,

00:18:43.100 --> 00:18:43.380
with the rapidity of development and web

00:18:46.720 --> 00:18:47.220
applications, I think the level of testing

00:18:50.140 --> 00:18:50.280
has gone down in recent years compared to

00:18:51.500 --> 00:18:51.780
where it used to be, right?

00:18:53.040 --> 00:18:53.540
Because the pace has gone up.

00:18:57.340 --> 00:18:57.840
And so I think it's starting to turn again

00:18:58.740 --> 00:18:59.240
where people are saying,

00:19:01.940 --> 00:19:02.440
we can't just release crap into the

00:19:08.120 --> 00:19:08.620
Webisphere and we have to better ourselves.

00:19:13.620 --> 00:19:13.820
And with all these advanced tool sets that

00:19:16.100 --> 00:19:16.600
you have, that you can do CICD testing,

00:19:19.860 --> 00:19:20.180
you know, I just, I just see it coming

00:19:21.900 --> 00:19:22.100
around, you know, as people develop new

00:19:24.000 --> 00:19:24.160
things. So That's kind of exciting to me

00:19:26.980 --> 00:19:27.480
because I came from a manufacturing culture

00:19:30.300 --> 00:19:30.780
originally where we, our company actually

00:19:33.800 --> 00:19:34.300
started a lot of the manufacturing quality

00:19:37.420 --> 00:19:37.920
efforts that you saw in Japan and elsewhere

00:19:40.600 --> 00:19:40.740
in America for a long time and that was you

00:19:42.040 --> 00:19:42.540
know entirely through testing.

00:19:46.640 --> 00:19:47.020
We used to just build incredible test cases

00:19:49.120 --> 00:19:49.320
because we were combining software with

00:19:51.100 --> 00:19:51.380
hardware. And if, you know,

00:19:53.460 --> 00:19:53.600
the hardware doesn't work and you ship a

00:19:55.080 --> 00:19:55.520
million units, you're,

00:19:57.340 --> 00:19:57.840
you're in trouble. So,

00:20:00.260 --> 00:20:00.760
that was just something we had to do.

00:20:04.280 --> 00:20:04.780
And so it's nice to start to see that curve

00:20:07.020 --> 00:20:07.520
come around. And I think,

00:20:10.380 --> 00:20:10.880
you know, Matt Vance is very modest,

00:20:16.680 --> 00:20:16.920
but I think he's really the 1 that started us

00:20:20.400 --> 00:20:20.580
down this path and really made it into a

00:20:24.620 --> 00:20:24.840
reality. So everybody else just gets to

00:20:25.760 --> 00:20:26.260
benefit from that work.

00:20:27.540 --> 00:20:28.040
So thanks.

00:20:32.760 --> 00:20:33.260
[Speaker 1]: That's awesome.

00:20:39.960 --> 00:20:40.460
[Speaker 0]: Thanks. Okay. Yeah. So if there's nothing

00:20:43.200 --> 00:20:43.520
more here, then maybe we should just close

00:20:45.440 --> 00:20:45.940
this and I go over to write in the etherpad

00:20:47.960 --> 00:20:48.460
the replies we had.

00:20:51.900 --> 00:20:52.120
[Speaker 1]: Right, yeah, I think, let's see,

00:20:53.520 --> 00:20:53.760
I see 1 other person here,

00:20:55.080 --> 00:20:55.580
I believe Ihor just joined us.

00:20:58.780 --> 00:20:59.060
Yeah. Yeah, so if you do want to discuss with

00:21:00.220 --> 00:21:00.480
Mats and Bob, you're welcome to,

00:21:02.200 --> 00:21:02.700
otherwise, yeah, we can close the room now.

00:21:05.800 --> 00:21:06.020
[Speaker 3]: Well, I think I missed most of the talk

00:21:06.900 --> 00:21:07.400
because I had power outage,

00:21:12.180 --> 00:21:12.440
but the part I heard was about the mock

00:21:16.860 --> 00:21:17.220
library. And you mentioned that you don't

00:21:20.200 --> 00:21:20.700
like CL-let, but instead you use mock.

00:21:29.700 --> 00:21:29.800
[Speaker 0]: Yeah, I was more saying that you have to do a

00:21:31.560 --> 00:21:32.040
lot more work when you use the CL letdef.

00:21:34.540 --> 00:21:34.780
It's for more ambitious and maybe more

00:21:37.000 --> 00:21:37.500
complicated cases where you want to really

00:21:38.840 --> 00:21:39.340
make a new implementation,

00:21:41.940 --> 00:21:42.440
test implementation. If you use the mock,

00:21:44.380 --> 00:21:44.880
you get a lot of things out of the box,

00:21:47.440 --> 00:21:47.940
verifying that you actually,

00:21:50.820 --> 00:21:51.040
like the mock was actually called for

00:21:53.320 --> 00:21:53.820
instance, whereas if you do with the CLLatf,

00:21:56.520 --> 00:21:56.780
you would have to take correct track of that

00:22:02.020 --> 00:22:02.520
yourself. And so, so a lot of more work.

00:22:03.760 --> 00:22:04.260
Oh yeah.

00:22:07.940 --> 00:22:08.200
[Speaker 3]: I'm saying that most of the time CLLess is

00:22:09.720 --> 00:22:10.220
used for simple cases actually.

00:22:12.320 --> 00:22:12.820
Because, just for example,

00:22:15.100 --> 00:22:15.600
the function always returns the same.

00:22:17.980 --> 00:22:18.420
And it tends to be simple lambda that ignores

00:22:19.040 --> 00:22:19.540
all the input arguments.

00:22:23.000 --> 00:22:23.480
So that's really trivial most of the time but

00:22:25.520 --> 00:22:25.920
I actually thought the opposite that mock is

00:22:27.640 --> 00:22:28.140
supposed to be used for non-trivial cases.

00:22:32.280 --> 00:22:32.520
[Speaker 0]: Sorry, what was the question?

00:22:35.280 --> 00:22:35.780
Mock was supposed to be used for non-trivial.

00:22:47.680 --> 00:22:48.180
Yeah I mean I don't know how to explain this.

00:22:50.140 --> 00:22:50.640
I mean, CLF can be used for non-trivial

00:22:54.400 --> 00:22:54.840
definitely. You can define then any behavior

00:22:56.180 --> 00:22:56.680
you want. You can write your own function,

00:22:58.440 --> 00:22:58.660
but you need to keep track of whether that

00:22:59.620 --> 00:23:00.100
function is called or not,

00:23:06.260 --> 00:23:06.380
for instance. So you have to make note of

00:23:08.440 --> 00:23:08.940
that the function was called so you can fire

00:23:12.440 --> 00:23:12.800
sort of an error in case your function wasn't

00:23:16.960 --> 00:23:17.440
called because that would be 1 error case.

00:23:20.660 --> 00:23:20.860
[Speaker 3]: So you mean the mock fires an error if the

00:23:22.580 --> 00:23:23.080
mocked function was actually not called?

00:23:30.060 --> 00:23:30.560
[Speaker 0]: Yes, it does. Yes. So if your assumptions,

00:23:33.900 --> 00:23:34.120
you sort of document with the mock also your

00:23:37.080 --> 00:23:37.220
assumptions how your code is going to be

00:23:40.020 --> 00:23:40.380
called. And if those are wrong,

00:23:41.120 --> 00:23:41.540
you will get an error.

00:23:43.680 --> 00:23:44.060
So you would, so if the implementation would

00:23:44.840 --> 00:23:45.100
maybe change, for instance,

00:23:46.640 --> 00:23:47.140
and not call the thing you're mocking,

00:23:50.460 --> 00:23:50.960
then you will notice that.

00:23:53.100 --> 00:23:53.560
But if you see a letdef,

00:23:54.840 --> 00:23:55.040
then you will have to keep track of that

00:23:57.560 --> 00:23:58.060
yourself. Okay, I see.

00:23:58.260 --> 00:23:58.760
I see.

00:24:01.240 --> 00:24:01.740
[Speaker 3]: And you know, our mode also uses a lot of

00:24:09.340 --> 00:24:09.620
test. In our mode, we have a lot of tests

00:24:13.940 --> 00:24:14.440
[Speaker 0]: Ah, okay. Yeah. Yeah. I'm sure I have.

00:24:15.900 --> 00:24:16.400
[Speaker 3]: also. We rely on CLLatF for,

00:24:19.220 --> 00:24:19.720
we don't use third-party libraries at all.

00:24:22.140 --> 00:24:22.640
[Speaker 0]: Oh, you use CLLatF, okay.

00:24:26.680 --> 00:24:27.180
Yeah. Yeah. Yeah. At First I found it very

00:24:29.480 --> 00:24:29.700
powerful to use that, but then I sort of,

00:24:32.120 --> 00:24:32.320
I learned more about how we can use the

00:24:34.340 --> 00:24:34.840
mocking library for what I needed.

00:24:36.900 --> 00:24:37.400
And I prefer that at the moment.

00:24:40.560 --> 00:24:41.060
[Speaker 3]: I see, that is interesting.

00:24:42.500 --> 00:24:42.700
Because I had seen it,

00:24:45.440 --> 00:24:45.600
but I didn't consider that it's gonna be

00:24:46.800 --> 00:24:47.300
useful even in simple cases.

00:24:52.640 --> 00:24:53.140
[Speaker 0]: It has its limitations.

00:24:58.260 --> 00:24:58.760
So it's like life, how you turn depends.

00:25:03.740 --> 00:25:04.020
But maybe I should look more into the org

00:25:05.880 --> 00:25:06.100
mode and the test case to learn more about

00:25:07.480 --> 00:25:07.980
that. So thanks for pointing that out.

00:25:14.620 --> 00:25:15.120
[Speaker 3]: We are trying to cover as much as we can.

00:25:17.520 --> 00:25:17.740
It's almost impossible for org.

00:25:20.500 --> 00:25:21.000
But yeah, we keep adding more tests.

00:25:22.780 --> 00:25:23.280
[Speaker 0]: That's great.

00:25:52.720 --> 00:25:53.200
Someone's typing. I don't know.

00:25:54.340 --> 00:25:54.840
Any more questions? No?

00:26:01.060 --> 00:26:01.560
Okay, then I'll go back and try to document

00:26:05.200 --> 00:26:05.360
this in the etherpad. Thank you everybody for

00:26:08.860 --> 00:26:09.160
[Speaker 1]: Thank you guys. Great work.

00:26:09.400 --> 00:26:09.900
[Speaker 0]: joining. Great. Thank you.

00:26:11.100 --> 00:26:11.600
Take care. Bye-bye.

00:26:15.060 --> 00:26:15.560
[Speaker 1]: Take care. Bye. Silence.