I was taught, that ANOVA assesses the main effects and interaction effects of a linear model. In other words, it jointly tests appropriate model (with categorical IVs) parameters, telling us, if all the levels of the categorical IV jointly reduce the unexplained variance. Then I saw in R, that anova() function can be run with a pair of practically any models. It can assess, if a comparison of two nested models yields reduction in variance. This way we can assess the main and interaction effects of a wide class of models: general linear, generalized linear, quantile regression, models fit with the generalized least square, generalized estimating equations and many more. In this case it is called a "deviance table". And the results are practically identical with type 3 ANOVA when I run it with general linear model.
Is my observation valid? Does it mean, that ANOVA in general has no parametric and other assumptions? I am asking, because when I obtain the deviance table on quantile or robust regression, I don't need the normal residuals. When I obtain it for a mixed model, I don't need homoscedasticity and independent responses.
Is the ANOVA taught at 101 class just a special case of some more generalized ANOVA procedure? This would answer, why in R the anova() or car::Anova functions allow to use different test statistics as well. And this would justify, why the ANOVA on each underlying model needs different assumptions - specific to this particular case. So, the classic ANOVA using the general linear model needs all those we learn at 101 class and, say, ANOVA on logistic regression needs other assumptions. In other words, ANOVA itself, as a procedure, is assumption free, and that's the model which decides about them. Right?
Or, if "the ANOVA" is not what the anova() does, then why do their results agree? Every time I saw a "deviance table" it looked like a multi-way ANOVA and was exactly about the main and interaction effects.