Non-terminating programs are programs that legally perform unbounded computations. Though they are ubiquitous in real-world applications, testing these programs requires new theoretic developments as usual definitions of test data adequacy criteria ignore infinite paths. This paper develops a theory of program-based structural testing based on operational semantics. Reasoning at the program semantics level permits to cope with infinite paths (and non-feasible paths) when defining test data adequacy criteria. As a result, our criteria respect the first Weyuker’s property on finite applicability, even for non-terminating programs. We discuss the consequences of this re-interpretation of test data adequacy criteria w.r.t. existing test coverage criteria.