So based on the fact that everyone else is doing it, I tried using run configs again, with a project that I have which is "conditionally compiled" (using annotations) for CIQ1 vs. CIQ2. Sure, it's only been a few months since I last tried it and hated it, but maybe things would be different this time.
Creating the first run config (935) was no problem. When I wanted to test 235 (with less features), I created another run config.
Then I wanted to test Fenix 3 because it takes slightly more code space than 235 (for reasons I don't want to go into). Yet another run config.
Of course, Approach S60 has less free memory at run-time -- for whatever reason, the VM seems to use more memory compared to other devices in the same class. So if I want to test that, I have to either change an existing run config or create a new one.
Maybe everyone else enjoys editing run configs, but I don't. I feel like there's a lot of unnecessary clicking.
I guess I'm unique in that I like to squeeze every last byte out of every single Garmin platform, so I worry about crashes a lot.
But even if I didn't do that, for some apps I would have test a significant subset of the following visual / input / CIQ / feature configurations:
- VA3/VA3M
- Fenix 5X / etc.
- 645M
- Fenix 5 / 5S / 935
- 645
- Approach S60 (consumes more memory and crashed in situations that no other platform crashed in)
- Fenix 3 HR
- 235
- 735
- 630
- VA
- 920XT
- VAHR
Each of those devices has something that's different, whether it's touchscreen, available memory, fonts, screen size, screen shape, multisport support or CIQ support. VA3 has a completely different input scheme than any other device, too. It's the only one that uses Right Swipe for "Back" and the only one that won't accept START/ENTER/KEY in a widget. So if my app/widget has special handling for VA3, I wonder how I can test that without running it on a simulated VA3?
So maybe I'm just "doing it wrong", but I would like to know how I should be running my app, in a way that it's easy to switch between devices and test everything I want.
Or maybe I shouldn't care what the app looks like or whether it'll crash. Maybe if I have 6 different device feature sets (CIQ 1 / 2 / 3 X Multisport), I shouldn't test all 6 tiers.
How do I do system / integration testing, especially when I don't own all those devices? Just not test every possibility?
I've seen the official Garmin stopwatch app, which does the "tiny milliseconds/hours" thing which I really liked and copied. Except the tiny milliseconds are not vertically aligned with the huge seconds on FR230, so it looks kinda funny. I'm pretty sure this is because the FR230 getFontHeight() function returns a much larger value than the big fonts actually take up on the screen. So the tiny milliseconds are aligned with the way fonts are reported to be, not the way they actually are.
This is the kind of thing you can never discover without testing. Yes, I'm sure it was coded the "right way" which is to respect what getFontHeight returns. But it looks funny.
Same goes for VA3 -- getFontHeight returns too-large values for big fonts, making the app think they are taller than they really are.
Sure no big deal -- except I actually had user complaints (on a different "full-screen run" app) that the fonts were too small for 230 (because of code that uses getFontHeight() to determine whether text will fit, and shrinks it appropriately.)
So on my full-screen run app and my stopwatch, I put various hacks in to hardcode the font height for VA3, 230 and other platforms. Is that nice coding practice? No. But it allowed me to display bigger numbers like my (tiny) userbase wants. And it allowed me to align tiny milliseconds with large seconds on my stopwatch app, so I could make it look as nice as possible
So I'd like to hear anyone's advice on how this kind of thing can actually be tested without having 10 different run configs or constantly editing a 2nd or 3rd config.
It would be amazing if we could have the option for 2 or 3 frequently used fixed run configs and a spare "dynamic" run config which would just prompt us for a device. Basically the best of both worlds.
But I guess I am alone on this.
I won't bring it up again, but thanks for reading anyway.