Running multiple test files on windows

when I run on windows

crystal run test\*_test.cr 

or

crystal run test/*_test.cr

I get the following error:

c:\windows_home\src\crystal_repos\http2>crystal run test/*_test.cr
Error: Error opening file with mode 'r': 'c:\\windows_home\\src\\crystal_repos\\http2\\test\\*_test.cr': Invalid argument

I want to do watchexec -e cr crystal run test*_test.cr test***_test.cr but how do I accomplish this in windows?

If you follow the conventions, you can prob just do something like watchexec -w src -w spec -- crystal spec, which would rerun the specs when either a spec or source file changes. Versus trying to get a custom directory/command working.

EDIT: Ah, looks like this is a shard that does not follow conventions as it uses a separate test runner lib. In its Makefile it’s doing run test/*_test.cr test/**/*_test.cr, so either that just doesn’t work anymore, or its a windows specific problem.

EDIT2: Yea it works fine for me on linux, iirc globs are a bash/shell feature, not sure what the windows equivalent is. Depending on what terminal you’re using, maybe try git’s bash terminal or something other than command prompt?

Yep, I am trying to get the grpc shard working by using the http2 shard instead of grpc’s own http2 implementation. Testing the http2 shard on windows to make sure it works on windows - which uses minitest. Normally globbing works pretty much the same on windows but I can’t get this to work.

I added HTTP2 support directly to the grpc shard because the http2 shard can’t actually be used as a shard in its current state. Adding require "http2/client" or require "http2/server" to your app will load the ones at the top-level of that repo.

Also, I saw the issue you posted. I just got back from Canada for a work trip, but I’ll have a look when I can.

Honestly, I’d prefer that the grpc shard not have to implement HTTP2. Implementing it myself taught me a lot, but I’m not super comfortable with my implementation. For example, I never implemented CONTINUATION frames, so an entire request or response has to fit into a single HTTP2 DATA frame. For simple GRPC this is fine, but it precludes streaming GRPC.