I've been poking around with some redirects that I needed to perform with RewriteRules in Apache configuration. This story deserves its own post, and I hope to post it soon. So, long story short, I had to deal with some complex regular expressions (regexes). The regex started simple, but soon grew bigger when covering other scenarios and trying to keep it in only one expression.
Basic HTML for the tests:
First 18 tests and results
At first it was okay, and I managed to perform pretty much all of my tests using it. I know that I could (maybe should) have used a test library for it, like Jasmine, buy hey, it's cool to reinvent the wheel once in a while, just to get the feeling that you can.
This kind of tests don't garantee that everything will work once rewriten to Apache rewrite rules, as they were only a simulation. So I still had to test it again on Apache once it was ready. Just to make sure... after all, regular expressions are pretty much the same everywhere, correct?
Then, I continued to perform all my tests, trying out different odd combinations of possibilities. So, I was in the exercise of breaking my code, fixing the regex, breaking the code again, fixing the regex once more, and so on and so forth... Suddenly, I needed to use a lookbehind constructor in my regular expression to cover my tests. This is the point when things start to get weird.
I had my regex set up an ready to roll, I had the great Regular-Expressions.info opened, things looked right, expressions should work, but they simply didn't. I was trying to figure out why a simple expression as /(?<=a)b/ig.test("ab") didn't match. Didn't even have a correct syntax!
Time for a different approach. I would have to discard all my code, but that happens. The approach should be something that we really can put some confidence on. I couldn't find anything really helpfull at first, so I got a bit demotivated..
I forgot it for a while and started browsing random stuff, when I decided to check out the Yeoman project. Reading a bit, I've found about PhantomJS, and then, CasperJS. And here is where the story start getting interesting.
And that's the next subject. Automated unit testing using CasperJS. Hopefully, with less story, and more coding.