WEBVTT 00:00.240 --> 00:00:02.639 hi my name is eduardox i'm the author of 00:02.639 --> 00:00:05.040 an mx package called ev and this talk is 00:05.040 --> 00:00:07.200 about a new feature of ev called test 00:07.200 --> 00:00:08.400 blocks 00:08.400 --> 00:00:10.320 let's start by demo 00:10.320 --> 00:00:12.559 this is a file in lua that defines these 00:12.559 --> 00:00:14.160 two functions here 00:14.160 --> 00:00:16.720 and with it if we type f8 several times 00:16.720 --> 00:00:18.000 here 00:18.000 --> 00:00:20.880 the f8s create a lower apple here and 00:20.880 --> 00:00:24.400 then they send these lines to the rebel 00:24.400 --> 00:00:27.039 where this line here loads this file 00:27.039 --> 00:00:29.679 into the repo and these other lines here 00:29.679 --> 00:00:33.200 are tests for these lines 00:33.200 --> 00:00:35.120 there's a lot of information here so let 00:35.120 --> 00:00:40.480 me organize them in a more visual way 00:40.480 --> 00:00:42.960 this is our file in lua 00:42.960 --> 00:00:45.760 lua sees this thing as a as a multi-line 00:45.760 --> 00:00:47.760 comment but we are going to see it as a 00:47.760 --> 00:00:51.920 test block and eev mode is active and so 00:51.920 --> 00:00:54.480 f8 does the right thing 00:54.480 --> 00:00:57.360 uh these three lines here set up the 00:57.360 --> 00:01:00.079 target buffer running a lower apple you 01:00.079 --> 00:01:03.520 can see the the prompt of the rebel here 01:03.520 --> 00:01:05.360 and these lines here are sent to the 01:05.360 --> 00:01:07.200 rebel 01:07.200 --> 00:01:09.680 and when we type f8 on the line that 01:09.680 --> 00:01:10.720 starts 01:10.720 --> 00:01:13.600 with the red star like these lines here 01:13.600 --> 00:01:15.759 what if it does is that it sends the 01:15.759 --> 00:01:18.240 rest of the line sorry it 01:18.240 --> 00:01:21.119 executes the rest of the line as lisp 01:21.119 --> 00:01:23.920 so it executes the three effects here 01:23.920 --> 00:01:26.240 executes these lines as lisp and they 01:26.240 --> 00:01:29.520 set up the target buffer here 01:29.520 --> 00:01:31.759 and when we type f8 on the line that 01:31.759 --> 00:01:34.159 does not start with the red star 01:34.159 --> 00:01:36.640 the f8 sends the line to the target 01:36.640 --> 00:01:38.799 buffer and moves down 01:38.799 --> 00:01:41.040 and this line loads this file under 01:41.040 --> 00:01:45.200 apple and these lines are tests 01:45.200 --> 00:01:47.520 so we just saw how to use an existing 01:47.520 --> 00:01:50.000 test block let's now see how to create a 01:50.000 --> 00:01:52.640 new test block we just have to run this 01:52.640 --> 00:01:55.680 meta x e insert test block 01:55.680 --> 00:01:58.079 or meta x euat 01:58.079 --> 00:02:01.439 and the result depends on the major mode 02:01.439 --> 00:02:03.920 uh let's see let's understand that that 02:03.920 --> 00:02:06.079 by looking at the source code 02:06.079 --> 00:02:08.720 eeit is an alias to this function here 02:08.720 --> 00:02:10.640 and this function is just five lines of 02:10.640 --> 00:02:12.800 code plus a dot string 02:12.800 --> 00:02:14.560 and the dot string explains that if the 02:14.560 --> 00:02:16.480 major mode is full mode then this 02:16.480 --> 00:02:18.800 function tries to call 02:18.800 --> 00:02:21.360 a function called e insert test plot 02:21.360 --> 00:02:24.800 test full mode if that function exists 02:24.800 --> 00:02:27.280 and that if that function does not exist 02:27.280 --> 00:02:29.680 then it yields an error 02:29.680 --> 00:02:32.080 and here's an example of one such 02:32.080 --> 00:02:34.239 function that's a function that 02:34.239 --> 00:02:37.280 inserts a test block in haskell mode 02:37.280 --> 00:02:40.319 and here we can see two functions like 02:40.319 --> 00:02:42.480 this one for haskell mode and one for 02:42.480 --> 00:02:46.080 javascript mode 02:46.080 --> 00:02:48.560 uh these functions look quite similar 02:48.560 --> 00:02:49.440 but 02:49.440 --> 00:02:52.720 their effects look quite different 02:52.720 --> 00:02:55.760 to make this comparison here i started 02:55.760 --> 00:02:57.280 by writing 02:57.280 --> 00:02:59.680 by creating seven files each one in a 02:59.680 --> 00:03:01.120 different language 03:01.120 --> 00:03:03.040 and initially each one of these files 03:03.040 --> 00:03:04.959 only had a comment with the name of the 03:04.959 --> 00:03:08.239 language so c haskell javascript org 03:08.239 --> 00:03:10.560 mode etc 03:10.560 --> 00:03:13.040 and in each one of these files i typed 03:13.040 --> 00:03:16.959 meta x eeit to insert the test block 03:16.959 --> 00:03:18.800 so here we can see that these test 03:18.800 --> 00:03:20.319 blocks are different 03:20.319 --> 00:03:22.080 for example the syntax for multi-line 03:22.080 --> 00:03:24.000 comments is different depending on the 03:24.000 --> 00:03:25.200 language 03:25.200 --> 00:03:27.760 uh this block here that selects which 03:27.760 --> 00:03:30.319 rebel to run is also different 03:30.319 --> 00:03:33.200 this line here that shows how that 03:33.200 --> 00:03:34.879 tells the repo to 03:34.879 --> 00:03:37.680 load the current file is also different 03:37.680 --> 00:03:39.680 depending on the language 03:39.680 --> 00:03:41.840 in some cases i had to improvise a bit 03:41.840 --> 00:03:43.360 for example 03:43.360 --> 00:03:46.400 uh to implement test blocks in shell 03:46.400 --> 00:03:48.560 mode i had to use this 03:48.560 --> 00:03:52.560 this with syntax using a rear document 03:52.560 --> 00:03:55.280 in tcl i also had to improvise a bit and 03:55.280 --> 00:03:57.840 in some cases i had to improvise a lot 03:57.840 --> 00:04:01.120 for example in org mode there isn't an 04:01.120 --> 00:04:03.360 obvious rebel to run and there isn't an 04:03.360 --> 00:04:05.280 obvious way to load the 04:05.280 --> 00:04:08.080 the current org file into the repo so 04:08.080 --> 00:04:11.680 the default action of meta x eeit 04:11.680 --> 00:04:14.400 in log mode is just to insert this thing 04:14.400 --> 00:04:15.439 here 04:15.439 --> 00:04:17.519 that we can use to run a 04:17.519 --> 00:04:22.320 shell in a rebel 04:22.320 --> 00:04:23.199 so 04:23.199 --> 00:04:25.680 these functions are quite similar and in 04:25.680 --> 00:04:27.440 the beginning i was writing all of them 04:27.440 --> 00:04:29.680 by hand but then i got bored and i wrote 04:29.680 --> 00:04:32.320 a function to help you write functions 04:32.320 --> 00:04:33.840 like that 04:33.840 --> 00:04:35.759 this function is called 04:35.759 --> 00:04:38.080 find e-uit-links and it creates a 04:38.080 --> 00:04:39.919 temporary buffer 04:39.919 --> 00:04:41.680 and the contents of this temporary 04:41.680 --> 00:04:43.440 buffer depends on the major mode for 04:43.440 --> 00:04:45.680 example if the current mode is python 04:45.680 --> 00:04:48.880 mode then running this function here 04:48.880 --> 00:04:51.840 creates a temporary buffer that lets me 04:51.840 --> 00:04:53.840 write the support for 04:53.840 --> 00:04:56.880 test blocks into python mode or rewrite 04:56.880 --> 00:04:59.040 the function that supports test blocks 04:59.040 --> 00:05:00.880 and python mode 05:00.880 --> 00:05:03.600 so if i'm in python mode and i run this 05:03.600 --> 00:05:06.639 i get a temporary buffer like this 05:06.639 --> 00:05:08.800 in which this thing is my template for 05:08.800 --> 00:05:11.120 the function usually this thing is 05:11.120 --> 00:05:13.039 totally wrong i have to rewrite to this 05:13.039 --> 00:05:13.919 string 05:13.919 --> 00:05:16.400 but the rest is right you can see python 05:16.400 --> 00:05:18.720 mode here in the name of the function so 05:18.720 --> 00:05:21.360 we have to edit this and save that to 05:21.360 --> 00:05:22.840 our home 05:22.840 --> 00:05:25.520 slash.mx and by the way these things 05:25.520 --> 00:05:28.880 here hyperlinks to many different things 05:28.880 --> 00:05:31.600 this elias piper link here 05:31.600 --> 00:05:34.160 points to the source code to the section 05:34.160 --> 00:05:35.280 in which 05:35.280 --> 00:05:36.400 these 05:36.400 --> 00:05:38.400 functions are defined 05:38.400 --> 00:05:40.320 so you can see this here the function 05:40.320 --> 00:05:41.759 that supports c 05:41.759 --> 00:05:43.440 the function for haskell the function 05:43.440 --> 00:05:46.400 for javascript etc 05:46.400 --> 00:05:49.440 and that's it this is a five-minute talk 05:49.440 --> 00:05:50.960 so i can't say much 05:50.960 --> 00:05:52.639 if you want more information or if you 05:52.639 --> 00:05:55.120 want to see real world examples how i 05:55.120 --> 00:05:58.000 use test blocks etc etc see this page 05:58.000 --> 00:06:00.479 here and i do not have time to explain 06:00.479 --> 00:06:02.560 this by the way here 06:02.560 --> 06:06.080 so that's it thanks