aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/qml
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2018-03-26 22:59:28 +0200
committerLars Knoll <lars.knoll@qt.io>2018-05-02 14:17:46 +0000
commit20d30b6b3a253eebedc927dbb91685bbec52cfee (patch)
tree0e91a6c519829bd279258f3fe807519e6c8a1e3d /tests/auto/qml
parentd499a995292629d3522f5e77b7c958bacdf5d0ae (diff)
Add support for proper lexical scoping
This is still to some extend work in progress as lexically scoped for loops won't yet do the right thing. let and const variables are still accessible before they are declared, and the global scope doesn't yet have a proper context for lexically declared variables. Change-Id: Ie39f74a8fccdaead437fbf07f9fc228a444c26ed Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'tests/auto/qml')
-rw-r--r--tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp16
-rw-r--r--tests/auto/qml/ecmascripttests/TestExpectations35
-rw-r--r--tests/auto/qml/qjsengine/tst_qjsengine.cpp7
3 files changed, 20 insertions, 38 deletions
diff --git a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
index 17a99d6a43..ccb3a2dcdc 100644
--- a/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
+++ b/tests/auto/qml/debugger/qv4debugger/tst_qv4debugger.cpp
@@ -220,7 +220,21 @@ public:
{
for (int i = 0, ei = m_stackTrace.size(); i != ei; ++i) {
m_capturedScope.append(NamedRefs());
- ScopeJob job(&collector, i, 0);
+ FrameJob frameJob(&collector, i);
+ debugger->runInEngine(&frameJob);
+ QJsonObject frameObj = frameJob.returnValue();
+ QJsonArray scopes = frameObj.value(QLatin1String("scopes")).toArray();
+ int nscopes = scopes.size();
+ int s = 0;
+ for (s = 0; s < nscopes; ++s) {
+ QJsonObject o = scopes.at(s).toObject();
+ if (o.value(QLatin1String("type")).toInt(-2) == 1) // CallContext
+ break;
+ }
+ if (s == nscopes)
+ return;
+
+ ScopeJob job(&collector, i, s);
debugger->runInEngine(&job);
NamedRefs &refs = m_capturedScope.last();
QJsonObject object = job.returnValue();
diff --git a/tests/auto/qml/ecmascripttests/TestExpectations b/tests/auto/qml/ecmascripttests/TestExpectations
index 55007189b8..9576dca707 100644
--- a/tests/auto/qml/ecmascripttests/TestExpectations
+++ b/tests/auto/qml/ecmascripttests/TestExpectations
@@ -3938,25 +3938,8 @@ language/arguments-object/mapped/nonconfigurable-nonwritable-descriptors-set-by-
language/arguments-object/mapped/nonwritable-nonconfigurable-descriptors-set-by-arguments
language/arguments-object/mapped/Symbol.iterator
language/arguments-object/unmapped/Symbol.iterator
-language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-1
-language/block-scope/leave/finally-block-let-declaration-only-shadows-outer-parameter-value-2
-language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-1
-language/block-scope/leave/for-loop-block-let-declaration-only-shadows-outer-parameter-value-2
-language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-1
-language/block-scope/leave/nested-block-let-declaration-only-shadows-outer-parameter-value-2
-language/block-scope/leave/outermost-binding-updated-in-catch-block-nested-block-let-declaration-unseen-outside-of-block
-language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-1
-language/block-scope/leave/try-block-let-declaration-only-shadows-outer-parameter-value-2
-language/block-scope/leave/verify-context-in-finally-block
-language/block-scope/leave/verify-context-in-for-loop-block
-language/block-scope/leave/verify-context-in-labelled-block
-language/block-scope/leave/verify-context-in-try-block
-language/block-scope/leave/x-after-break-to-label
-language/block-scope/leave/x-before-continue
-language/block-scope/shadowing/const-declaration-shadowing-catch-parameter
-language/block-scope/shadowing/const-declarations-shadowing-parameter-name-let-const-and-var-variables
-language/block-scope/shadowing/let-declaration-shadowing-catch-parameter
-language/block-scope/shadowing/let-declarations-shadowing-parameter-name-let-const-and-var
+language/block-scope/syntax/for-in/acquire-properties-from-array
+language/block-scope/syntax/for-in/acquire-properties-from-object
language/block-scope/syntax/for-in/mixed-values-in-iteration
language/computed-property-names/basics/string
language/computed-property-names/basics/symbol
@@ -4004,7 +3987,6 @@ language/destructuring/binding/syntax/recursive-array-and-object-patterns
language/eval-code/direct/lex-env-distinct-cls
language/eval-code/direct/lex-env-distinct-const
language/eval-code/direct/lex-env-distinct-let
-language/eval-code/direct/lex-env-heritage
language/eval-code/direct/lex-env-no-init-cls
language/eval-code/direct/lex-env-no-init-const
language/eval-code/direct/lex-env-no-init-let
@@ -4026,7 +4008,6 @@ language/eval-code/indirect/always-non-strict
language/eval-code/indirect/lex-env-distinct-cls
language/eval-code/indirect/lex-env-distinct-const
language/eval-code/indirect/lex-env-distinct-let
-language/eval-code/indirect/lex-env-heritage
language/eval-code/indirect/lex-env-no-init-cls
language/eval-code/indirect/lex-env-no-init-const
language/eval-code/indirect/lex-env-no-init-let
@@ -6186,14 +6167,12 @@ language/expressions/yield/star-rhs-unresolvable
language/expressions/yield/star-string
language/expressions/yield/then-return
language/expressions/yield/within-for
-language/function-code/block-decl-strict
language/function-code/each-param-has-own-non-shared-eval-scope
language/function-code/each-param-has-own-scope
language/function-code/eval-param-env-with-computed-key
language/function-code/eval-param-env-with-prop-initializer
language/function-code/switch-case-decl-strict
language/function-code/switch-dflt-decl-strict
-language/global-code/block-decl-strict
language/global-code/decl-lex
language/global-code/decl-lex-configurable-global
language/global-code/decl-lex-deletion
@@ -6442,8 +6421,6 @@ language/statements/async-function/try-return-finally-throw
language/statements/async-function/try-throw-finally-reject
language/statements/async-function/try-throw-finally-return
language/statements/async-function/try-throw-finally-throw
-language/statements/block/scope-lex-close
-language/statements/block/scope-lex-open
language/statements/block/tco-stmt
language/statements/block/tco-stmt-list
language/statements/class/accessor-name-inst-computed
@@ -7445,12 +7422,10 @@ language/statements/const/function-local-closure-get-before-initialization
language/statements/const/function-local-use-before-initialization-in-declaration-statement
language/statements/const/function-local-use-before-initialization-in-prior-statement
language/statements/const/global-closure-get-before-initialization
-language/statements/const/syntax/const
language/statements/const/syntax/const-invalid-assignment-next-expression-for
language/statements/const/syntax/const-invalid-assignment-statement-body-for-in
language/statements/const/syntax/const-invalid-assignment-statement-body-for-of
language/statements/const/syntax/const-outer-inner-let-bindings
-language/statements/continue/shadowing-loop-variable-in-same-scope-as-continue
language/statements/do-while/tco-body
language/statements/empty/cptn-value
language/statements/for/dstr-const-ary-init-iter-close
@@ -8697,7 +8672,6 @@ language/statements/try/dstr-obj-ptrn-list-err
language/statements/try/dstr-obj-ptrn-prop-eval-err
language/statements/try/dstr-obj-ptrn-prop-id-get-value-err
language/statements/try/dstr-obj-ptrn-prop-id-init-throws
-language/statements/try/scope-catch-block-lex-close
language/statements/try/scope-catch-block-lex-open
language/statements/try/scope-catch-param-lex-open
language/statements/try/scope-catch-param-var-none
@@ -8776,14 +8750,11 @@ built-ins/NativeErrors/SyntaxError/is-error-object
built-ins/NativeErrors/TypeError/is-error-object
built-ins/NativeErrors/URIError/is-error-object
-built-ins/Object/prototype/toLocaleString/primitive_this_value
language/expressions/object/yield-non-strict-access
language/expressions/object/yield-non-strict-syntax
language/expressions/object/not-defined
language/expressions/object/prop-def-id-get-error
language/expressions/object/prop-def-id-valid
-language/function-code/10.4.3-1-104
-language/function-code/10.4.3-1-106
# Expected to fail but passed ---
language/eval-code/direct/var-env-global-lex-non-strict
@@ -8791,4 +8762,4 @@ language/global-code/decl-lex-restricted-global
language/statements/const/global-use-before-initialization-in-declaration-statement
language/statements/const/global-use-before-initialization-in-prior-statement
language/statements/let/global-use-before-initialization-in-declaration-statement
-language/statements/let/global-use-before-initialization-in-prior-statement \ No newline at end of file
+language/statements/let/global-use-before-initialization-in-prior-statement
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index a57e0b2c79..4945a23302 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -3209,9 +3209,7 @@ void tst_QJSEngine::threadedEngine()
void tst_QJSEngine::functionDeclarationsInConditionals()
{
- // Even though this is bad practice (and test262 covers it with best practices test cases),
- // we do allow for function declarations in if and while statements, as unfortunately that's
- // real world JavaScript. (QTBUG-33064 for example)
+ // Visibility of function declarations inside blocks is limited to the block
QJSEngine eng;
QJSValue result = eng.evaluate("if (true) {\n"
" function blah() { return false; }\n"
@@ -3219,8 +3217,7 @@ void tst_QJSEngine::functionDeclarationsInConditionals()
" function blah() { return true; }\n"
"}\n"
"blah();");
- QVERIFY(result.isBool());
- QCOMPARE(result.toBool(), true);
+ QVERIFY(result.isError());
}
void tst_QJSEngine::arrayPop_QTBUG_35979()