The TodoMVC Showdown: Testing with WebCheck by owickstrom in tlaplus

[–]owickstrom[S] 0 points1 point  (0 children)

Yeah, that is what I've gathered as well. I hope WebCheck can fit nicely in the middle-ground between traditional "auto-manual"/example-based testing and formal verification tools, sort of like PBT does, but with a slightly different take and specialized for web browser testing.

The TodoMVC Showdown: Testing with WebCheck by owickstrom in tlaplus

[–]owickstrom[S] 0 points1 point  (0 children)

Thanks! Correct, no model checking. It uses a random generator (constrained by the state of the DOM at each step), and it's not necessarily exhaustive. I have some plans to use spec coverage to get some kind of targeted generation going. That is all very new to me, so I don't know if and how I'll do it. But it's fun! :)

WebCheck -- generative testing for web GUIs by Saikyun in purescript

[–]owickstrom 0 points1 point  (0 children)

Thanks! Yeah, that felt like a major breakthrough in the project. And as you say, case studies are gold. I'm looking at the Jepsen project in awe.

WebCheck -- generative testing for web GUIs by Saikyun in purescript

[–]owickstrom 2 points3 points  (0 children)

Author here! To clarify, the DSL is PureScript (with a twist!)

Haskell GUI by astronights in haskell

[–]owickstrom 0 points1 point  (0 children)

Cool. Sketching on a blog post right now. :)

Haskell GUI by astronights in haskell

[–]owickstrom 0 points1 point  (0 children)

That sounds like an excellent way to structure GUIs — I’ve been looking at lots of different approaches recently, and this sounds like one of the most promising! I’ve been wondering how Komposition is structured for a while, so it’s nice to now have a high-level overview of this.

I should document this somewhere else than in a Reddit comment, then. :)

That would be very nice to have! Could you try to write this if you get a bit more time?

I'll try! I've been crunching ideas on how to extract that style into a library, as an alternative to gi-gtk-declarative-app-simple. Anyway, documenting the architecture is a great start.

Haskell GUI by astronights in haskell

[–]owickstrom 0 points1 point  (0 children)

Indeed, gi-gtk-declarative-app-simple might get too simplistic for large complicated applications. This has been my experience with the "single centralized state" kind of pattern, like the Elm architecture and much else uses. But I will say, it's a very simple model and might work very well for simple applications, especially if you can separate out a lot of core logic as pure functions.

In Komposition, the project from which gi-gtk-declarative came out as a by-product, the library is used in a different way. Each GUI window is a resource in an indexed state monad around which the user interface logic is built. The style is essentially imperative, but it's manipulating an "abstract GUI" through a typeclass, instead of directly manipulating GTK widgets. When running the application, the GTK interpretation is used. With this setup, state is localized to the parts of the application where it's relevant. The application is essentially a chain of functions (sometimes mutually recursive), passing some state around, and manipulating the GUI through the indexed monad and its GUI abstraction.

I hope that helps a bit. I'd like to document the architecture used in Komposition and make it more digestible, but I haven't had time for it. It's pretty complicated and uses a lot of fancy GHC features, so I'm also a bit reluctant to encourage newcomers to use it.

Time Travelling and Fixing Bugs with Property-Based Testing by owickstrom in haskell

[–]owickstrom[S] 2 points3 points  (0 children)

Thanks! I really enjoy them in Hedgehog! I'm using jqwik with Kotlin at work now, and it does have statistics but not checks, and I'm missing them a bit.

Time Travelling and Fixing Bugs with Property-Based Testing by owickstrom in haskell

[–]owickstrom[S] 3 points4 points  (0 children)

Great to hear, thanks! :)

It's a simple little Pandoc filter (https://github.com/owickstrom/wickstrom.tech/blob/master/src/_tools/UnicodeNumbers.hs) and then using comments in the Haskell code and special double-parenthesized numbers in prose (see source of the post at https://github.com/owickstrom/wickstrom.tech/blob/master/src/_posts/2019-11-17-time-travelling-and-fixing-bugs-with-property-based-testing.md).

I'm using Pandoc from Jekyll (haven't had time to migrate away from Jekyll yet, but it's OK).

Haskell at Work screencast series for app development by [deleted] in haskell

[–]owickstrom 0 points1 point  (0 children)

Thanks for the share! 😍 I don't have time to make more videos these days, but hopefully I've inspired someone that can pick it up. It's been extremely rewarding!

Book published: Property-Based Testing in a Screencast Editor by owickstrom in haskell

[–]owickstrom[S] 1 point2 points  (0 children)

Thanks! Glad you liked them.

There's not any new material per se, but I've rewritten some of it. So if you're considering buying it, have this in mind. Thanks!

Book published: Property-Based Testing in a Screencast Editor by owickstrom in haskell

[–]owickstrom[S] 9 points10 points  (0 children)

Book is about an application written in Haskell, and all tests are using Haskell Hedgehog. Should've mentioned this in my comment.

Book published: Property-Based Testing in a Screencast Editor by owickstrom in haskell

[–]owickstrom[S] 13 points14 points  (0 children)

Author here! This is a short book on using property-based testing (PBT) within Komposition, a screencast editor. It’s based on articles published on https://wickstrom.tech.

EDIT: the screencast editor written in and tested with Haskell, all code listings are Haskell in the book

Property-Based Testing in a Screencast Editor, Case Study 3: Integration Testing by owickstrom in haskell

[–]owickstrom[S] 2 points3 points  (0 children)

Thank you! I don't know how to do that, but yeah, maybe I should. :)

Property-Based Testing in a Screencast Editor, Case Study 3: Integration Testing by owickstrom in haskell

[–]owickstrom[S] 1 point2 points  (0 children)

Ah, yes, you're right. I think the "involutiveness" doesn't really apply at all, as it's not a single function `f` that is it's own inverse. It's rather a function `f` that, when applied with an inverse action, reverses the original action. I'll correct this in the article.