<div dir="ltr">Hi Luciano,<div> maybe SUnit is not the framework you need for what you are doing... just a thought. It looks like it is something too specific what you need and maybe you need a special model for that.</div><div><br></div><div>Cheers!</div><div>Hernan.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Aug 17, 2022 at 6:52 AM Luciano Notarfrancesco <<a href="mailto:luchiano@gmail.com">luchiano@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div><div dir="auto">Hi Hernan,</div><div dir="auto"><br></div><div dir="auto">Idea 1) is how I started some years ago, but eventually I moved on because it involves a lot of unnecessary work and it’s hard to maintain. Say you have 100 tests for matrices and you want to run them for 10 different rings, you’d have to write 1000 additional methods.</div><div dir="auto"><br></div><div dir="auto">Idea 2) is what I’d like to do instead of making concrete subclasses of the abstract tests. For that I’d have to write code that instantiates all test cases and sets all the parameters (like ‘scalars’ in the matrix example) and builds a TestSuite with all the tests. I guess I’ll try that. But I’d have to make a new TestRunner if I want to use the UI, and I’m sure I’ll find problems related to existing assumptions in the SUnit code (for example the problem that I tried to address in these emails, the assumption that a test ‘t’ can be copied by doing ‘t class selector: t selector’).</div><div dir="auto"><br></div><div dir="auto">I still think (IMHO) that TestCases should be able to run more than once, possibly changing the result, instead of creating new instances each time. Also the UI could be updated after running a test to reflect a change (for example to remove it from the failed or error lists when it passes, instead of finding the original test in the list with isSameAs: as it is done in TestResultWindow). I think lot of code could be improved and simplified. It would be easier if SUnit was a package, I could make an alternative package.</div><div dir="auto"><br></div><div dir="auto">Anyway, I’ll continue as I was doing, including those two methods in my tests package. And if someday we have SUnit in a package I’ll refactor it and simplify it.</div><div dir="auto"><br></div><div dir="auto">Cheers,</div><div dir="auto">Luciano</div><div dir="auto"><br></div></div></div><div><div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 17 Aug 2022 at 02:11 Hernan Wilkinson <<a href="mailto:hernan.wilkinson@10pines.com" target="_blank">hernan.wilkinson@10pines.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Hi Luciano,<div><br></div></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Aug 16, 2022 at 1:50 PM Luciano Notarfrancesco <<a href="mailto:luchiano@gmail.com" target="_blank">luchiano@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>On Tue, 16 Aug 2022 at 21:56 Hernan Wilkinson <<a href="mailto:hernan.wilkinson@10pines.com" target="_blank">hernan.wilkinson@10pines.com</a>> wrote:<br></div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">hmm just to clarify, cmd+t is not only for unit tests... it runs the test that you are browsing. And cmd+y runs all the tests on the category...</div></div></blockquote><div dir="auto"><br></div><div dir="auto">Yes, but doesn’t work for tests that require some extra context. For example, say we have a MatrixTest with an instance variable ‘scalars’ that tests matrices over a given coefficients ring, and a test method testDeterminantProduct that creates two random matrices A and B and asserts that (A*B) determinant = (A determinant * B determinant). I cannot just run the test with cmd-t or cmd-y without specifying a ring of coefficients. I came up with two possible ways to implement concrete tests:</div><div dir="auto">1) I make MatrixTest abstract (see TestCase class>>isAbstract) and make many concrete subclasses that implement #initialize and set ‘scalars’ to particular rings (for example a MatrixOverIntegersTest that sets scalars to Z). I’m currently doing this. The drawback of this approach is that I end up with lots of subclasses that only implement #initialize to set the scalars.</div><div dir="auto">2) I don’t make subclasses of MatrixTest, and instead build test suits by instantiating MatrixTest for each coefficients ring I want to test and each test selector.</div></div></div></blockquote><div><br></div><div>Ok. If I understand correctly, the test is always the same code, is that right? If so, I have two ideas, let me know if the make sense:</div><div>1) to have in the same test suite (that is the subclass of TestCase), one test method per configuration or ring of coefficients. For example:</div><div>test_xx_with_RingA</div><div>test_xx_with_RingB</div><div>and so on. Each of this test_xx_with_... send the same message that is the real test that you parameterize with the ring. </div><div>Doing so you can run each test with is ring or all the tests that will all the rings</div><div>2) You can have one test with a collections of rings to run them all</div><div><br></div><div>I think that having subclasses for each ring is an unnecessary complexity, but I may not understand the problem correctly.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail_quote"><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto">Another way to achieve what I need is to copy the test case instead of creating a new one. Just need to implement<br></div><div dir="auto"><br></div><div dir="auto">TestCase>>copy</div><div dir="auto">    ^ self class selector: testSelector</div><div dir="auto"><br></div><div dir="auto">And in my subclasses I can make sure to copy all the additional state.</div></blockquote><div><br></div><div>That makes sense... and the #debug would do a copy, is that the idea?</div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">Yes. I’d prefer if the system didn’t assume it can recreate a test case from the class and test selector alone. <span style="color:rgb(0,0,0)">But for now I can continue without any changes to Cuis, it’s the simplest thing to do, I’ll continue including those two methods for TestCase in my package.</span></div></div></div></blockquote><div><br></div><div>Ok, let's keep things as they are. I think that what you need is too specific and you have solved it satisfactorily.</div><div>  </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div></div></div></div></blockquote><div dir="auto"><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="auto"> Also I’d have to implement #isSameAs: in my subclasses</div></blockquote><div><br></div><div>Why?</div></div></div></blockquote><div dir="auto"><br></div><div dir="auto">Because two instances of MatrixTest for #testDeterminantProduct but with different scalars are different, for example one might test the determinant of matrices over the integers while other tests the determinant over the rationals (same testSelector, different scalars).</div></div></div></blockquote><div><br></div><div>ok, makes sense.</div><div>With option 1) I suggested above this would not be necessary</div><div><br></div><div>Cheers!</div></div></div><div dir="ltr"><div class="gmail_quote"><div>Hernan.  </div></div><br clear="all"><div><br></div>-- <br><div dir="ltr"><div dir="ltr"><span style="font-size:xx-small;border-collapse:collapse"><div style="font-size:small"><a href="https://10pines.com/" style="font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium" target="_blank"><img width="108" style="margin-bottom: 0.5em; font-family: Roboto, Helvetica, Arial, sans-serif;"></a><span style="font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium;color:rgb(0,0,0)"></span><h1 style="margin:0px;font-size:14px">Hernán Wilkinson</h1><h2 style="margin:0px 0px 1em;font-size:14px;color:rgb(100,100,100)">Software Developer & Coach</h2><p style="margin:0px;font-size:12px;color:rgb(100,100,100)">Alem 896, Floor 6, Buenos Aires, Argentina</p><p style="margin:0px;font-size:12px;color:rgb(100,100,100)">+54 11 6091 3125</p><p style="margin:0px;font-size:12px;color:rgb(100,100,100)">@HernanWilkinson</p></div></span></div></div></div>
</blockquote></div></div>
</div>
</div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><span style="font-size:xx-small;border-collapse:collapse"><div style="font-size:small"><a href="https://10pines.com/" style="font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium" target="_blank"><img width="108" src="https://10pines.github.io/email-signature/10pines-firma@2x.png" style="margin-bottom: 0.5em;"></a><span style="color:rgb(0,0,0);font-family:Roboto,Helvetica,Arial,sans-serif;font-size:medium"></span><h1 style="margin:0px;font-size:14px">Hernán Wilkinson</h1><h2 style="margin:0px 0px 1em;font-size:14px;color:rgb(100,100,100)">Software Developer & Coach</h2><p style="margin:0px;color:rgb(100,100,100);font-size:12px">Alem 896, Floor 6, Buenos Aires, Argentina</p><p style="margin:0px;color:rgb(100,100,100);font-size:12px">+54 11 6091 3125</p><p style="margin:0px;color:rgb(100,100,100);font-size:12px">@HernanWilkinson</p></div></span></div></div>