What's up internet? Ito yung cable ng headset ko and mukhang galit yung upuan ko sa headset ko kasi palaagin niya sinasagasaan yung cable. Fortunately, ASUS lent us a wireless headset, the ROG Strix Go 2.4 and it's very sleek and very nice to use. First things first, insulation was super straightforward. It does come with a USB type-C receiver but it does come with an adapter to plug into the more mainstream USB socket and it's literally plug and play. When I plugged the receiver in, my PC detected it and couple of minutes later, everything was good to go. No mass, no fuss. Two features for me stand out about the Go 2.4 and one of them is the range. This thing can really go far as long as you keep in line of sight of the receiver. Even if not in line of sight, it was good enough for me to step to the other room and prepare dinner while listening to music playing from my computer. The range was also good enough for me to actually go to the room right above where I keep my computer and even though the room is one floor higher, I was still able to receive sound as if I were in the same room as the receiver. So range is very good with line of sight and not bad even if not in line of sight. So the promise of wireless or the Go 2.4 is real. You can really kind of wander around with this thing. If you do wander out of range, the audio will keep playing off your computer and then it will automatically reconnect once na makabalik ka within range. So no need to fuss with anything anymore. Lung, labas ka sa range, mawawala yung sound. Pagpasok mo ulit within range, automatically you can start hearing sound again in your headset. There's no need for you to do anything else. All right, so we're doing a test of the audio of the Go 2.4. Just wanted to show you just how far you can go. So we're playing a YouTube, Harbor Sugar YouTube video and we actually have two cameras for this test. Kaya, metyo, bear with me for the ching camp. So we're backing away slowly from the computer running the YouTube. Audio is still very good.  Malayo mo maabutan mo and the audio will still be fine. Here, we're moving from the outside of the home office into the kitchen living room. I wanna make sure wala akong mapanggang sa likod ko. Audio is still good. And you notice we're still in line of sight of the receiver, the doors open. You can see the computer still in the background. Oh, quite dark. So this is a good, metyo madilim. But the audio is still perfect and this is a good maybe 40 feet away from the computer in the, still running the YouTube channel. So pag nakalain of sight ka alayaw talaga nung range niya. But if you just break line of sight, let's tago tayo dito sa likod ng stairs, ngayon wala ng audio. Wala ng audio because we have broken line of sight. Pero balik ko lang sa line of sight and the audio starts. So really, as long as you have line of sight, the range is actually quite good. Going back to the home office where the video is still running. The second standout feature is the integrated AI-enabled noise filtering. And it sounded like marketing hype at first, pero sinubukan ko talaga siya. So here you can see I recorded audio for my iPhone with a fan in the background. The fan has very noticeable noise. But at the same time, I'm also recording on the Go 2.4. And you can really tell the microphone by itself filtered out everything. You can't hear the fan at all. So the built-in noise cancellation of the 2.4 really works. And it was really helpful for me kasi sa labas ng bahay ko ngayon, may road construction. At hindi lang yung tipong adding new paint. Asin talaga sinisira yung daan. But any recordings I do, you can't hear any noise even from the work outside because of the noise cancellation feature of the Go 2.4. Just to demonstrate the AI cancelling function of the headset, we're gonna start recording and we're gonna show you the audio just from the iPhone camera. So you can hear the, put the fan in the background and typical fan sa atin, medyo malaki, medyo maingay. And I am recording audio. You're gonna hear like two clips, the audio recorded by the Go 2.4 and then the audio recorded by the iPhone. So dito sa 2.4, you notice the sound of the fan is really muffled. You can't hear it basically. Pero dito sa iPhone reading the relief. And so that's the built-in AI technology in action and it works quite well. So on the iPhone version, you can very clearly hear the sound of the fan.  It's not very clean, but on the audio using the Go 2.4, recorded by the Go 2.4, there's none of that. It's just really my voice. And so, I mean that's a pretty big fan and the audio from that would be annoying if I were doing a live stream or things like that. But the Go 2.4 automatically cuts it out. Battery life is also excellent. I've been using this thing as my primary driver. So anytime I need sound on my computer, I'm using it kong manodong YouTube, kong ma-gaming, if for streaming and things like that. And to be honest, I've only had to charge it so far once. And you can really go several days without having to charge this thing. So you can be assured na hindi ka mabibitin. Delin mo siya outside of the house, you know, you're running around. And you can be sure na the battery will not die on you quickly. One charge goes a long way. In case you don't want to use the detachable boom mic, then the headset also has a built-in mic which also has the AI noise filtering technology built in. That's one of the things I kind of admire about the ROG brand. It's really like how can we over engineer something? Oh, may headset. Okay, it's going to need a mic. But what if for whatever reason, let's remove the mic that we've put it in. Let's just put in another one just to make sure para lang sigurado na it can always record if the user needs to. And it's really those kind of premium features and design engineering thought that we've come to expect from ROG. And so since this is ROG, everything is very premium. The headset itself comes with a hard carrying case. Perfect because it's meant to be a portable headset. The boom mic is detachable. There's leather on the cup and leather on the headband. The headset frame is metal, very premium. It doesn't feel flimsy. The black finish on the cans actually reminds me of the Motorola Pebble. It's a material that you don't mind, you know, running your fingers over because the texture is not rough, but it's also not super smooth. It's a kind of in-between feel that, you know, it looks very elegant, looks very sleek and it's also very nice to the touch. The three buttons are intuitive. You have the volume rocker. You have the media play button. And then you have the switch to turn it from wired mode to wireless mode. The volume rocker also doubles up as a mute button. And, you know, after one or two days of using it, you basically don't need to think anymore. It becomes second nature whether you want to pause a YouTube video, whether you want to lower the audio. All of the controls are easy to use and easy to learn. As an on-the-go headset, it makes sense that it comes with a standard 3.5 millimeter jack so that you can use it with other devices. If you're using it with your Nintendo Switch, actually, kaya na niya mag USB Type-C. But for other devices like a cell phone, the iPad, all of those things, everything worked well with a 3.5 millimeter jack. And that's what's nice about a 3.5 mm. You don't really need to think about it. It just works. Problema, it doesn't work with the new Apple devices because Apple being Apple, as you already know, wala yung 3.5 millimeter jack. But for less fancy hoity-toity devices, the Go 2.4 with its included 3.5 millimeter cord will work fine with most any device. Gaming actually on the 2.4 was actually pretty immersive and I'm surprised because I've tried a couple of headsets over the last few months. Pero yung Go 2.4 lang yung sobrang immersive na it's possible for someone to sneak up. Like multiple times, people in my household would come up to meet as di ko sila na pansyentas. They're gonna tap yun my shoulder just because nagugulat nang ako. Because I was super into the game also because of the audio, quality, and the general immersiveness. When you're using the 2.4, you're kind of cocooned in whatever you're doing. It's the first headset that really shut out the outside world for me. Lilapit yung missis ko, magulat nang ako, nakatabi ko na pala siya, which speaks to the level of immersion possible with when you use the ROG Go 2.4. My two main gripes about the Go 2.4, both stem I think from the fact that it's supposed to be a portable headset. Number one, the headcans are kind of small. My ears are somewhat irregularly shaped. You know, medyo abnormal sila. They're a bit big for the space in the headcans.  Although, I didn't notice while I was gaming.  I didn't really notice the discomfort on my ears. But when I was doing other things like chores, yun nga nagalutaw ng baggain, dun ko napansin that it's a bit uncomfortable. Sort of when your mind isn't focused on a game and you're just wandering over other things, I noticed that my ears got a little sore from the pressure of the cans on the, you know, on the borders of my ear. My second observation about the Go 2.4 is that this is not a break your eardrum headset. On one hand, that's a good thing. Audio quality is very good. Everything is reproduced well. Again, it functions well in game. The sensory cues, whether left or right, if there's gunfire behind you. This is very subjective and it could just be that I've gotten used to the sound quality on the other headset that I use for watching TV shows and movies. I have a Sinehizer wireless headset for that. The Go 2.4 has very good audio quality. It's just that sometimes I just wanted a little more oomph, more richness, more detail maybe, in the way it reproduced voices in particular. Very minor thing, didn't really bother me but it was just something that was hard to shake off while I was using it as my primary driver. So all in all, a very competent headset. I enjoyed using it. I'd give it an 8.5 out of 10. I think it's best to use it like it's intended as a portable headset. So something you take out of your house, something that you can rely on even if you're hours or even days, you know, your on vacation or things like that, that's where the Go 2.4 would really shine. Although the range itself is also pretty good, that's why I didn't mind using it for my daily driver on my own personal desktop. And so when the time comes, sometime soon hopefully when we can all get out without our masks and we can travel again, we can even go back to work again, we can take the MRT again, the Go 2.4 would be a reliable device to use in those situations except wag lang sa MRT kasi sigurado mananakaw to don't wear this on the MRT, it looks too nice, it performs too good, it's a damn good headset. Thanks for watching. And thank you to our top fans, Ashur Gabe, Anima Mundi, Mark Anthony Palanya, Christian Espinosa, John Ruben Otsha, the price shown, ITX addict. Your support literally makes the channel possible and for everyone else, please keep watching those ads. Thanks and stay safe.


Testing for new profiles. I hope you have joined the round table on Wednesday where we discussed some parts of it already. This is now a presentation about the different stuff we do to test new profiles automatically. During the talk in the second half I will now present what automatic tests we are using. So I will just start with it. So why should we use automated testing? Automated testing is fast, gives you a short turnaround to inform you if you introduce the bug or not. Best would be already before you push, but even after you push it's quite great. The thinner box will report it to you in normally less than an hour. And you know the cycle. Okay, we don't write tests because we don't have time, we need to fix bugs. And that's because you don't write tests originally. If you add a test for each fixed bug it won't appear again. And over time the number of bugs that will be introduced decreases. So you just need to make the cycle once and suddenly you have time to add your tests because you have less bugs. So how do we actually have developers write tests in the office at the moment? So we have a quite good testing framework already. It's built around CPPUnit. It works on all platforms, so it works on Mac, Linux and Windows. The shared test code is in Unotest and Test. You have already quite a few tools there that help you to set up the office for tests. HTML and XML helpers. XPast alerts, there are quite a few. Niklaus introduced them. So you can assert on an exported document that something is there or has some special value. You can validate exported files. That's quite new as well. So at least in Kite, we already used that. Every file that is exported in our tests will be validated with a validator. And we find, therefore, validation errors already in the tests on the tinnet boxes. And there are existing frameworks for writing tests in Kite, Infras and Writer at least. I think Base has some existing code that's in a quite rough shape. Math does not have many tests yet. There are also some real unit tests in other modules, but it's more difficult to test them and you need to read more code because there are not that many tests yet. So the different types of tests that we have right now, the most complex one is actually you, Kite, you, Writer and your Infras. They link statically against the core libraries for these modules and therefore provide access to the private symbols. So you can really use more or less everything in Kite, everything in Writer if you write the test there. But what's not possible is to import files because you are in a dependency problem loading the filter library. They are quite fast because they have not access to everything like the import. But of course it's quite hard to implement something there because you need to know all the details of the library. So it's most of the time used for testing something special or a dynamic change that you can't assert after import or something like that. So our import and export tests, they have gone quite a lot. Mostly thanks to Miklos and the Writer guys who are more or less at the test for each fixed import and export part. So they are more or less separated. We have the import test where we import a document and then make an assert or most likely through some UNO statements and assert that a condition is true. The export tests, we have two different types. Export to file, import it again and then similar to the import case, assert on the content or what's quite new is Miklos' concept to assert on the exported file to expand that we have the correct value into the file. They are slow because we have to load a document and over time if you add many test cases you have the load time of like I think 15, 20 or 30 documents and as you know loading the document is quite slow. If you need to export them it's even slower. It loads our repository so if you add such a test case make sure that your document that you use for the import is small. We had some cases where people added documents that had one megabyte or something like that which does not scale. They are quite easy to write. You just need to create a document that contains what you want to test or what you fixed and then find a way mostly through UNO to assert that what you fixed is correct. You don't need to know that much about the internals for example write or archive because you can just use the UNO API. Then we have API tests, two types. They are all Java tests. They are slow. They are one in the subsequent check target. They are a bit unreliable so Stefan fixed some parts of it but they fail from time to time for no apparent reason. They internally use some sleeves to get everything right and the assumption is that if you sleep for a second you can call the next stuff but that does not work all the time so then you get a test failure and if you run it the next time it works. They are quite hard to debug so you have some fun setting breakpoints in the Java code and hoping that it works or setting a breakpoint in the C++ code but it's still the only way to test each part of our UNO API because writing new test code for that will take years. But for zero code we have our C++ based tests. They are more reliable. They are in process compared to the out of process Java tests and it's a lot easier to debug them. It's similar to the other tests we have direct support in the build system and you get your GDB session put your breakpoint there and it will for sure stop there and it's easy. You should use the C++ wave for new tests or if your Java test reliably fails it's most of the time easier to port it to C++ and debug it there and fix then your issue. There's also an easy help to at least rewrite the disabled Java tests in C++ which would help us to enable again more API tests. We also have some external testing automated mostly so I think the most famous example at the moment is the crash testing which runs on 55,000 documents imports them, exports them to a few formats I think at the moment they export about 150,000 documents and that attracts if we crash during import during export and then validates the ODF and OXML files that are generated and publish the result on the URL and also mails the developer mailing list with the number of files that crash Fixing there is appreciated we still have I think a few 10,000 validation hours We have for the last one suddenly 100 more import crashes and a few hundred more export crashes so there's some room to fix some new stuff We have Moxtrap, it's manual testing but it should be done for the past that can't be automatically tested at the moment like all our UI code is not testable and if you have a test case or a bug that they have no idea how to test it and after talking to us or to someone else you decide it does not make sense to write an automated test it would be good to add a Moxtrap test so that at least it's tested for the manual test runs before release and then my question is if you have more ideas what we can add what we should add and just talk to me, I'm always open to new ideas I'm happy to add new testing ideas if they improve the project Do you want to make a question for us? Yeah, we can do that Any questions to that part of the talk? What's holding us back from doing UI testing? UI testing is very fragile so if you change the dialogue if you change the layout there's no good library support testing libraries that support UI testing One idea is to go through the process dispatch mechanism I think the Patrick guys are doing something in this direction but in Java and I want to avoid Java as a testing dependency and it just requires some work to explore what's possible another idea was the accessibility API but that one is slow it's also not the best it's quite a few modules for example the kaipon needs some love It's quite an idea What we do in Java is we use interface elements as an identifier and then we actually get the UI toolkit so instead of saying press the button that I'm going to apply we say press the button that I'd be like us Yeah, but it starts already How do you open the dialogue? How do you get to the dialogue and stuff? So getting to the menu, to the dialogue you name the option, you move the option and suddenly it's not possible anymore So that's where you need to find a way to make it reliable because unreliable tests don't help So you need to find a way that's really reliable that's low maintenance for developers and yeah, I haven't found a good solution yet but apparently Michael has So I have this picture of an info monkey state that is quite a trend in the inter-European and of course you can semantically inform that by what acceleration is available for menus so basically it's just doing this a lot and we'd love for some help to make that more intelligible already it's done some nice performance problems with Asian characters so anything that you can do at possible times can be viewed as well Yeah, something like that but trust takes some work and some exploring Another question was do we have a minimized practice case? No, so it's all manually at the moment yeah, Pat there is appreciated I think Miklos is doing most of the adding test cases at the moment so I think he had I think 280 test permits in the last two releases What source? Yeah, I think it's Miklos, I saw the numbers and before I forget I forgot one of these external test cases is the performance testing by Matos which helps quite a lot So the top unit test cases are the top five are Kovay We launched their phone Kovay so it was counted as a big option Okay, any more questions? Okay, Michael again Can we have a fuzzing in your import and export crash Tesla? Yes, sure If you give me more power I'm happy to have fuzzing So it's running already for four and a half days It's exposing kernel bugs so we've already found a GCC, an LZ bug and a kernel bug with that At the moment it's not possible to add more but if you add more hardware, sure On the more hardware account I saw this wonderful presentation by the infrastructure guys and I still have the idea that we should just make the Ibrafus home page and say we write back building for a week and then we'll have enough power for everything that we want to do with testing I don't know if our users would appreciate that too much So, yeah So I want to... Can you hear me? So I want to talk a bit about the new Tinder boxing stuff that I did and the reason for that is that all the testing that we do Tinder boxing is also testing It's testing the most basic thing that something is building We have one web page for all of this which has like the 23 different platforms and types of builders that we have but in an ideal world we would have all these results and all the stuff that Markus showed Ideally accessible in one place so that you can see what is breaking There's for example, actually you could maybe do that with the current Tinder box page in a way that you would have like the crash test reporting read if you have more crashes than the last one or something like that but it's not really real for that So let me just quickly go through what TV3 does It does just building like a Tinder box building the newest thing like you know Although building can also mean just running a test or a crash test or whatever So the actual implementation what you test is, is abstract and if something breaks it can actually go back in time and bisect the first commit that that broke something and it can do that on multiple repositories and that means you can do that for example on the source code with real builds and stuff that you do in the build but you can also do that for example on a BIOS repository and just have a set of documents and see when was the first crash when was the first time that a document started to crash and put this in some web page like this where you see okay this was the last good commit and then the next time I built it it started, it looked bad and so it went back and tried to find the first commit that actually broke something and we can also see there's not yet known which means that there are new commits on this branch adding new stuff So this stuff roughly ready just working on that a bit at the site and we never really deployed that because it was not really easy to deploy so what I did now is put the whole thing in docker-sol so that you have docker-containers that do this stuff and this means that all the stuff is auto-configured and makes it easy to set this stuff up and have a reproducible environment so you can use that for example as a simple tinderbox just running on your local machine but you can also have multiple tinderboxes running on different hardware doing the same test for example and have some of them in some cloudy thing and other things actually in physical hardware and the main point is you also heard this one before that with docker you can actually have reproducible environment for the tests that you are doing for example you can have our baseline for example in an image and then you can actually test on your local machine still while this is breaking on the baseline and not on your machine so let's look into how this stuff looks up it's actually quite simple if you look at the project layout I'm going to upload that later this week it's just this salt master that distributes the configuration to all the machines it's the image of the minion which is a docker image that takes the configuration from the salt master a made file that creates all these images and then some salt configuration and an example script which is like the perfect script for every developer because that one always says this build and this was fine and there was no problem with it so if you set that up locally for example you just say make SSHP which generates the key pair for you to lock in and configure the salt master you never do that manually but it allows you to remote control that from the made file and if you then type make the images however many you want to have and configures them and sets them up, installs all the software on them and stuff like that and that takes 5 minutes and after that you have the whole thing set up locally and if you type make start all container start up and work with each other there are more commands but I will not go into that right now and then you have essentially the tinder box that if you have no new commits that looks if it's broken if it's broken it goes back in time to spider-secking so you can simply spider-seck with a good UI or you can use it as a tinder box that actually runs against something that is a moving target changing and to show you how the actual tinder box script is stuff that does the test whatever you're testing if you're testing a crash test or whatever is this is essentially the whole thing that you need in the tinder box script this is the example that never fails but the first thing it does is it tries to see which commit it should build, this is the first request so that's one URL and then it says okay I'm gonna start building this and the MN says okay I'm finished and this is my result as you can see here the result here is always good so it never fails so yeah actually setting up a tinder box that runs against this is quite easy and you don't have to take care of all the testing infrastructure and working results and stuff because that is all in the other things so you just have to add a test and whatever you want to test you can test with these three URL requests okay so that's my part of the talk if you want to know more about that there's the URL at the beginning on the first slide and my other talk also had quite a bit on TB3 and how the details work any questions?


Cool, I will start So we keep things on track. I don't want to be blamed for it I'm Robert Mesa Roche, which is a Hungarian name It means butcher in English. I mean my church is I live in Romania, but I'm joining from I been a developer for a few years now and Initially what got me interested in end-to-end testing particularly was some work done on a legacy application on a legacy application where there were no tests and introducing any kind of other tests then end-to-end test is quite complex because that would mean you would have to do some refactoring and with end-to-end testing we can kind of like solve this problem and Give us like a head start and a good baseline For tests so we can do refactoring later Today we will talk about end-to-end testing in the context of WordPress with playwright, which is a tool and especially with the test uterus from WordPress To lay down some expectations first we will Get on the same page We will have a working definition of what testing is what end-to-end testing is particularly then we will take a look how We ended up in the situation that we have two test uterus today in WordPress And how that is going to be solved in the future Then we will dig into playwright and the test uterus based on that then all the things that feed this cost will be put in use in a sample project that I prepared and There we can see everything working together and at the end We will try to draw some conclusions. I will share a few more resources that you can follow and there will be hopefully five minutes for questions That I'm happy to answer then we will say Goodbye, so what end-to-end testing? We can say that end-to-end testing is a type of testing many types of tests testing exists sometimes the types of tests are represented in a pyramid of tests where end-to-end test is at the top and at the bottom we have the unit test and why We have this arrangement Hopefully will be clearer by the end of the talk Testing This is like a definition or a Formulation from the book full stack testing all the things which are like underline are clickable. So you can just like follow the Links find more information there Testing is just a way to validate our expectations in the Software world you are validating the behavior of our application What is important here is that we write the expectations. So the expectations have to be right otherwise or test or worthless and just this practice of Reflecting on the our expectations from the application typically brings a lot of clarity in all kinds of ways We want tests to be repeatable We want to have the test run as often as possible because if we run it often then the chances of introducing bugs is just slimmer and to Do it manually and repeating the same test which quite might be like 100 tests or Pretty boring and time consuming So we can use tools to do that We can never really replace manual testing and the two can coexist easily together and Especially because automated tests typically are derived from the work that was initially done by a manual testing So with all these definitions We can get closer to what end-to-end testing is This is a description from an article from the WordPress make website And here are a few things that are important One is that we are interacting with the application with end-to-end test So we are not testing a function like we do in unit test We are interacting with the application as a whole It's kind of like means that we have to have the entire application booted So we have to have WordPress running and this is why we have the production-like environment also in the description in end-to-end test typically we use the browsers to perform our tests and We are validating different flows This means that we are mostly interested in a journey that the real user takes and The things that happen during a journey journey you can imagine in a e-commerce setting that the user searches for a product it adds it to the cart goes to the checkout and Pays for it. So that could be one flow. Of course like Leaving a comment would be a very different flow That's end-to-end testing is used in this way if you just go back to that pyramid You can see that end-to-end test is a high level test Which means you are not interested in the foundational level of our application, which is the code And that's what unit test does it verifies the code here We are really verifying the integration of the entire components that we have Playwright is a tool to perform these end-to-end tests There are other tools like puppeteer. The puppeteer is one of the other tools used in WordPress for tests playwright is a more modern one It's actually a fork of puppeteer It's considered more reliable these days and it really also allows testing in all kinds of browsers in all kinds of operating systems in continuous integrations we can even test native Mobile emulation and what is more important for others outside the WordPress ecosystem? It also supports other languages like Java or dotnet the WordPress test utils is some kind of helper functions that are On top of the testing tools like playwright or puppeteer these Test utils are practically used by Gutenberg But they are also integrated by core and because they are published like standalone packages We can also like Consume it and use it in our teams or plugins so this this is how a test looks in Playwright and I underlined the part which comes from the test utils Because playwright in essence doesn't have any knowledge of CMSs and also not about WordPress So we need the test utils to perform some actions in a very convenient way We can still do all the things that test utils provide without the test utils itself But it makes it much more convenient the rest selecting an element like heading in this case is Available in playwright and also the source assertion that that heading is visible on the page It's also coming from a playwright To somehow complete that definition from the From the article from the WordPress. This is comes again from that full stack testing book Here what I highlighted is that we can only have just a few tests Which practically activates all components. So if you think about that e-commerce example During the journey that the user takes from searching the product adding it to the cart and going to the checkout it practically activates all or many functionalities of our application and with just a few tests we can confirm that those Parts of our system work and interact Well And in that sense to think about the pyramid We can argue that We can have just a few entrant tests and that might be even enough the other part to complete this book argues that Downstream system should be also included in the e-commerce example a downstream system would be Another service that we integrate may be like QuickBooks for like invoicing The book argues that during the end-to-end test We should also check that we are integration with third-party system is functioning So end-to-end test should cover that for example after a successful checkout Actually the invoice is somehow generated in the QuickBooks or is it available in our system Now I'm going back to the two test utils and how the entire end-to-end testing in WordPress started So the Gutenberg project was kind of like kicked out at the end of 2017 and Even in the early phases Entrant test was integrated in Gutenberg initially they used Puppeter and all the work that was done in Gutenberg regarding testing the foundation work practically resulted in the standalone packages that we use today and so in the middle of 2019 so kind of like two years after Gutenberg was started the after the foundation was laid for the test utils a standalone package was published which is Under the WordPress slash end-to-end test utils and the first testing core was added and also it was integrated into the Continuous integration pipeline and the fact that it was published as a standalone package meant that other plugins Where everybody from the community could start Using it which many did In the next years there were a few more tests added in core But not much happened in core At least not on the surface When the package was published initially it still remained in the Gutenberg repository, so lots of work might not Been in core but in Gutenberg many things happened After a bit after the package was released in 2019 Right after one year already people started discussing about switching to playwright playwright Started become more solid people started noticing it and they were very good arguments for using it But it was decided to wait a bit more until the platform became more stable and In 2021 October after a lot of testing and a lot of work that happened in Gutenberg where they practically Compared the two tools performance It took a look at the reliability of the test was kind of clear that a playwright is a better choice and because There were only a few testing core it kind of like made sense to start migrating at least In the Gutenberg. This is where the first proposal was made available to the public People did not really oppose to it. So practically six months after that The announced announcement was made that Officially the test utils will be switched to playwright Really good clear and solid plan was like formulated and people started following and implementing that plan The migration process is still not finished. You can we can still help with it and if you follow the link under this Text you can see how you can engage with it This was this is the migration steps The first was to integrate it in the Gutenberg which happened practically right before the proposal The tests are currently migrated from popular to playwright in Gutenberg You're kind of like at 70% now. So there's just a few more tests left and Since there were only a few tests in core those were already migrated It's important that the WordPress core is highly tested But it's not highly tested by end to end test and the reason because end to end testing is pretty new to the WordPress ecosystem as a whole but WordPress is very reliable and well tested with some kind of unit test and The last step once the migration happens in Gutenberg will be practically removing the old page Which is the proper term on the Practically the migration of the WordPress core just happened in October so just a Few weeks ago. This is I think a really important milestone because it Signals that playwright is really ready to be used Even it is still on major version zero and we won't see the version 1.0 until all the Tests were migrated in Gutenberg When this will happen in my opinion likely next year, but we can already start using it Now digging into bit playwright Playwright is the foundation for the test users and If we take a look once again of a test and in all tests, we will see at least an assertion We'll see some kind of actions performed and we will see locators Locators are practically you can think of it like selectors Like some kind of query selector that you would do in JavaScript This is for selecting practically element on the page. There are many ways to select Sometimes you want to do it by the label by the role by the text or you can just use plain CSS selectors or something more specific to playwright which are like test IDs Once the selectors or the locators are selected Actions can be performed on them so if you're talking about like a Text input field, then we can just like fill some value in it If you're talking about like checkboxes, we can check them We can even hover over them We can perform all kinds of user like actions that we would do as we would browse website When we perform those actions, the important part is kind of like to validate or expectations of the things that happened and we can do that using the expect functions and We can just sometimes simply check that the checkbox was actually checked or some kind of Classes were added maybe to rebuild an element. We can check that some kind of element became Visible in the viewport with some kind of scrolling happened. We can check Rest API responses if things went well or we can actually check that we arrived to the right page after some kind of form was submitted and just with these three things with Locators actions and assertions we can do quite a lot of things On top of these things that play write offers We can we have the end-to-end test utils as mentioned whatever That the end-to-end test util offers is more like conveniences. We could perform those things also with play write One of the things that the test utils offers are more general Helpers like that we would do on the page like pressing keys This could be very important for example in the editor where like some kind of combination of two keys perform some kind of actions It makes also more convenient to resize the browser or to drag some files from I don't know to the screen Then we have something which is more specific to WordPress like admin utils like Navigating to some kind of admin page or visiting the new site editor or creating posts Using that add page or add post button available Other than that it also offers conveniences to interact with the WordPress rest API So just by calling a few methods we can just create a post delete all the comments or activate the team and when some kind of Endpoint is not supported or we are dealing with Third-party endpoint we can just use the more lower level request utils rest method to perform really any kind of Rest API action either deleting or just like posting something Since the test utils were started in good some work we have a bunch of Methods which deal with the editor inserting blocks publishing it going to the preview page all kinds of things that could be automated or Automated and available as a method Then we have some kind of other utils which are important for doing performance measures like Lighthouse getting the report or just checking how the server responds This kind of like means that we can not just Navigate the website with the end to end and with play write we can actually perform other kinds of tests which are like performance tests and On top of this of course if you have like a bigger projects We can extract something some repeating things to project specific utils and One good example is this the WooCommerce blocks Where they integrated play write and the WordPress test utils, but on top of it They built their own utils And because we are dealing with WooCommerce This offers the possibility to add items to the court go to the checkout clean the court everything that you would expect to do in In a WooCommerce website now that we kind of like have a good understanding of at least a base understanding what's available you can take a look at the sample project and the sample projects tests Community plug-in, which is called WP guest bar We are integrated into github action So we have continuous integration and we are using the official Docker images So there's nothing really Complicated going on if you just like read ever an article how to set up for press for Docker. It's pretty much The similar thing So jumping over to the actions straight to the actions you can see that we have Two branches. We have like a main branch where the tests tests Performed successfully and we have like another branch where we purposefully failed the test So we can actually take a look what happens in those cases Interestingly the test run on two wordpress versions and two different php versions This is kind of like to demo that it's quite easy to Run the same tests in different for press versions or even php versions and if we take a look at the Steps that are performed what we have is just like checking out the repository which is like a Core github action feature then we have the option. We have the step to set up the test environment Here because we are dealing with docker.  We have the actually the test and We have eight test and what I want here to highlight is that we can actually Without knowing anything about that WP gas ball We can write the tests in a way to really capture the essence of this plugin and just by reading the The test descriptions we can get a really good idea of what the plug-in does so practically We can describe the specification of the plug-in with the test so if you go over it you can see that if The plug-in is not active so practically just after installing wordpress We don't expect to have any admin board So this is the standard wordpress behavior if you are not logged in you don't have an admin board but once The plug-in is activated and we are just a simple visitor Then we expect that we have an admin bar and that admin bar has a login link Which prompts us to log in practically other than that We have the possibility if you choose to to display some kind of custom message in that admin board and We know that custom message is optional because if we don't set it There are no custom message displayed. So this verifies that there's no fallback message display and We know or we expect that that custom message to expect some kind of HTML to and to be able to style it Which means that maybe we have the possibility to I don't know color the text in red and use some kind of a strong text But once we are logged in Maybe as an admin or as a subscriber Then we expect the plug-in to not tamper with the default wordpress behavior This is just showing the default admin bar with the how-the-message and the typical menu items and On the admin side the plug-in exposes a link under the settings menu which allows us to go to the to their option page and On the settings page of the plug-in. We actually have the possibility to set the messages and Practically, that's what the plug-in does. It's a very single-purposed Plug-in, but it does it really well Now how this thing is achieved and how we are testing it If you are like maybe checking it off toward the presentation There's like a recommended order of browsing and you will practically Follow that hopefully this will load It's already loaded. So the first thing is Is the configuration of the playwright? The configuration can be quite complex in some cases But with just a few things we can just get started Can just say that hey every test are in the test folder Which are like it saw that we have three test files We can define to have something run before all the tests are performed And we will take a look what these global setup does and then we have a few settings turned on Which is like in case something goes wrong like one of the tests fails Which we have on or one of the branches Then we want to maintain all kinds of information like screenshots videos traces just to help us to Debug the things that could go wrong and We saw that Playwright offers the possibility to test in all kinds of browsers and all kinds of devices here We are just testing on Firefox, but we could add other browsers here too Now going to the first default test Everything that we see here is we discussed it What we are seeing is some kind of locators in this case. We are just using CSS simply an ID we have an assertion happening which we are saying hey I want to verify that actually the admin bar is not present When the plugin is deactivated and all this should happen on the front page So that's why we are using page go to slash which is Assuming it's our root URL and not the admin page that we saw in the presentation And that's all with this we kind of like confirmed or base use case of WordPress Now before going to check out the front test Front-end tests I want to talk just for a moment about this global setup and why this is needed and Why why you will definitely have it in your test if you will test your team or plug in Because we are testing for this plugin both the front-end functionality as a visitor, but we are also testing the admin functionality Where we are required to be logged in we somehow have to perform that logging in step and When we log into WordPress when we fill out the username and password Actually, WordPress stores a cookie. So for example, if you would log out and you would clear your cookies immediately You would be immediately logged out because the cookie no longer exists and Because we have repeat a test where we are required to be logged in Instead of logging in over and over again We do the login process before any tests are ran. This is the first thing we do We grab those cookies that are set by the browser and we store it We persisted this is what happens here and Whenever we want to be Authenticated later on in one of the tests we just make that cookie available to the browser. This is How we can be authenticated WordPress kind of like hide this complexity of the steps of logging in but practically you can imagine that behind the scenes Actually fills in the username and the password, but just in more convenient way With this information we can go to the front end because here we have the visitor What down we have the logged in group First of all because they are like multiple tests here We extracted the step to activate the plugin in the default test We just had one test So we just like deactivated the plugin inside the test But here we are doing it practically before the test are run in this file and The actual test performed for the visitor are very similar to the ones that we saw in the default test We are just trying to grab the admin bar and we are also trying to grab that login link that we expect expect from the plugin To make it available and we are also grabbing the URL of it And we are just practically checking if the admin bar is there if the login link is there and if the login link actually points to the URL that we expect and If all these requirements are met Then we consider this test Correct We also have a few tests For the custom message that we discussed and to also demonstrate The possibility the option or the way to introduce a custom util We have this WP guest bar util which behind the scenes it hides the complexity of setting up a custom message If you will have time we can just like Go over it later on So before going and navigating to the page we want to set the custom message So we want to have it in the database before going to the front page Otherwise, obviously the message would not show up and you just try to query for that message and you just want to check if it's there Checking the opposite. It's a bit trickier because We cannot simply search for the message or we could but I find it's more More easy or more straightforward to look for some kind of element in which the Message is rendered and to check for that We also have the in the custom util the option to delete the message and It also has the possibility to add that HTML that you're checking with later and here we see some new things like new Methods assertion methods to practically check the existence of the CSS Practically, we are checking if this style is actually rendered on the page And this is where that authenticated step and that storage comes into place To only make that authenticated Context available with this is why we put it inside this task group. So it's practically Not put at the top because that would mean we would be authenticated for all of the tests This is why this is not commented here So in this test because we make available to cookies we act as a logged in user and we practically just check whatever WordPress does by default, which is adding the how the Message and the how the message should practically point to the profile link Then on the WordPress admin tests Because here we want to be authenticated for all of the tests we practically Made the context Available as the first thing For the same reason we also do the activation step Before any other tests and Here we don't we should not see anything new. They're practically using the same old Locators the same old assertions that we saw the more interesting thing is maybe checking the settings page Where we make actually use of multiple actions One is filling the mess filling the input field with the message Then practically clicking the save button, which in fact will trigger the form to be submitted Which reloads the page and then we check for the success message and we check for the Existence of the message that is set This is these are the test to cover all of them now to check The failure because this looks all good, but many times Things failed First of all if things fail we get some kind of error message already in the console We're in these kinds of output from the GitHub action and Sometimes this might be Enough to debug and know what went wrong You can get some kind of message that we expected things to not be visible, but we actually got something Visible this already could tell us what went wrong And later on we also see that we expected the string, but we received something else and If this information is not enough Maybe we have some kind of other test other messages that it's not really clear then we can make use of those screenshots or That video that we are saving when things went wrong in the context of GitHub actions those are Practically saved as artifacts so we can just like download and inspect whatever went Wrong, obviously if you are running the test locally you just have access to the test results immediately So I already downloaded in advance Let's take a look When something fails we get the folder for each Test that have failed and we immediately get the description of what went wrong And here we have the image we have the video and the trace so the things that we call be configured in the Playwright config So if you take a look at the screenshot, we actually see that the admin bar is there Even though we expected it to not be there So this is really a visual way to check what went wrong instead of just reading the message The video in this case it doesn't tell too much because Practically loading the website you see the website loading up, but it doesn't give too much extra information compared to the screenshot But if we take at the other test that went wrong Here we see a bit more in the video Which is like not captured in the screenshot, which is the option to actually filling up We we see things happening real-time so the user or the browser filling up the message and the refreshing going on Still if this is not enough we can use this trace file the trace file Can be viewed If we if it just a zip we can just go to the trace playwright dev Just like drag and drop it here and this will give the steps of the test So we can see that initially we navigated to that option page Then we selected the input and we started typing and in the next step We already have the message filled in Then we selected the save Save changes button and we clicked on it the refreshed we checked the Setting saved message to be there the notification and then we got some kind of error and The error is practically that we are not Getting the right message at least not the message that we are expecting and with this trace It also gives us the option to jump right through to the test and see The exact line where things went wrong You can also see kind of like looks like the net looks like the browsers Inspector where we get access to all the network requests happening You can also see the console messages that might go on and we can actually also check and Debug the Locators Cool, how are we standing with the time kind of lost track? but If you go back here go To the presentation we can draw some conclusions, hopefully one is that Entrant testing is really within reach this means The basics and the fundamentals are not that complicated the locators and the Actions are just really a bit similar to me like the jQuery Well, just gives a good simple language to interact with elements on the page and the assertions might be something new If you never use tests, but I think it's still very understandable And I think it's a very good starting point Because we can cover the the Functionalities of an already existing product product in this case of a plug-in that we saw It's also a good starting point to have like a baseline to then introduce some kind of refactoring speech are not really doable without Solid understanding of the product and I think it's really Immediately valuable because just with a few tests you can actually get a lot of clarity and a lot of value added to our work and There are a few things which we did not have time to cover One is the test generator and the UI mode So in case you are kind of like afraid to start writing this test on your own Playwright offers the possibility to actually generate this test with some kind of clicking Interface so it's Even for very very beginners. It's quite easy to get started It's also possible to do accessibility testing with playwrights. So they are tools The same way for example, we saw some kind of performance utilities from WordPress We have accessibility utilities from other packages It's also possible to do visual comparison So we can check for example if you are working with CSS to check if we introduce some kind of bugs Did that have any impact on certain elements? It's possible with playwright And then two other pages that I want to highlight is the best practices page Just like go over if you ever want to get deeper into writing text tests and obviously the poppeter migration Which is helpful if you already used the Previous test utl from WordPress because this gives you like a kind of like step-by-step process how to migrate your old test to playwright because the syntax is quite similar and It's not that complicated and as I shared this material and this Sample projects is publicly available. You can go there. You can dig a bit more through the files and See how things play together


How are we and what is going on? Welcome back to another video. Welcome back. What the f- Did I sit on that?  I love these videos I don't know if they're gonna suit everybody, but you know, I'm a big kid at heart And I don't think I'll ever You know, I got my first PlayStation one at five years old Right. I was five when the PlayStation first came out. What a time to be alive.  I was absolutely obsessed. That's what we did as kids. We played sport, but he also came inside and played PlayStation Tony Hawks Gran Turismo When rugby games and sports games came out. I was an absolute, you know, mega fan So now that we've got the ps4 with the graphics we do and the ps5 is about to come out um You know It's and my youtube channel, you know, I can create content and bring it out to my youtube channel Around video games.  I'm having a whole lot of fun And I really hope you do too But with that being said We are going to take this, you know, relatively seriously at some point because we're making what we're doing We're creating each individual player On a rugby field As a certain NFL player, okay This is basically the lineup that I named last year when I made a video called I just made a full rugby team of NFL players and this is how it went um I basically rattled off, you know With my knowledge at the point that it was at the time a whole team of NFL stars that I thought would transition across well Into certain positions on a rugby field. Okay today's mission We're going to be creating a winger In the game of rugby a winger is Basically a wide receiver. That's what it is. It's a wide out. It's a wide receiver. You stay out wide You run routes or Lines as we call it in rugby to put the defense off You know getting that ball on the burst at pace is is super important Just like it is in american football You want that ball to be thrown out in front of you when you're sprinting So you can grab it on the chest and continue running rather than have to like look back or fumble it or whatever So in the game of rugby, it's exactly the same if you're a winger. I'm playing on the wing at the moment I'm out wide I'm basically watching that guy inside me and then watching the guy inside of him Making sure that I stay Deep enough so that you know, I can play whatever happens in front of me Right, I want to be able to run onto the ball at pace Whatever happens and that's going to be up to me to Watch what happens and also to be fast enough and to be you know Agile enough to be able to get into positions quickly and You know to take advantage of them and score in the game of rugby because anything can happen at any time But as a winger, you pretty much are out wide for most of it waiting for that ball to come now There's one player ever since I saw him And one player only that I've thought okay. We have to see what this guy does when he gets on the wing In the game of rugby And if we can't see it in real life, which we probably won't unless he's paid millions and millions of dollars to do it His name is tyreek hill and the only way we're going to do it is in this game. This game's titled rugby challenge three I'm about to create tyreek hill as a rugby player and put him on a rugby field I'm about to create the fastest player in the nfl on a rugby video game And watch him cause carnage. I absolutely cannot wait for this. I'm excited as fuck I cannot wait to to I can't wait to play with these guys in the game And with that being said, let's get into it Yeah Tyreek now if hill As a last name is not there or there it is we don't have to worry about that So that means that every time hill gets the ball out on the wing he breaks a tackle or he makes a tackle Or he scores a try or does anything You know the commentator will call him by name, which is going to be sick He's from the us He is of african descent We're gonna say we're gonna say left wing actually we're gonna say yeah on the left Um and with that being said we're gonna call him a left footer Even though I don't know if he's left footed or not, but if he's on the left wing You want to be banging off that you want to be you want to be banging off that left? Um, I don't know if this actually makes a difference to their game, but we're gonna give it a shot. So he's left wing Attributes, okay If we go left, I wonder if left wing is any different to right wing. Let me see No, it's not. It's the same. Okay Right, so if I look up tyreek hills madden statistics from madden 20 Um the latest readings by the way if they do oh my god 99 speed Wowie, okay fitness You gotta be fit, bro.  Yes, you can and we're gonna do it. It's gonna be the only player we do But I do know who's gonna be 99 And that's gonna be henry rugs when I'm making what I'm gonna do is I'm gonna create a full team of 15 players with current players and then on the bench is gonna be either college or retired players So that they can sub in which you know gives me an opportunity to Include players that aren't actually currently playing in the NFL acceleration 99 We're gonna call it 100 aggression.  Okay Are you with me still? Yes, you are. All right aggression 85 agility Do I even need to look 98? All right, we'll keep it at 98 break tackle Well, look if it's not through strength, it's through agility.  I'm gonna say 55 passing I feel like you probably spin the ball pretty well Probably prayed probably played quarterback in high school. We're gonna go 80 Offloading 80 general kicking. Look, I think I seriously do not do not think he can kick the ball for shit to be fair Tyreek, if you do see this Feel free to correct me if I'm wrong, but we're gonna go And you know wingers do have to kick the ball sometimes But hopefully if we make his kicking stats low, he may actually run the ball more often.  We're gonna go 90 strength We'll take that from Madden. That's 64 mental agility and discipline Now what I've been doing is I'm taking their awareness statistic from Madden I'm grabbing Whatever they have above 50 in points Dividing it and adding that to each of mental agility and discipline. He's 94 awareness. That's 44 divided by 2 Equals 22.   So we're gonna say 80 Right First thing I want to do is sort out the complexion Because that changes a lot. Um We're gonna We're gonna go, um That one Now where is he? Fuck. He's got a wide. Oh my god. Oh my lord. Why do football players have such wide necks?  What's this? What's his hair like now? He's got dreads. Yeah. Oh, no. No. No actually Does he have a little bit of blonde in there? Let's see what we can Um, you know what?  Um Oh, wow boom Body Right 510 or about 177 And 185 pounds so we're gonna call them 178 and we're gonna call them 84 178 centimeters and 84 kg Literally the only player I've ever gone down in height in And backwards in weight you go to play to your strengths in the game of rugby, right? There's players on the field that Are good at all sorts of different things. No one's good at everything And I'll tell you what there ain't nobody in the field that's gonna run a nine second 100 meters Boom got it. Okay He's absolutely shredded Um defined. Yes arms.  Oh, oh, he's got the highest star rating so far. It's all that speed Tyreek Hill left wing 94 Sweet, so what I'm going to do now I'm going to put Tyreek Hill on the left wing for the all blacks I'm going to swap the left wing out I actually I don't know who it is. I think it's uh, Julian Sarvea We're going to swap them out put Tyreek Hill in it's a 10 minute match on rugby challenge three The team is going to be called team Tyreek Hill.  I wish I you know I could Shit, this could be the one game that I try and Commentate myself. No, you know what it it just might be actually. No, you know what no I've got big plans. I've got big plans once we have the entire team finished And then I can create the entire rugby team full of NFL players and then pit them against other teams That's when I'll start commentating and I can't wait to do it But for now, we're just going to watch the sim game. I hope you enjoy. I hope Tyreek Hill scores a couple of tries I wouldn't be surprised if he does I want to see what a player with a hundred speed actually looks like on this game And with that being said I'll see you there Twickenham Stadium is the spiritual home of rugby union and is the largest stadium in the world to be solely devoted to the sport Steeped in history. It is somewhere players and fans the world over dream of visiting My co-commentator with this match is former all-black Justin Marshall And you couldn't ask for better conditions, could you? It's a scorching day here and the fans are in a good mood. I hope they'll remember their sunscreen A packed stadium like this really will get the players all fired up It should be a good game of rugby Your blacks form up for the Hucker Challenge accepted. I think it's fair to say We're all ready to get the first half underway There's the signal and here we go Kickoff dragged down Back to his feet quickly and wrestling for the ball full defense Richie McCaw delivers it on I need to turn it over quickly Brodie Rotale gathers it out of the back That's still alive. It's still on from New Zealand Aaron Smith moves it on Looking to jink his way through Yeah, but still on their side Very good position for them to attack from here Ball lost for you So ref playing advantage He'll be disappointed with himself for knocking that on Rutgers fall, he has to release Players only just arriving now Shut down with a brutal tackle The referee has pulled them up. They'll go back for the scrum First scrum of the match Davis puts it in Good solid defense so far both And a good battle going on here USA have some problems at scrum time Ball's out here Hill moves it back. That's a very good run Carter can't beat his man Your blacks should be keeping this surely Hard and straight Everett shakes him up in that tackle Franks picks it up But Anoru walked down just short He keeps the ball moving Oh dear the whistle goes as they get the ref's attention And this is right on their own line There might be a yellow card for someone here And they'll kick for touch here They'll have a line out Takes it nicely Richie McCaw pushes it on That's gone dead and I suspect they'll take the kick here 22 meter restart now He dives on top of it Ben Smith pumps the legs for the good charge Keran Reed charging through big run Great work to keep the ball alive here Liam Messam taken nicely there The ball there now Brody Rotellik keeps it going Wyatt Crockett tackles superbly there Great work in the rack It might be stolen here Moving up the field but still a long way to the opponent's try line Now taken to the ground in a good tackle Well they had to defend valiantly for a number of phases That's still alive, it's still on for the Orblets Strong defense Giving me a lumb Royce The ref wants him to let it go of it Just starting to get a bit of dominance Putting a few phases together Great work to keep the ball alive here Messam picks the ball up Nice inside the box Tries to fend but is taken Miolamu unable to beat the cover defense A good pass through his support play Oh, he's lost the ball Knock on He's playing advantage They just overplayed him on that occasion Trying to force opportunities that weren't there The bounce is good and he reels it in Fekatoa brings him to the ground nicely He's holding on for dear life here Aaron Smith keeps going Reid decides to run it and does well Ah, yes, brilliant work by the Orblets A good pass through his support play Nonu finally stopped So let's see what they can do from here See if they can get into a position to launch some kind of an attack Ball not loose Yeah went Stolen it Shut down with a brutal tackle Back to his feet quickly and wrestling for the ball Lovely tackle Good work in the rut by USA Coleman pulls it out of the back Johnson hits some speed up And finally taken to ground now He's having a go at the ball Yeah, that's good phase play there Well contained It's still on the side of USA And he goes straight through Well, they're building nicely Paul stopped in that tackle Do they have this still? Yes, they do It's taken down in a hard tackle That on their feet, I think they've turned it over Aaron Smith feeds it off now That's been well covered by Johnson And he goes inside Chase runs smack into the defense There's some real force in this defense Here's the pass Paul, decent meters, made on that charge Brett wants him to let go of it Coleman has it out the back USA chasing well That's a very flat pass Inside pass And he's trunched to the ground hard Good contest, but it still is Here's the ball And he unleashes a good strong punt Paul picks the ball up Banks lays it back Pass inside He pushes the pass further Ben Smith anticipates well And that's a knock-on by Fickertore And they'll play advantage He really should have been able to take the ball from the look of it, but he lost it He just couldn't control the ball So at halftime, we're all square here Halftime here, and great work to keep things unexpectedly close by USA It's a full house, and the general mood here is electric Bit of an untidy match so far, Justin We can have a look at the stats now Position favouring them overall, but not by a lot The kickoff and the second half is away Kickoff nicely taken in Your backs might still be going here Sends a good pass Short pass here Aaron Smith goes hard He will surely score There's the first try Well, that ball came down to pressure Plenty being pulled on, and in the end, simply outstanding My word, that is a good try Ah yes, he's being very impressive Absolutely Yeah, he's done very well there Breaks away, and then no one could catch him Simply too fast Yeah, I think you're right Justin About the five, they could get their seven Difficult kick this to add the extra two This will be close, but I think it's going to go wide Not what he was hoping for, and he can't add the extra two Yeah, it wasn't a great angle to work with, was it? Oh, the kickoff was made McCaw to secure this Players in the rut, doing their job, still alive Brodie Rotellik delivers the ball He's chapped a beautiful pass inside Why, it's Brock, it's driving hard now He's having a go at the ball Powerful defence So they get him all going He pushes it on He keeps the ball moving A good run is finally ended They have to release the ball now Smith gets it away A little with the tackle Stringing some phases together Brodie Rotellik Horses down now Rocky has formed, he has to release Conrad Smith delivers it to a runner Sam Wakelock loses some ground Well, they had to defend valiantly for a number of phases And he's got support now Tackled now after a good run Back to his feet quickly and wrestling for the ball He's running to a good tackle there Stringing some phases together That'll knock the wind out of him He's holding on for dear life here Just starting to get a bit of dominance, putting a few phases together The ball's being contested Aaron Smith pops it up McCaw has no answer to that tackle Stringing together some phases, but the defence holding pretty strong Now taken down hard, claims it Stems his way through nicely And he's stopped in that one He makes a dart from the back A good pass to his support play He bangs it through for a field goal Good very well in the lead up to those points Look at the drop goal here He's done well hasn't he? It's not easy doing that under pressure And the kickoff is made here Kickoff taken in Graub enjoyed that tackle Piranara finds a runner Up he goes to make the catch It's so easy to drop the ball in a situation like that But I gotta say, he never looked like dropping it Wilson rams it out of the back Good defence Hits the defence hard and straight It's a very good run Trying to turn it over quickly Davis gets the ball to his support play And they take him to the ground He's got to let it go now Banks watching himself at the defence Met by the defence There's some real force in this defence Miller gets the ball away Davis here Dangerous runner Not long to go now The last few plays of the match It's absolutely smashed Little gets a crowd on their feet with that run They've got themselves into a position To take some points Driven hard into the turf Somehow he managed to grab that net Over the 22 We're into the last few ticks of the clock now To lightly keep the touch And the game is over The Orblacks have done it The Orblacks just too good in the end A respectable game of rugby Just able to come through with the win And what was a very, very close match They dominated possession in this game You can see that there There was a lot of kicking in this game A definite battle for territory No shocks there then This one played out according to script So a very even Contest here really An excellent game of rugby So final score here in New Zealand With the win 8-0 Until next time it's bye from us