The $select widget operates on the "currentTiddler" unless you specify the target tiddler (i.e., using tiddler="..." as a param).
Thus, your initial test works, because the $select widget and the <<testmacro>> invocation are both in the same tiddler, "Test-tiddler", which you are viewing directly.
However...
When a tiddler is shown via the tabs macro, the <<currentTiddler>> is the tiddler *in which the tabs macro occurs* (i.e., "test-tab").
Thus, your second test fails, because the $select widget is saving it's value into "test-tab", rather than "Test-tiddler".
To use $select correctly, you can explictly specify the target tiddler using <$select ... tiddler="Test-tiddler">.
Of course, this is probably not very useful, as the target is hard-coded, and I suspect you're end-goal is to be able to save the selected value in the currentTiddler, regardless of what tiddler that is.
Fortunately, there is a much more flexible way to solve the problem:
The <<tabs>> macro sets another "core" variable: <<currentTab>>, which is available *within each tab* that is shown.
To make your content use that target instead of the <<currentTiddler>> you can wrap it within a $tiddler widget, like this:
<$tiddler tiddler=<<currentTab>>>
When the above is viewed *directly*, the value of <<currentTab>> is undefined, and the $select operates on <<currentTiddler>>, just as your initial test does.
When viewed via a <<tabs>> macro, the value of <<currentTab>> *is* defined and the <<currentTiddler>> is then set by the $tiddler widget to match, so that the $select will still operate on the desired tiddler.
I hope this explanation isn't too confusing...
enjoy,
-e
Eric Shulman
InsideTiddlyWiki: The Missing Manuals