From 6a35bdb42b91381590c98a18d2d19e0a5f06a4fb Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 4 Jan 2015 19:40:09 +1100 Subject: [PATCH 01/39] add traceur test suite --- test/_helper.js | 32 ++- test/_transformation-helper.js | 123 +++++++++ .../ArgumentsInComprehension.js | 12 + .../traceur/ArrayComprehension/Closure.js | 11 + .../ArrayComprehension/Error_Disabled.js | 4 + .../ArrayComprehension/Error_NotDefined.js | 5 + .../traceur/ArrayComprehension/Simple.js | 32 +++ .../ArrayComprehension/ThisInComprehension.js | 14 ++ test/fixtures/traceur/ArrayExtras/Fill.js | 47 ++++ test/fixtures/traceur/ArrayExtras/Find.js | 88 +++++++ .../fixtures/traceur/ArrayExtras/FindIndex.js | 47 ++++ test/fixtures/traceur/ArrayExtras/From.js | 155 ++++++++++++ test/fixtures/traceur/ArrayExtras/Of.js | 37 +++ test/fixtures/traceur/ArrayIterator.js | 27 ++ .../traceur/ArrowFunctions/AlphaRename.js | 22 ++ .../traceur/ArrowFunctions/Arguments.js | 6 + .../traceur/ArrowFunctions/ArrowFunctions.js | 52 ++++ .../ArrowFunctions/CoverInitializer.js | 5 + .../ArrowFunctions/Error_CoverInitializer.js | 5 + .../ArrowFunctions/Error_CoverInitializer2.js | 3 + .../ArrowFunctions/Error_CoverInitializer3.js | 3 + .../traceur/ArrowFunctions/Error_Disabled.js | 4 + .../Error_FreeVariableChecker.js | 3 + .../Error_InvalidFormalParameters.js | 3 + .../ArrowFunctions/Error_Precedence.js | 3 + .../ArrowFunctions/Error_Precedence2.js | 4 + .../ArrowFunctions/Error_Precedence3.js | 4 + .../ArrowFunctions/Error_SpreadNotLast.js | 6 + .../Error_SpreadOutsideFormals.js | 3 + .../ArrowFunctions/FreeVariableChecker.js | 2 + .../traceur/ArrowFunctions/Skip_Frozen.js | 39 +++ .../Skip_InitializerShorthand.js | 19 ++ .../traceur/ArrowFunctions/Skip_SoftBind.js | 14 ++ .../traceur/ArrowFunctions/ThisBindings.js | 18 ++ .../traceur/AsyncFunctions/AlphaRenaming.js | 21 ++ .../traceur/AsyncFunctions/AsyncArrow.js | 9 + .../AsyncFunctions/AsyncArrowArguments.js | 16 ++ .../traceur/AsyncFunctions/AsyncArrowThis.js | 15 ++ .../traceur/AsyncFunctions/AsyncMethod.js | 31 +++ .../AsyncMethodObjectLiteral.js | 21 ++ .../traceur/AsyncFunctions/AsyncSyntax.js | 18 ++ .../fixtures/traceur/AsyncFunctions/Basics.js | 46 ++++ .../traceur/AsyncFunctions/Complete.js | 16 ++ test/fixtures/traceur/AsyncFunctions/Empty.js | 10 + .../AsyncFunctions/Error_AsyncArrow.js | 7 + .../AsyncFunctions/Error_AsyncArrow2.js | 6 + .../traceur/AsyncFunctions/Error_Disabled.js | 15 ++ .../traceur/AsyncFunctions/Export.module.js | 18 ++ .../traceur/AsyncFunctions/Finally.js | 25 ++ .../traceur/AsyncFunctions/Finally2.js | 21 ++ .../traceur/AsyncFunctions/PromiseCast.js | 12 + .../traceur/AsyncFunctions/Prototype.js | 7 + .../traceur/AsyncFunctions/Rethrow.js | 13 + .../fixtures/traceur/AsyncFunctions/Return.js | 16 ++ test/fixtures/traceur/AsyncFunctions/Throw.js | 30 +++ .../traceur/AsyncFunctions/Timeout.js | 21 ++ test/fixtures/traceur/AsyncFunctions/Value.js | 24 ++ test/fixtures/traceur/AsyncFunctions/Yield.js | 17 ++ .../resources/async-function.js | 7 + .../traceur/Classes/ClassMethodInheritance.js | 23 ++ .../traceur/Classes/ClassNameBinding.js | 41 +++ .../traceur/Classes/ClassNameInStack.js | 29 +++ test/fixtures/traceur/Classes/Constructor.js | 34 +++ .../traceur/Classes/ConstructorChaining.js | 22 ++ .../traceur/Classes/ConstructorMember.js | 25 ++ .../traceur/Classes/DefaultConstructor.js | 31 +++ .../traceur/Classes/DeriveFromObject.js | 6 + test/fixtures/traceur/Classes/EmptyClass.js | 29 +++ .../traceur/Classes/Error_Disabled.js | 4 + test/fixtures/traceur/Classes/Error_GH1556.js | 5 + test/fixtures/traceur/Classes/Error_Super.js | 10 + .../Classes/Error_SuperAsTemplateTag.js | 10 + .../Classes/ExtendNonConstructableFunction.js | 11 + test/fixtures/traceur/Classes/ExtendObject.js | 4 + .../fixtures/traceur/Classes/ExtendStrange.js | 54 ++++ .../traceur/Classes/FieldInheritance.js | 26 ++ .../traceur/Classes/FieldInitializers.js | 23 ++ test/fixtures/traceur/Classes/FieldLookup.js | 47 ++++ test/fixtures/traceur/Classes/Fields.js | 19 ++ test/fixtures/traceur/Classes/Getters.js | 20 ++ test/fixtures/traceur/Classes/Inheritance.js | 9 + .../InheritanceFromMemberExpression.js | 31 +++ .../Classes/InheritanceFromNonclass.js | 17 ++ .../traceur/Classes/InheritanceNameBinding.js | 11 + test/fixtures/traceur/Classes/Method.js | 21 ++ .../traceur/Classes/MethodInheritance.js | 32 +++ test/fixtures/traceur/Classes/MethodLookup.js | 34 +++ test/fixtures/traceur/Classes/NameBinding.js | 36 +++ .../traceur/Classes/NestedClassSuper.js | 104 ++++++++ .../traceur/Classes/NestedClassSuperAnimal.js | 45 ++++ .../traceur/Classes/NestedFunctionSuper.js | 76 ++++++ .../traceur/Classes/NewClassExpression.js | 18 ++ .../traceur/Classes/OptionalParams.js | 18 ++ .../traceur/Classes/PropertyAccessors.js | 59 +++++ .../traceur/Classes/PrototypeDescriptor.js | 7 + test/fixtures/traceur/Classes/RestParams.js | 15 ++ test/fixtures/traceur/Classes/SemiColon.js | 3 + test/fixtures/traceur/Classes/SimpleSuper.js | 31 +++ .../traceur/Classes/Skip_DerivedButton.js | 39 +++ .../Classes/Skip_HTMLBlockquoteElement.js | 16 ++ test/fixtures/traceur/Classes/Static.js | 70 ++++++ test/fixtures/traceur/Classes/StaticSuper.js | 35 +++ .../traceur/Classes/StaticSuperNoExtends.js | 47 ++++ test/fixtures/traceur/Classes/StaticSymbol.js | 8 + .../fixtures/traceur/Classes/SuperChaining.js | 28 +++ .../traceur/Classes/SuperChangeProto.js | 20 ++ test/fixtures/traceur/Classes/SuperMissing.js | 40 +++ test/fixtures/traceur/Classes/SuperPostfix.js | 23 ++ test/fixtures/traceur/Classes/SuperSet.js | 56 +++++ test/fixtures/traceur/Classes/SuperUnary.js | 26 ++ .../traceur/Classes/SuperWithoutExtends.js | 15 ++ test/fixtures/traceur/Classes/Types.js | 26 ++ test/fixtures/traceur/Collections/Map.js | 234 ++++++++++++++++++ test/fixtures/traceur/Collections/Set.js | 142 +++++++++++ .../traceur/Collections/SetWithSymbols.js | 4 + .../traceur/ComputedPropertyNames/Class.js | 48 ++++ .../ComputedPropertyNames.js | 35 +++ .../ComputedPropertyNames/Error_Disabled.js | 6 + .../traceur/ComputedPropertyNames/Symbol.js | 9 + .../DefaultParameters/Error_SetAccessor.js | 6 + .../traceur/DefaultParameters/Simple.js | 45 ++++ .../traceur/Destructuring/Arguments.js | 8 + test/fixtures/traceur/Destructuring/Array.js | 25 ++ .../ArrayPatternWithCoverInitializedName.js | 5 + .../ArrayPatternWithInitializer.js | 5 + .../traceur/Destructuring/ArrowFunction.js | 17 ++ test/fixtures/traceur/Destructuring/Catch.js | 30 +++ test/fixtures/traceur/Destructuring/Class.js | 28 +++ .../Destructuring/CoverInitializedName.js | 4 + .../traceur/Destructuring/CoverInitializer.js | 9 + .../Destructuring/CoverInitializerInForOf.js | 9 + .../traceur/Destructuring/DefaultParams.js | 5 + test/fixtures/traceur/Destructuring/Empty.js | 32 +++ .../traceur/Destructuring/Error_Disabled.js | 4 + .../Error_ForInWithInitializer.js | 4 + .../Error_ForOfWithInitializer.js | 4 + .../Destructuring/Error_InvalidArrowRest.js | 3 + .../Error_InvalidCoverInitializedName.js | 3 + .../Destructuring/EvaluatesToRvalue.js | 9 + .../traceur/Destructuring/EvaluationOrder.js | 10 + .../traceur/Destructuring/ForInLoop.js | 28 +++ .../traceur/Destructuring/ForOfLoop.js | 28 +++ .../Destructuring/FunctionArrayPattern.js | 14 ++ .../Destructuring/FunctionObjectPattern.js | 5 + .../traceur/Destructuring/Initializer.js | 74 ++++++ .../Destructuring/InitializerObject.js | 12 + test/fixtures/traceur/Destructuring/Method.js | 14 ++ ...ultipleCoverInitializersInArrowFunction.js | 4 + .../Destructuring/NestedScopeArguments.js | 11 + test/fixtures/traceur/Destructuring/Object.js | 42 ++++ test/fixtures/traceur/Destructuring/Rest.js | 19 ++ .../traceur/Destructuring/RestIterator.js | 45 ++++ .../traceur/Destructuring/ScopeThis.js | 19 ++ .../traceur/Destructuring/SetAccessor.js | 14 ++ .../traceur/Destructuring/Simplify.js | 168 +++++++++++++ .../Destructuring/StrangeProperties.js | 17 ++ .../traceur/Destructuring/TopLevel.js | 9 + .../traceur/Destructuring/ValueTypes.js | 58 +++++ .../fixtures/traceur/Destructuring/VarDecl.js | 27 ++ .../fixtures/traceur/Exponentiation/Basics.js | 25 ++ .../GeneratorComprehension/Error_Disabled.js | 4 + .../Error_NotDefined.js | 5 + .../traceur/GeneratorComprehension/Simple.js | 40 +++ .../GeneratorComprehension/Skip_Closure.js | 23 ++ test/fixtures/traceur/Math/acosh.module.js | 8 + test/fixtures/traceur/Math/asinh.module.js | 8 + test/fixtures/traceur/Math/atanh.module.js | 8 + test/fixtures/traceur/Math/cbrt.module.js | 8 + test/fixtures/traceur/Math/clz32.module.js | 9 + test/fixtures/traceur/Math/cosh.module.js | 11 + test/fixtures/traceur/Math/expm1.module.js | 9 + test/fixtures/traceur/Math/fround.module.js | 8 + test/fixtures/traceur/Math/hypot.module.js | 9 + test/fixtures/traceur/Math/imul.module.js | 8 + test/fixtures/traceur/Math/log10.module.js | 9 + test/fixtures/traceur/Math/log1p.module.js | 8 + test/fixtures/traceur/Math/log2.module.js | 9 + test/fixtures/traceur/Math/sign.module.js | 11 + test/fixtures/traceur/Math/sinh.module.js | 11 + test/fixtures/traceur/Math/tanh.module.js | 11 + test/fixtures/traceur/Math/trunc.module.js | 14 ++ .../MemberVariables/Assertions.module.js | 25 ++ .../MemberVariables/ClassExpression.module.js | 14 ++ .../traceur/MemberVariables/Error_Disabled.js | 5 + .../MemberVariables/Inheritance.module.js | 24 ++ .../MemberVariables/NestedClass.module.js | 17 ++ .../Modules/EmptyNamedImport.module.js | 1 + .../Modules/Error_DuplicateImport.module.js | 10 + .../Modules/Error_ExportKeyword.module.js | 3 + .../Modules/Error_ExportKeyword2.module.js | 3 + .../Error_ExportStarConflict.module.js | 3 + .../Error_ExportStarDuplicateExport.module.js | 6 + .../Modules/Error_ImportDefault.module.js | 3 + .../Modules/Error_ImportStar.module.js | 4 + .../Modules/Error_InvalidExport.module.js | 3 + .../Modules/Error_InvalidExport2.module.js | 3 + .../Modules/Error_InvalidExport3.module.js | 3 + .../Error_InvalidModuleDeclaration.module.js | 7 + .../Error_InvalidModuleDeclaration2.module.js | 3 + .../Modules/Error_MissingExport.module.js | 7 + .../traceur/Modules/ExportStar.module.js | 6 + .../traceur/Modules/Exports.module.js | 17 ++ .../Modules/ImportAsExportAs.module.js | 2 + .../traceur/Modules/ImportCircular.module.js | 6 + .../traceur/Modules/ImportDefault.module.js | 17 ++ .../Modules/ImportEmptyImportClause.module.js | 4 + .../Modules/ImportFromModule.module.js | 17 ++ .../Modules/ImportNoImportClause.module.js | 4 + .../Modules/ImportReExportDefault.module.js | 2 + .../Modules/ImportReExportDefaultAs.module.js | 2 + .../traceur/Modules/ModuleDefault.module.js | 3 + .../traceur/Modules/StaticMethod.module.js | 2 + .../traceur/Modules/ThisInModules.module.js | 4 + .../traceur/Modules/resources/TestClass.js | 5 + test/fixtures/traceur/Modules/resources/a.js | 1 + test/fixtures/traceur/Modules/resources/a2.js | 1 + test/fixtures/traceur/Modules/resources/b.js | 1 + test/fixtures/traceur/Modules/resources/c.js | 1 + .../traceur/Modules/resources/clockwise.js | 4 + test/fixtures/traceur/Modules/resources/d.js | 1 + .../resources/default-class-expression.js | 5 + .../Modules/resources/default-class.js | 7 + .../resources/default-function-expression.js | 3 + .../Modules/resources/default-function.js | 5 + .../traceur/Modules/resources/default-name.js | 2 + .../traceur/Modules/resources/default.js | 1 + .../Modules/resources/export-conflict.js | 2 + test/fixtures/traceur/Modules/resources/f.js | 1 + test/fixtures/traceur/Modules/resources/i.js | 4 + test/fixtures/traceur/Modules/resources/m.js | 2 + test/fixtures/traceur/Modules/resources/m2.js | 2 + test/fixtures/traceur/Modules/resources/m3.js | 2 + test/fixtures/traceur/Modules/resources/n.js | 2 + test/fixtures/traceur/Modules/resources/o.js | 2 + .../Modules/resources/re-export-default-as.js | 1 + .../Modules/resources/re-export-default.js | 1 + .../traceur/Modules/resources/side-effect.js | 1 + .../traceur/Modules/resources/side-effect2.js | 3 + test/fixtures/traceur/Modules/resources/x.js | 1 + .../fixtures/traceur/Number/EPSILON.module.js | 10 + .../traceur/Number/MAX_SAFE_INTEGER.module.js | 4 + .../traceur/Number/MIN_SAFE_INTEGER.module.js | 4 + .../traceur/Number/isFinite.module.js | 30 +++ .../traceur/Number/isInteger.module.js | 30 +++ test/fixtures/traceur/Number/isNaN.module.js | 30 +++ .../traceur/Number/isSafeInteger.module.js | 33 +++ .../traceur/NumericLiteral/Error_Disabled.js | 4 + .../NumericLiteral/Error_NoBinaryDigits.js | 4 + .../NumericLiteral/Error_NoOctalDigits.js | 4 + .../fixtures/traceur/NumericLiteral/Simple.js | 88 +++++++ test/fixtures/traceur/ObjectAssign.js | 11 + .../Error_Disabled.js | 5 + .../Error_Keyword.js | 3 + .../Error_MissingVar.js | 3 + .../traceur/ObjectInitializerShorthand/Ok.js | 8 + test/fixtures/traceur/ObjectIs.js | 34 +++ test/fixtures/traceur/ObjectMixin.js | 11 + test/fixtures/traceur/Promise.js | 9 + test/fixtures/traceur/PromiseAll.js | 13 + test/fixtures/traceur/PromiseResolve.js | 3 + .../fixtures/traceur/PromiseThrowInResolve.js | 15 ++ .../Error_Disabled.js | 8 + .../Error_NotNamed.js | 8 + .../PropertyMethodAssignment.js | 71 ++++++ test/fixtures/traceur/README | 23 ++ .../traceur/RegularExpression/Simple.js | 9 + test/fixtures/traceur/Rest/Error_NotLast.js | 6 + .../traceur/Rest/Error_SetAccessor.js | 7 + test/fixtures/traceur/Rest/Simple.js | 16 ++ test/fixtures/traceur/Scope/BlockBinding10.js | 15 ++ test/fixtures/traceur/Scope/BlockBinding11.js | 18 ++ test/fixtures/traceur/Scope/BlockBinding2.js | 15 ++ test/fixtures/traceur/Scope/BlockBinding3.js | 17 ++ test/fixtures/traceur/Scope/BlockBinding4.js | 14 ++ test/fixtures/traceur/Scope/BlockBinding5.js | 18 ++ test/fixtures/traceur/Scope/BlockBinding6.js | 14 ++ test/fixtures/traceur/Scope/BlockBinding7.js | 15 ++ test/fixtures/traceur/Scope/BlockBinding8.js | 15 ++ test/fixtures/traceur/Scope/BlockBinding9.js | 15 ++ .../Scope/BlockBindingSiblingRefenceError.js | 6 + .../Scope/DeconstructingBlockBinding.js | 12 + test/fixtures/traceur/Scope/DeepNestedLet.js | 12 + .../traceur/Scope/DeepNestedLetConst.js | 14 ++ .../traceur/Scope/DeepNestedLetVar.js | 14 ++ .../traceur/Scope/DeepNestedLetVarNoInit.js | 14 ++ .../Scope/Error_ConstMissingInitializer.js | 4 + test/fixtures/traceur/Scope/Error_Disabled.js | 6 + .../Scope/Error_ForInWithInitializerConst.js | 5 + .../Scope/Error_ForInWithInitializerLet.js | 5 + .../Scope/Error_ForInWithInitializerVar.js | 10 + .../Scope/Error_ForOfWithInitializerConst.js | 9 + .../Scope/Error_ForOfWithInitializerLet.js | 9 + .../Scope/Error_ForOfWithInitializerVar.js | 9 + .../Scope/Error_ForWithoutInitializerConst.js | 7 + .../Scope/Error_FunctionExpressionInBlock.js | 10 + .../traceur/Scope/LetForInInitializers1.js | 22 ++ .../traceur/Scope/LetForInitializers1.js | 14 ++ test/fixtures/traceur/Scope/LetInClass.js | 19 ++ .../exec.js => traceur/Scope/LetInClosure.js} | 6 +- test/fixtures/traceur/Scope/LetInFor.js | 7 + test/fixtures/traceur/Scope/LetInForBreak.js | 10 + .../traceur/Scope/LetInForBreakInner.js | 12 + .../traceur/Scope/LetInForBreakNamed.js | 13 + .../traceur/Scope/LetInForContinue.js | 10 + .../traceur/Scope/LetInForContinueInner.js | 12 + .../traceur/Scope/LetInForContinueNamed.js | 13 + .../Scope/LetInProperties.js} | 6 +- .../traceur/Scope/LetInitializerFor1.js | 7 + .../traceur/Scope/LetInitializerFor2.js | 8 + .../traceur/Scope/LetInitializerFor3.js | 9 + .../traceur/Scope/LetInitializerForIn.js | 9 + .../Scope/LetNoInitializer.js} | 2 + .../Scope/LetNoInitializerGlobal.js} | 2 + .../traceur/Scope/LetReinitializeInLoop.js | 9 + test/fixtures/traceur/Scope/LetWithFor.js | 10 + test/fixtures/traceur/Scope/LetWithForIn.js | 10 + test/fixtures/traceur/Scope/LetWithSwitch.js | 16 ++ test/fixtures/traceur/Scope/LetWithSwitch2.js | 16 ++ .../traceur/Scope/NameBindingInFunction.js | 10 + .../fixtures/traceur/Scope/NestedFunction1.js | 9 + .../fixtures/traceur/Scope/NestedFunction2.js | 10 + .../fixtures/traceur/Scope/NestedFunction3.js | 8 + test/fixtures/traceur/Scope/NestedLet.js | 11 + .../traceur/Scope/NestedLetConflict.js | 12 + test/fixtures/traceur/Scope/Regress1381.js | 8 + test/fixtures/traceur/Scope/SiblingScopes.js | 15 ++ test/fixtures/traceur/Scope/TopLevelLet.js | 7 + .../traceur/Scope/TopLevelLetConst.js | 9 + test/fixtures/traceur/Scope/TopLevelLetVar.js | 9 + test/fixtures/traceur/Spread/Array.js | 14 ++ test/fixtures/traceur/Spread/Call.js | 14 ++ .../traceur/Spread/CallWithUndefined.js | 8 + test/fixtures/traceur/Spread/Class.js | 17 ++ .../fixtures/traceur/Spread/Error_Disabled.js | 4 + test/fixtures/traceur/Spread/Iterators.js | 17 ++ test/fixtures/traceur/Spread/MethodCall.js | 18 ++ .../traceur/Spread/MethodCallQuotedName.js | 18 ++ test/fixtures/traceur/Spread/New.js | 26 ++ test/fixtures/traceur/Spread/New2.js | 23 ++ test/fixtures/traceur/Spread/NewBuiltin.js | 7 + test/fixtures/traceur/Spread/NoIterator.js | 1 + test/fixtures/traceur/Spread/NotAnObject.js | 1 + test/fixtures/traceur/Spread/String.js | 13 + test/fixtures/traceur/Spread/Type.js | 29 +++ .../traceur/StringExtras/CodePointAt.js | 76 ++++++ .../fixtures/traceur/StringExtras/EndsWith.js | 217 ++++++++++++++++ .../traceur/StringExtras/FromCodePoint.js | 25 ++ .../fixtures/traceur/StringExtras/Includes.js | 114 +++++++++ test/fixtures/traceur/StringExtras/Repeat.js | 33 +++ .../traceur/StringExtras/StartsWith.js | 210 ++++++++++++++++ test/fixtures/traceur/StringIterator.js | 15 ++ test/fixtures/traceur/Symbol/Inherited.js | 28 +++ test/fixtures/traceur/Symbol/Object.js | 31 +++ test/fixtures/traceur/Symbol/ObjectModel.js | 13 + .../traceur/Symbol/TransformationOff.js | 10 + .../fixtures/traceur/Syntax/ArrayWithHoles.js | 10 + test/fixtures/traceur/Syntax/Empty.js | 0 .../traceur/Syntax/Error_Arguments.js | 6 + ...or_ForInLoopTooManyVariableDeclarations.js | 3 + ...or_ForOfLoopTooManyVariableDeclarations.js | 3 + .../traceur/Syntax/Error_FunctionParam.js | 5 + .../Syntax/Error_NoLineTerminatorPostfix.js | 7 + .../traceur/Syntax/Error_RegExpNotClosed.js | 3 + .../Error_UnicodeEscapeSequenceInName.js | 3 + .../traceur/Syntax/Error_WithInClass.js | 7 + .../Syntax/Error_WithInModule.module.js | 3 + .../traceur/Syntax/Error_YieldStarNewLine.js | 6 + .../traceur/Syntax/ExpressionValidation.js | 25 ++ .../traceur/Syntax/ImplicitSemiColon.js | 6 + .../traceur/Syntax/ImportFromTypo.module.js | 3 + .../Syntax/NumberLiteralMemberExpression.js | 4 + .../traceur/Syntax/RegularExpression.js | 8 + test/fixtures/traceur/Syntax/StringEscapes.js | 13 + .../Syntax/UnicodeEscapeSequenceInName.js | 5 + test/fixtures/traceur/Syntax/null.js | 1 + .../TemplateLiterals/CallExpression.js | 18 ++ .../TemplateLiterals/CommaExpression.js | 10 + .../traceur/TemplateLiterals/Default.js | 95 +++++++ .../TemplateLiterals/Error_Disabled.js | 4 + .../Error_InvalidSubstitution.js | 5 + .../Error_InvalidSubstitution2.js | 5 + .../TemplateLiterals/Error_NotClosed.js | 5 + .../traceur/TemplateLiterals/InBlock.js | 9 + .../TemplateLiterals/MemberExpression.js | 25 ++ .../traceur/TemplateLiterals/StringRaw.js | 10 + test/fixtures/traceur/TemplateLiterals/Tag.js | 87 +++++++ .../traceur/TemplateLiterals/resources/f.js | 3 + .../traceur/TemplateLiterals/resources/m.js | 3 + .../traceur/TemplateLiterals/resources/n.js | 3 + .../Error_CodePointTooHigh.js | 4 + .../UnicodeEscapeSequence/Error_Disabled.js | 4 + .../Error_HexDigitExpected.js | 4 + .../Error_HexDigitExpected2.js | 4 + .../Error_HexDigitExpected3.js | 4 + .../Error_HexDigitExpected4.js | 4 + .../traceur/UnicodeEscapeSequence/Simple.js | 15 ++ test/fixtures/traceur/Yield/Arguments.js | 8 + test/fixtures/traceur/Yield/BinaryOperator.js | 9 + test/fixtures/traceur/Yield/Break.js | 48 ++++ test/fixtures/traceur/Yield/CommaOperator.js | 9 + test/fixtures/traceur/Yield/Continue.js | 18 ++ .../traceur/Yield/DefaultArguments.js | 7 + test/fixtures/traceur/Yield/DoGenerator.js | 19 ++ .../Yield/DoWhileStatementWithYield.js | 33 +++ test/fixtures/traceur/Yield/EmptyGenerator.js | 5 + test/fixtures/traceur/Yield/Error_Disabled.js | 8 + .../fixtures/traceur/Yield/Error_Disabled2.js | 7 + .../traceur/Yield/Error_MissingStar.js | 5 + test/fixtures/traceur/Yield/Finally.js | 22 ++ .../traceur/Yield/ForEmptyGenerator.js | 15 ++ test/fixtures/traceur/Yield/ForGenerator.js | 25 ++ test/fixtures/traceur/Yield/ForInGenerator.js | 27 ++ .../fixtures/traceur/Yield/ForInGenerator2.js | 28 +++ .../fixtures/traceur/Yield/ForInGenerator3.js | 27 ++ .../Yield/ForLexicallyNestedGenerator.js | 15 ++ .../fixtures/traceur/Yield/ForMissingParts.js | 95 +++++++ test/fixtures/traceur/Yield/ForOfGenerator.js | 49 ++++ test/fixtures/traceur/Yield/ForStatement.js | 46 ++++ .../traceur/Yield/FunctionDeclaration.js | 12 + .../fixtures/traceur/Yield/GeneratorReturn.js | 86 +++++++ .../Yield/GeneratorWithoutYieldOrReturn.js | 10 + test/fixtures/traceur/Yield/Hoisting.js | 13 + .../traceur/Yield/HoistingBlockbinding.js | 21 ++ test/fixtures/traceur/Yield/IfGenerator.js | 26 ++ .../traceur/Yield/IfStatementWithYield.js | 14 ++ .../traceur/Yield/LabelledBlockGenerator.js | 20 ++ .../traceur/Yield/LabelledBreakGenerator.js | 34 +++ .../traceur/Yield/MapFilterGenerator.js | 31 +++ test/fixtures/traceur/Yield/ObjectModel.js | 41 +++ .../traceur/Yield/OverrideGenerator.js | 14 ++ .../fixtures/traceur/Yield/ReturnInFinally.js | 33 +++ test/fixtures/traceur/Yield/ReturnYield.js | 55 ++++ test/fixtures/traceur/Yield/ReturnYieldFor.js | 15 ++ .../traceur/Yield/SequenceGenerator.js | 23 ++ .../fixtures/traceur/Yield/SimpleGenerator.js | 15 ++ .../traceur/Yield/StatementTestGenerator.js | 37 +++ .../fixtures/traceur/Yield/SwitchGenerator.js | 37 +++ .../traceur/Yield/SwitchStatementWithYield.js | 23 ++ test/fixtures/traceur/Yield/This.js | 8 + test/fixtures/traceur/Yield/Tree.js | 75 ++++++ test/fixtures/traceur/Yield/Try.js | 52 ++++ test/fixtures/traceur/Yield/Try10.js | 90 +++++++ test/fixtures/traceur/Yield/Try11.js | 106 ++++++++ test/fixtures/traceur/Yield/Try12.js | 111 +++++++++ test/fixtures/traceur/Yield/Try2.js | 57 +++++ test/fixtures/traceur/Yield/Try3.js | 56 +++++ test/fixtures/traceur/Yield/Try4.js | 80 ++++++ test/fixtures/traceur/Yield/Try5.js | 95 +++++++ test/fixtures/traceur/Yield/Try6.js | 74 ++++++ test/fixtures/traceur/Yield/Try7.js | 78 ++++++ test/fixtures/traceur/Yield/Try8.js | 83 +++++++ test/fixtures/traceur/Yield/Try9.js | 90 +++++++ .../traceur/Yield/TryCatchGenerator.js | 153 ++++++++++++ .../traceur/Yield/TryCatchYieldGenerator.js | 21 ++ .../traceur/Yield/TryFinallyGenerator.js | 39 +++ test/fixtures/traceur/Yield/WhileGenerator.js | 25 ++ .../traceur/Yield/WhileStatementWithYield.js | 33 +++ .../traceur/Yield/YieldAssignThrow.js | 18 ++ .../fixtures/traceur/Yield/YieldIdentifier.js | 29 +++ test/fixtures/traceur/Yield/YieldInFinally.js | 41 +++ .../traceur/Yield/YieldUndefinedGenerator.js | 24 ++ test/fixtures/traceur/Yield/YieldYield.js | 19 ++ .../Yield/tryFinallyFinallyGenerator.js | 29 +++ .../es6-let-scoping-traceur/closure/actual.js | 9 - .../closure/expected.js | 11 - .../deep-nested/exec.js | 9 - .../for-in-initializers/exec.js | 17 -- .../for-initializers/exec.js | 26 -- .../function-declaration/actual.js | 9 - .../function-declaration/expected.js | 11 - .../es6-let-scoping-traceur/in-class/exec.js | 15 -- .../in-for-break-inner/exec.js | 8 - .../in-for-break-named/exec.js | 9 - .../in-for-break/exec.js | 6 - .../in-for-continue-inner/exec.js | 8 - .../in-for-continue-named/exec.js | 9 - .../in-for-continue/exec.js | 6 - .../es6-let-scoping-traceur/in-for/exec.js | 3 - .../initializer-for-1/exec.js | 3 - .../initializer-for-2/exec.js | 4 - .../initializer-for-3/exec.js | 5 - .../initializer-for-in/exec.js | 5 - .../nested-conflict/exec.js | 12 - .../nested-function-1/exec.js | 5 - .../nested-function-2/exec.js | 6 - .../nested-function-3/exec.js | 4 - .../es6-let-scoping-traceur/nested/exec.js | 7 - .../no-renaming/actual.js | 6 - .../no-renaming/expected.js | 8 - .../regress-1381/exec.js | 8 - .../with-for-in/exec.js | 6 - .../es6-let-scoping-traceur/with-for/exec.js | 6 - .../with-switch/exec.js | 12 - test/traceur.js | 5 + test/transformation.js | 101 +------- 495 files changed, 9831 insertions(+), 360 deletions(-) create mode 100644 test/_transformation-helper.js create mode 100644 test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js create mode 100644 test/fixtures/traceur/ArrayComprehension/Closure.js create mode 100644 test/fixtures/traceur/ArrayComprehension/Error_Disabled.js create mode 100644 test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js create mode 100644 test/fixtures/traceur/ArrayComprehension/Simple.js create mode 100644 test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js create mode 100644 test/fixtures/traceur/ArrayExtras/Fill.js create mode 100644 test/fixtures/traceur/ArrayExtras/Find.js create mode 100644 test/fixtures/traceur/ArrayExtras/FindIndex.js create mode 100644 test/fixtures/traceur/ArrayExtras/From.js create mode 100644 test/fixtures/traceur/ArrayExtras/Of.js create mode 100644 test/fixtures/traceur/ArrayIterator.js create mode 100644 test/fixtures/traceur/ArrowFunctions/AlphaRename.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Arguments.js create mode 100644 test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js create mode 100644 test/fixtures/traceur/ArrowFunctions/CoverInitializer.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Disabled.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js create mode 100644 test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js create mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js create mode 100644 test/fixtures/traceur/ArrowFunctions/ThisBindings.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrow.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncMethod.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js create mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Basics.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Complete.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Empty.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Error_Disabled.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Export.module.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Finally.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Finally2.js create mode 100644 test/fixtures/traceur/AsyncFunctions/PromiseCast.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Prototype.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Rethrow.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Return.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Throw.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Timeout.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Value.js create mode 100644 test/fixtures/traceur/AsyncFunctions/Yield.js create mode 100644 test/fixtures/traceur/AsyncFunctions/resources/async-function.js create mode 100644 test/fixtures/traceur/Classes/ClassMethodInheritance.js create mode 100644 test/fixtures/traceur/Classes/ClassNameBinding.js create mode 100644 test/fixtures/traceur/Classes/ClassNameInStack.js create mode 100644 test/fixtures/traceur/Classes/Constructor.js create mode 100644 test/fixtures/traceur/Classes/ConstructorChaining.js create mode 100644 test/fixtures/traceur/Classes/ConstructorMember.js create mode 100644 test/fixtures/traceur/Classes/DefaultConstructor.js create mode 100644 test/fixtures/traceur/Classes/DeriveFromObject.js create mode 100644 test/fixtures/traceur/Classes/EmptyClass.js create mode 100644 test/fixtures/traceur/Classes/Error_Disabled.js create mode 100644 test/fixtures/traceur/Classes/Error_GH1556.js create mode 100644 test/fixtures/traceur/Classes/Error_Super.js create mode 100644 test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js create mode 100644 test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js create mode 100644 test/fixtures/traceur/Classes/ExtendObject.js create mode 100644 test/fixtures/traceur/Classes/ExtendStrange.js create mode 100644 test/fixtures/traceur/Classes/FieldInheritance.js create mode 100644 test/fixtures/traceur/Classes/FieldInitializers.js create mode 100644 test/fixtures/traceur/Classes/FieldLookup.js create mode 100644 test/fixtures/traceur/Classes/Fields.js create mode 100644 test/fixtures/traceur/Classes/Getters.js create mode 100644 test/fixtures/traceur/Classes/Inheritance.js create mode 100644 test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js create mode 100644 test/fixtures/traceur/Classes/InheritanceFromNonclass.js create mode 100644 test/fixtures/traceur/Classes/InheritanceNameBinding.js create mode 100644 test/fixtures/traceur/Classes/Method.js create mode 100644 test/fixtures/traceur/Classes/MethodInheritance.js create mode 100644 test/fixtures/traceur/Classes/MethodLookup.js create mode 100644 test/fixtures/traceur/Classes/NameBinding.js create mode 100644 test/fixtures/traceur/Classes/NestedClassSuper.js create mode 100644 test/fixtures/traceur/Classes/NestedClassSuperAnimal.js create mode 100644 test/fixtures/traceur/Classes/NestedFunctionSuper.js create mode 100644 test/fixtures/traceur/Classes/NewClassExpression.js create mode 100644 test/fixtures/traceur/Classes/OptionalParams.js create mode 100644 test/fixtures/traceur/Classes/PropertyAccessors.js create mode 100644 test/fixtures/traceur/Classes/PrototypeDescriptor.js create mode 100644 test/fixtures/traceur/Classes/RestParams.js create mode 100644 test/fixtures/traceur/Classes/SemiColon.js create mode 100644 test/fixtures/traceur/Classes/SimpleSuper.js create mode 100644 test/fixtures/traceur/Classes/Skip_DerivedButton.js create mode 100644 test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js create mode 100644 test/fixtures/traceur/Classes/Static.js create mode 100644 test/fixtures/traceur/Classes/StaticSuper.js create mode 100644 test/fixtures/traceur/Classes/StaticSuperNoExtends.js create mode 100644 test/fixtures/traceur/Classes/StaticSymbol.js create mode 100644 test/fixtures/traceur/Classes/SuperChaining.js create mode 100644 test/fixtures/traceur/Classes/SuperChangeProto.js create mode 100644 test/fixtures/traceur/Classes/SuperMissing.js create mode 100644 test/fixtures/traceur/Classes/SuperPostfix.js create mode 100644 test/fixtures/traceur/Classes/SuperSet.js create mode 100644 test/fixtures/traceur/Classes/SuperUnary.js create mode 100644 test/fixtures/traceur/Classes/SuperWithoutExtends.js create mode 100644 test/fixtures/traceur/Classes/Types.js create mode 100644 test/fixtures/traceur/Collections/Map.js create mode 100644 test/fixtures/traceur/Collections/Set.js create mode 100644 test/fixtures/traceur/Collections/SetWithSymbols.js create mode 100644 test/fixtures/traceur/ComputedPropertyNames/Class.js create mode 100644 test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js create mode 100644 test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js create mode 100644 test/fixtures/traceur/ComputedPropertyNames/Symbol.js create mode 100644 test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js create mode 100644 test/fixtures/traceur/DefaultParameters/Simple.js create mode 100644 test/fixtures/traceur/Destructuring/Arguments.js create mode 100644 test/fixtures/traceur/Destructuring/Array.js create mode 100644 test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js create mode 100644 test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js create mode 100644 test/fixtures/traceur/Destructuring/ArrowFunction.js create mode 100644 test/fixtures/traceur/Destructuring/Catch.js create mode 100644 test/fixtures/traceur/Destructuring/Class.js create mode 100644 test/fixtures/traceur/Destructuring/CoverInitializedName.js create mode 100644 test/fixtures/traceur/Destructuring/CoverInitializer.js create mode 100644 test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js create mode 100644 test/fixtures/traceur/Destructuring/DefaultParams.js create mode 100644 test/fixtures/traceur/Destructuring/Empty.js create mode 100644 test/fixtures/traceur/Destructuring/Error_Disabled.js create mode 100644 test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js create mode 100644 test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js create mode 100644 test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js create mode 100644 test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js create mode 100644 test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js create mode 100644 test/fixtures/traceur/Destructuring/EvaluationOrder.js create mode 100644 test/fixtures/traceur/Destructuring/ForInLoop.js create mode 100644 test/fixtures/traceur/Destructuring/ForOfLoop.js create mode 100644 test/fixtures/traceur/Destructuring/FunctionArrayPattern.js create mode 100644 test/fixtures/traceur/Destructuring/FunctionObjectPattern.js create mode 100644 test/fixtures/traceur/Destructuring/Initializer.js create mode 100644 test/fixtures/traceur/Destructuring/InitializerObject.js create mode 100644 test/fixtures/traceur/Destructuring/Method.js create mode 100644 test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js create mode 100644 test/fixtures/traceur/Destructuring/NestedScopeArguments.js create mode 100644 test/fixtures/traceur/Destructuring/Object.js create mode 100644 test/fixtures/traceur/Destructuring/Rest.js create mode 100644 test/fixtures/traceur/Destructuring/RestIterator.js create mode 100644 test/fixtures/traceur/Destructuring/ScopeThis.js create mode 100644 test/fixtures/traceur/Destructuring/SetAccessor.js create mode 100644 test/fixtures/traceur/Destructuring/Simplify.js create mode 100644 test/fixtures/traceur/Destructuring/StrangeProperties.js create mode 100644 test/fixtures/traceur/Destructuring/TopLevel.js create mode 100644 test/fixtures/traceur/Destructuring/ValueTypes.js create mode 100644 test/fixtures/traceur/Destructuring/VarDecl.js create mode 100644 test/fixtures/traceur/Exponentiation/Basics.js create mode 100644 test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js create mode 100644 test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js create mode 100644 test/fixtures/traceur/GeneratorComprehension/Simple.js create mode 100644 test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js create mode 100644 test/fixtures/traceur/Math/acosh.module.js create mode 100644 test/fixtures/traceur/Math/asinh.module.js create mode 100644 test/fixtures/traceur/Math/atanh.module.js create mode 100644 test/fixtures/traceur/Math/cbrt.module.js create mode 100644 test/fixtures/traceur/Math/clz32.module.js create mode 100644 test/fixtures/traceur/Math/cosh.module.js create mode 100644 test/fixtures/traceur/Math/expm1.module.js create mode 100644 test/fixtures/traceur/Math/fround.module.js create mode 100644 test/fixtures/traceur/Math/hypot.module.js create mode 100644 test/fixtures/traceur/Math/imul.module.js create mode 100644 test/fixtures/traceur/Math/log10.module.js create mode 100644 test/fixtures/traceur/Math/log1p.module.js create mode 100644 test/fixtures/traceur/Math/log2.module.js create mode 100644 test/fixtures/traceur/Math/sign.module.js create mode 100644 test/fixtures/traceur/Math/sinh.module.js create mode 100644 test/fixtures/traceur/Math/tanh.module.js create mode 100644 test/fixtures/traceur/Math/trunc.module.js create mode 100644 test/fixtures/traceur/MemberVariables/Assertions.module.js create mode 100644 test/fixtures/traceur/MemberVariables/ClassExpression.module.js create mode 100644 test/fixtures/traceur/MemberVariables/Error_Disabled.js create mode 100644 test/fixtures/traceur/MemberVariables/Inheritance.module.js create mode 100644 test/fixtures/traceur/MemberVariables/NestedClass.module.js create mode 100644 test/fixtures/traceur/Modules/EmptyNamedImport.module.js create mode 100644 test/fixtures/traceur/Modules/Error_DuplicateImport.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ExportKeyword.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ImportDefault.module.js create mode 100644 test/fixtures/traceur/Modules/Error_ImportStar.module.js create mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport.module.js create mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport2.module.js create mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport3.module.js create mode 100644 test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js create mode 100644 test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js create mode 100644 test/fixtures/traceur/Modules/Error_MissingExport.module.js create mode 100644 test/fixtures/traceur/Modules/ExportStar.module.js create mode 100644 test/fixtures/traceur/Modules/Exports.module.js create mode 100644 test/fixtures/traceur/Modules/ImportAsExportAs.module.js create mode 100644 test/fixtures/traceur/Modules/ImportCircular.module.js create mode 100644 test/fixtures/traceur/Modules/ImportDefault.module.js create mode 100644 test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js create mode 100644 test/fixtures/traceur/Modules/ImportFromModule.module.js create mode 100644 test/fixtures/traceur/Modules/ImportNoImportClause.module.js create mode 100644 test/fixtures/traceur/Modules/ImportReExportDefault.module.js create mode 100644 test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js create mode 100644 test/fixtures/traceur/Modules/ModuleDefault.module.js create mode 100644 test/fixtures/traceur/Modules/StaticMethod.module.js create mode 100644 test/fixtures/traceur/Modules/ThisInModules.module.js create mode 100644 test/fixtures/traceur/Modules/resources/TestClass.js create mode 100644 test/fixtures/traceur/Modules/resources/a.js create mode 100644 test/fixtures/traceur/Modules/resources/a2.js create mode 100644 test/fixtures/traceur/Modules/resources/b.js create mode 100644 test/fixtures/traceur/Modules/resources/c.js create mode 100644 test/fixtures/traceur/Modules/resources/clockwise.js create mode 100644 test/fixtures/traceur/Modules/resources/d.js create mode 100644 test/fixtures/traceur/Modules/resources/default-class-expression.js create mode 100644 test/fixtures/traceur/Modules/resources/default-class.js create mode 100644 test/fixtures/traceur/Modules/resources/default-function-expression.js create mode 100644 test/fixtures/traceur/Modules/resources/default-function.js create mode 100644 test/fixtures/traceur/Modules/resources/default-name.js create mode 100644 test/fixtures/traceur/Modules/resources/default.js create mode 100644 test/fixtures/traceur/Modules/resources/export-conflict.js create mode 100644 test/fixtures/traceur/Modules/resources/f.js create mode 100644 test/fixtures/traceur/Modules/resources/i.js create mode 100644 test/fixtures/traceur/Modules/resources/m.js create mode 100644 test/fixtures/traceur/Modules/resources/m2.js create mode 100644 test/fixtures/traceur/Modules/resources/m3.js create mode 100644 test/fixtures/traceur/Modules/resources/n.js create mode 100644 test/fixtures/traceur/Modules/resources/o.js create mode 100644 test/fixtures/traceur/Modules/resources/re-export-default-as.js create mode 100644 test/fixtures/traceur/Modules/resources/re-export-default.js create mode 100644 test/fixtures/traceur/Modules/resources/side-effect.js create mode 100644 test/fixtures/traceur/Modules/resources/side-effect2.js create mode 100644 test/fixtures/traceur/Modules/resources/x.js create mode 100644 test/fixtures/traceur/Number/EPSILON.module.js create mode 100644 test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js create mode 100644 test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js create mode 100644 test/fixtures/traceur/Number/isFinite.module.js create mode 100644 test/fixtures/traceur/Number/isInteger.module.js create mode 100644 test/fixtures/traceur/Number/isNaN.module.js create mode 100644 test/fixtures/traceur/Number/isSafeInteger.module.js create mode 100644 test/fixtures/traceur/NumericLiteral/Error_Disabled.js create mode 100644 test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js create mode 100644 test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js create mode 100644 test/fixtures/traceur/NumericLiteral/Simple.js create mode 100644 test/fixtures/traceur/ObjectAssign.js create mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js create mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js create mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js create mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Ok.js create mode 100644 test/fixtures/traceur/ObjectIs.js create mode 100644 test/fixtures/traceur/ObjectMixin.js create mode 100644 test/fixtures/traceur/Promise.js create mode 100644 test/fixtures/traceur/PromiseAll.js create mode 100644 test/fixtures/traceur/PromiseResolve.js create mode 100644 test/fixtures/traceur/PromiseThrowInResolve.js create mode 100644 test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js create mode 100644 test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js create mode 100644 test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js create mode 100644 test/fixtures/traceur/README create mode 100644 test/fixtures/traceur/RegularExpression/Simple.js create mode 100644 test/fixtures/traceur/Rest/Error_NotLast.js create mode 100644 test/fixtures/traceur/Rest/Error_SetAccessor.js create mode 100644 test/fixtures/traceur/Rest/Simple.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding10.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding11.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding2.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding3.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding4.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding5.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding6.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding7.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding8.js create mode 100644 test/fixtures/traceur/Scope/BlockBinding9.js create mode 100644 test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js create mode 100644 test/fixtures/traceur/Scope/DeconstructingBlockBinding.js create mode 100644 test/fixtures/traceur/Scope/DeepNestedLet.js create mode 100644 test/fixtures/traceur/Scope/DeepNestedLetConst.js create mode 100644 test/fixtures/traceur/Scope/DeepNestedLetVar.js create mode 100644 test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js create mode 100644 test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js create mode 100644 test/fixtures/traceur/Scope/Error_Disabled.js create mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js create mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js create mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js create mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js create mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js create mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js create mode 100644 test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js create mode 100644 test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js create mode 100644 test/fixtures/traceur/Scope/LetForInInitializers1.js create mode 100644 test/fixtures/traceur/Scope/LetForInitializers1.js create mode 100644 test/fixtures/traceur/Scope/LetInClass.js rename test/fixtures/{transformation/es6-let-scoping-traceur/in-closure/exec.js => traceur/Scope/LetInClosure.js} (74%) create mode 100644 test/fixtures/traceur/Scope/LetInFor.js create mode 100644 test/fixtures/traceur/Scope/LetInForBreak.js create mode 100644 test/fixtures/traceur/Scope/LetInForBreakInner.js create mode 100644 test/fixtures/traceur/Scope/LetInForBreakNamed.js create mode 100644 test/fixtures/traceur/Scope/LetInForContinue.js create mode 100644 test/fixtures/traceur/Scope/LetInForContinueInner.js create mode 100644 test/fixtures/traceur/Scope/LetInForContinueNamed.js rename test/fixtures/{transformation/es6-let-scoping-traceur/in-properties/exec.js => traceur/Scope/LetInProperties.js} (63%) create mode 100644 test/fixtures/traceur/Scope/LetInitializerFor1.js create mode 100644 test/fixtures/traceur/Scope/LetInitializerFor2.js create mode 100644 test/fixtures/traceur/Scope/LetInitializerFor3.js create mode 100644 test/fixtures/traceur/Scope/LetInitializerForIn.js rename test/fixtures/{transformation/es6-let-scoping-traceur/no-initializer/exec.js => traceur/Scope/LetNoInitializer.js} (78%) rename test/fixtures/{transformation/es6-let-scoping-traceur/no-initializer-global/exec.js => traceur/Scope/LetNoInitializerGlobal.js} (69%) create mode 100644 test/fixtures/traceur/Scope/LetReinitializeInLoop.js create mode 100644 test/fixtures/traceur/Scope/LetWithFor.js create mode 100644 test/fixtures/traceur/Scope/LetWithForIn.js create mode 100644 test/fixtures/traceur/Scope/LetWithSwitch.js create mode 100644 test/fixtures/traceur/Scope/LetWithSwitch2.js create mode 100644 test/fixtures/traceur/Scope/NameBindingInFunction.js create mode 100644 test/fixtures/traceur/Scope/NestedFunction1.js create mode 100644 test/fixtures/traceur/Scope/NestedFunction2.js create mode 100644 test/fixtures/traceur/Scope/NestedFunction3.js create mode 100644 test/fixtures/traceur/Scope/NestedLet.js create mode 100644 test/fixtures/traceur/Scope/NestedLetConflict.js create mode 100644 test/fixtures/traceur/Scope/Regress1381.js create mode 100644 test/fixtures/traceur/Scope/SiblingScopes.js create mode 100644 test/fixtures/traceur/Scope/TopLevelLet.js create mode 100644 test/fixtures/traceur/Scope/TopLevelLetConst.js create mode 100644 test/fixtures/traceur/Scope/TopLevelLetVar.js create mode 100644 test/fixtures/traceur/Spread/Array.js create mode 100644 test/fixtures/traceur/Spread/Call.js create mode 100644 test/fixtures/traceur/Spread/CallWithUndefined.js create mode 100644 test/fixtures/traceur/Spread/Class.js create mode 100644 test/fixtures/traceur/Spread/Error_Disabled.js create mode 100644 test/fixtures/traceur/Spread/Iterators.js create mode 100644 test/fixtures/traceur/Spread/MethodCall.js create mode 100644 test/fixtures/traceur/Spread/MethodCallQuotedName.js create mode 100644 test/fixtures/traceur/Spread/New.js create mode 100644 test/fixtures/traceur/Spread/New2.js create mode 100644 test/fixtures/traceur/Spread/NewBuiltin.js create mode 100644 test/fixtures/traceur/Spread/NoIterator.js create mode 100644 test/fixtures/traceur/Spread/NotAnObject.js create mode 100644 test/fixtures/traceur/Spread/String.js create mode 100644 test/fixtures/traceur/Spread/Type.js create mode 100644 test/fixtures/traceur/StringExtras/CodePointAt.js create mode 100644 test/fixtures/traceur/StringExtras/EndsWith.js create mode 100644 test/fixtures/traceur/StringExtras/FromCodePoint.js create mode 100644 test/fixtures/traceur/StringExtras/Includes.js create mode 100644 test/fixtures/traceur/StringExtras/Repeat.js create mode 100644 test/fixtures/traceur/StringExtras/StartsWith.js create mode 100644 test/fixtures/traceur/StringIterator.js create mode 100644 test/fixtures/traceur/Symbol/Inherited.js create mode 100644 test/fixtures/traceur/Symbol/Object.js create mode 100644 test/fixtures/traceur/Symbol/ObjectModel.js create mode 100644 test/fixtures/traceur/Symbol/TransformationOff.js create mode 100644 test/fixtures/traceur/Syntax/ArrayWithHoles.js create mode 100644 test/fixtures/traceur/Syntax/Empty.js create mode 100644 test/fixtures/traceur/Syntax/Error_Arguments.js create mode 100644 test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js create mode 100644 test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js create mode 100644 test/fixtures/traceur/Syntax/Error_FunctionParam.js create mode 100644 test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js create mode 100644 test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js create mode 100644 test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js create mode 100644 test/fixtures/traceur/Syntax/Error_WithInClass.js create mode 100644 test/fixtures/traceur/Syntax/Error_WithInModule.module.js create mode 100644 test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js create mode 100644 test/fixtures/traceur/Syntax/ExpressionValidation.js create mode 100644 test/fixtures/traceur/Syntax/ImplicitSemiColon.js create mode 100644 test/fixtures/traceur/Syntax/ImportFromTypo.module.js create mode 100644 test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js create mode 100644 test/fixtures/traceur/Syntax/RegularExpression.js create mode 100644 test/fixtures/traceur/Syntax/StringEscapes.js create mode 100644 test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js create mode 100644 test/fixtures/traceur/Syntax/null.js create mode 100644 test/fixtures/traceur/TemplateLiterals/CallExpression.js create mode 100644 test/fixtures/traceur/TemplateLiterals/CommaExpression.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Default.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Error_Disabled.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js create mode 100644 test/fixtures/traceur/TemplateLiterals/InBlock.js create mode 100644 test/fixtures/traceur/TemplateLiterals/MemberExpression.js create mode 100644 test/fixtures/traceur/TemplateLiterals/StringRaw.js create mode 100644 test/fixtures/traceur/TemplateLiterals/Tag.js create mode 100644 test/fixtures/traceur/TemplateLiterals/resources/f.js create mode 100644 test/fixtures/traceur/TemplateLiterals/resources/m.js create mode 100644 test/fixtures/traceur/TemplateLiterals/resources/n.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js create mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Simple.js create mode 100644 test/fixtures/traceur/Yield/Arguments.js create mode 100644 test/fixtures/traceur/Yield/BinaryOperator.js create mode 100644 test/fixtures/traceur/Yield/Break.js create mode 100644 test/fixtures/traceur/Yield/CommaOperator.js create mode 100644 test/fixtures/traceur/Yield/Continue.js create mode 100644 test/fixtures/traceur/Yield/DefaultArguments.js create mode 100644 test/fixtures/traceur/Yield/DoGenerator.js create mode 100644 test/fixtures/traceur/Yield/DoWhileStatementWithYield.js create mode 100644 test/fixtures/traceur/Yield/EmptyGenerator.js create mode 100644 test/fixtures/traceur/Yield/Error_Disabled.js create mode 100644 test/fixtures/traceur/Yield/Error_Disabled2.js create mode 100644 test/fixtures/traceur/Yield/Error_MissingStar.js create mode 100644 test/fixtures/traceur/Yield/Finally.js create mode 100644 test/fixtures/traceur/Yield/ForEmptyGenerator.js create mode 100644 test/fixtures/traceur/Yield/ForGenerator.js create mode 100644 test/fixtures/traceur/Yield/ForInGenerator.js create mode 100644 test/fixtures/traceur/Yield/ForInGenerator2.js create mode 100644 test/fixtures/traceur/Yield/ForInGenerator3.js create mode 100644 test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js create mode 100644 test/fixtures/traceur/Yield/ForMissingParts.js create mode 100644 test/fixtures/traceur/Yield/ForOfGenerator.js create mode 100644 test/fixtures/traceur/Yield/ForStatement.js create mode 100644 test/fixtures/traceur/Yield/FunctionDeclaration.js create mode 100644 test/fixtures/traceur/Yield/GeneratorReturn.js create mode 100644 test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js create mode 100644 test/fixtures/traceur/Yield/Hoisting.js create mode 100644 test/fixtures/traceur/Yield/HoistingBlockbinding.js create mode 100644 test/fixtures/traceur/Yield/IfGenerator.js create mode 100644 test/fixtures/traceur/Yield/IfStatementWithYield.js create mode 100644 test/fixtures/traceur/Yield/LabelledBlockGenerator.js create mode 100644 test/fixtures/traceur/Yield/LabelledBreakGenerator.js create mode 100644 test/fixtures/traceur/Yield/MapFilterGenerator.js create mode 100644 test/fixtures/traceur/Yield/ObjectModel.js create mode 100644 test/fixtures/traceur/Yield/OverrideGenerator.js create mode 100644 test/fixtures/traceur/Yield/ReturnInFinally.js create mode 100644 test/fixtures/traceur/Yield/ReturnYield.js create mode 100644 test/fixtures/traceur/Yield/ReturnYieldFor.js create mode 100644 test/fixtures/traceur/Yield/SequenceGenerator.js create mode 100644 test/fixtures/traceur/Yield/SimpleGenerator.js create mode 100644 test/fixtures/traceur/Yield/StatementTestGenerator.js create mode 100644 test/fixtures/traceur/Yield/SwitchGenerator.js create mode 100644 test/fixtures/traceur/Yield/SwitchStatementWithYield.js create mode 100644 test/fixtures/traceur/Yield/This.js create mode 100644 test/fixtures/traceur/Yield/Tree.js create mode 100644 test/fixtures/traceur/Yield/Try.js create mode 100644 test/fixtures/traceur/Yield/Try10.js create mode 100644 test/fixtures/traceur/Yield/Try11.js create mode 100644 test/fixtures/traceur/Yield/Try12.js create mode 100644 test/fixtures/traceur/Yield/Try2.js create mode 100644 test/fixtures/traceur/Yield/Try3.js create mode 100644 test/fixtures/traceur/Yield/Try4.js create mode 100644 test/fixtures/traceur/Yield/Try5.js create mode 100644 test/fixtures/traceur/Yield/Try6.js create mode 100644 test/fixtures/traceur/Yield/Try7.js create mode 100644 test/fixtures/traceur/Yield/Try8.js create mode 100644 test/fixtures/traceur/Yield/Try9.js create mode 100644 test/fixtures/traceur/Yield/TryCatchGenerator.js create mode 100644 test/fixtures/traceur/Yield/TryCatchYieldGenerator.js create mode 100644 test/fixtures/traceur/Yield/TryFinallyGenerator.js create mode 100644 test/fixtures/traceur/Yield/WhileGenerator.js create mode 100644 test/fixtures/traceur/Yield/WhileStatementWithYield.js create mode 100644 test/fixtures/traceur/Yield/YieldAssignThrow.js create mode 100644 test/fixtures/traceur/Yield/YieldIdentifier.js create mode 100644 test/fixtures/traceur/Yield/YieldInFinally.js create mode 100644 test/fixtures/traceur/Yield/YieldUndefinedGenerator.js create mode 100644 test/fixtures/traceur/Yield/YieldYield.js create mode 100644 test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/closure/actual.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/closure/expected.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/deep-nested/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/for-in-initializers/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/for-initializers/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/actual.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/expected.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-class/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-inner/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-named/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-break/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-inner/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-named/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/in-for/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-1/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-2/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-3/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-in/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/nested-conflict/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/nested-function-1/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/nested-function-2/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/nested-function-3/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/nested/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/actual.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/expected.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/regress-1381/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/with-for-in/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/with-for/exec.js delete mode 100644 test/fixtures/transformation/es6-let-scoping-traceur/with-switch/exec.js create mode 100644 test/traceur.js diff --git a/test/_helper.js b/test/_helper.js index 6f5afdd93b..78ff16fe0b 100644 --- a/test/_helper.js +++ b/test/_helper.js @@ -3,7 +3,7 @@ var fs = require("fs"); var _ = require("lodash"); var humanise = function (val) { - return val.replace(/-/g, " "); + return path.basename(val, path.extname(val)).replace(/-/g, " "); }; var readFile = exports.readFile = function (filename) { @@ -36,8 +36,18 @@ exports.get = function (entryName) { var suiteOptsLoc = suite.filename + "/options.json"; if (fs.existsSync(suiteOptsLoc)) suite.options = require(suiteOptsLoc); - _.each(fs.readdirSync(suite.filename), function (taskName) { - var taskDir = suite.filename + "/" + taskName; + if (fs.statSync(suite.filename).isFile()) { + push(suiteName, suite.filename); + } else { + _.each(fs.readdirSync(suite.filename), function (taskName) { + var taskDir = suite.filename + "/" + taskName; + push(taskName, taskDir); + }); + } + + function push(taskName, taskDir) { + // tracuer error tests + if (taskName.indexOf("Error_") === 0) return; var actualLocAlias = suiteName + "/" + taskName + "/actual.js"; var expectLocAlias = suiteName + "/" + taskName + "/expected.js"; @@ -49,7 +59,7 @@ exports.get = function (entryName) { if (fs.statSync(taskDir).isFile()) { var ext = path.extname(taskDir); - if (ext !== ".js") return; + if (ext !== ".js" && ext !== ".module.js") return; execLoc = taskDir; } @@ -84,6 +94,18 @@ exports.get = function (entryName) { } }; + // traceur checks + + var shouldSkip = function (code) { + return code.indexOf("// Error:") === 0 || code.indexOf("// Skip.") === 0; + }; + + if (shouldSkip(test.actual.code) || shouldSkip(test.exec.code)) { + return; + } else if (test.exec.code.indexOf("// Async.")) { + //test.options.asyncExec = true; + } + suite.tests.push(test); var sourceMappingsLoc = taskDir + "/source-mappings.json"; @@ -97,7 +119,7 @@ exports.get = function (entryName) { test.options.sourceMap = true; test.sourceMap = require(sourceMap); } - }); + } }); return exports.cache[entryName] = suites; diff --git a/test/_transformation-helper.js b/test/_transformation-helper.js new file mode 100644 index 0000000000..2cb148e236 --- /dev/null +++ b/test/_transformation-helper.js @@ -0,0 +1,123 @@ +var genHelpers = require("./_generator-helpers"); +var transform = require("../lib/6to5/transformation/transform"); +var sourceMap = require("source-map"); +var Module = require("module"); +var helper = require("./_helper"); +var assert = require("assert"); +var chai = require("chai"); +var path = require("path"); +var util = require("../lib/6to5/util"); +var _ = require("lodash"); + +require("../lib/6to5/polyfill"); + +global.assertNoOwnProperties = function (obj) { + assert.equal(Object.getOwnPropertyNames(obj).length, 0); +}; + +global.assertArrayEquals = assert.deepEqual; +global.assert = chai.assert; +global.chai = chai; +global.genHelpers = genHelpers; + +var run = function (task, done) { + var actual = task.actual; + var expect = task.expect; + var exec = task.exec; + var opts = task.options; + + var getOpts = function (self) { + return _.merge({ + filename: self.loc + }, opts); + }; + + var execCode = exec.code; + var result; + + if (execCode) { + result = transform(execCode, getOpts(exec)); + execCode = result.code; + + try { + var requireRelative; + if (opts.emulateNodeModule) { + var mod = new Module(exec.loc); + requireRelative = function (loc) { + return mod.require(loc); + }; + } + + var fn = new Function("require", "done", execCode); + fn(requireRelative, chai.assert, done); + } catch (err) { + err.message = exec.loc + ": " + err.message; + err.message += util.codeFrame(execCode); + throw err; + } + } + + var actualCode = actual.code; + var expectCode = expect.code; + if (!execCode || actualCode) { + result = transform(actualCode, getOpts(actual)); + actualCode = result.code; + + chai.expect(actualCode).to.be.equal(expectCode, actual.loc + " !== " + expect.loc); + } + + if (task.sourceMap) { + chai.expect(result.map).to.deep.equal(task.sourceMap); + } + + if (task.sourceMappings) { + var consumer = new sourceMap.SourceMapConsumer(result.map); + + _.each(task.sourceMappings, function (mapping, i) { + var expect = mapping.original; + + var actual = consumer.originalPositionFor(mapping.generated); + chai.expect({ line: actual.line, column: actual.column }).to.deep.equal(expect); + }); + } +}; + +module.exports = function (name, opts) { + _.each(helper.get(name), function (testSuite) { + suite(name + "/" + testSuite.title, function () { + _.each(testSuite.tests, function (task) { + var runTest = function (done) { + var runTask = function () { + run(task, done); + }; + + _.defaults(task.options, opts); + + var throwMsg = task.options.throws; + if (throwMsg) { + // internal api doesn't have this option but it's best not to pollute + // the options object with useless options + delete task.options.throws; + + assert.throws(runTask, function (err) { + return err.message.indexOf(throwMsg) >= 0; + }); + } else { + runTask(); + } + }; + + var callback; + if (task.options.asyncExec) { + callback = runTest; + } else { + callback = function () { + return runTest(); + }; + } + + test(task.title, !task.disabled && callback); + }); + }); + }); +}; diff --git a/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js b/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js new file mode 100644 index 0000000000..531f540a16 --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js @@ -0,0 +1,12 @@ +// Options: --array-comprehension +// https://github.com/google/traceur-compiler/issues/1086 + +function f() { + var a = [for (x of [1]) arguments[0]]; + var b = [for (x of [1]) arguments[0]]; + assert.deepEqual(a, [arguments[0]]); + assert.deepEqual(a, [42]); + assert.deepEqual(a, b); +} + +f(42); diff --git a/test/fixtures/traceur/ArrayComprehension/Closure.js b/test/fixtures/traceur/ArrayComprehension/Closure.js new file mode 100644 index 0000000000..ed29b0b1fe --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/Closure.js @@ -0,0 +1,11 @@ +// Options: --array-comprehension --block-binding +// Block binding is needed to get the right scoping semantics inside the arrow +// function in the comprehension. + +var res = [for (x of [0, 1]) for (y of [2, 3]) () => [x, y]]; + +assert.equal(4, res.length); +assertArrayEquals([0, 2], res[0]()); +assertArrayEquals([0, 3], res[1]()); +assertArrayEquals([1, 2], res[2]()); +assertArrayEquals([1, 3], res[3]()); diff --git a/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js b/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js new file mode 100644 index 0000000000..786567f5b6 --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --array-comprehension=false +// Error: :4:14: Unexpected token for + +var array = [for (x of [0, 1, 2, 3, 4]) x]; diff --git a/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js b/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js new file mode 100644 index 0000000000..ab0f5f9872 --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js @@ -0,0 +1,5 @@ +// Options: --array-comprehension --free-variable-checker +// Error: :5:1: notDefined is not defined + +var array = [for (notDefined of [0]) notDefined]; +notDefined; diff --git a/test/fixtures/traceur/ArrayComprehension/Simple.js b/test/fixtures/traceur/ArrayComprehension/Simple.js new file mode 100644 index 0000000000..92fcdf0ab3 --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/Simple.js @@ -0,0 +1,32 @@ +// Options: --array-comprehension + +function* range() { + for (var i = 0; i < 5; i++) { + yield i; + } +} + +var array = [for (x of [0, 1, 2, 3]) x]; +assertArrayEquals([0, 1, 2, 3], array); + +var array2 = [for (x of [0, 1, 2]) for (y of [0, 1, 2]) x + '' + y]; +assertArrayEquals(['00', '01', '02', '10', '11', '12', '20', '21', '22'], + array2); + +var array3 = [ + for (x of [0, 1, 2, 3, 4]) + for (y of range()) + if (x === y) + x + '' + y]; +assertArrayEquals(['00', '11', '22', '33', '44'], array3); + +// Ensure this works as expression statement +[for (testVar of []) testVar]; + +var array4 = [ + for (x of range()) + if (x % 2 === 0) + for (y of range()) + if (y % 2 === 1) + x + '' + y]; +assertArrayEquals(['01', '03', '21', '23', '41', '43'], array4); diff --git a/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js b/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js new file mode 100644 index 0000000000..d2ffba4c71 --- /dev/null +++ b/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js @@ -0,0 +1,14 @@ +// Options: --array-comprehension +// https://github.com/google/traceur-compiler/issues/1086 + +var object = {}; + +function f() { + var a = [for (x of [1]) this]; + var b = [for (x of [1]) this]; + assert.deepEqual(a, [this]); + assert.deepEqual(a, [object]); + assert.deepEqual(a, b); +} + +f.call(object); diff --git a/test/fixtures/traceur/ArrayExtras/Fill.js b/test/fixtures/traceur/ArrayExtras/Fill.js new file mode 100644 index 0000000000..e90f7262e3 --- /dev/null +++ b/test/fixtures/traceur/ArrayExtras/Fill.js @@ -0,0 +1,47 @@ +// should have a length of 1 +assert.equal(Array.prototype.fill.length, 1); + +// should fill from basic case +assert.deepEqual([1, 2, 3].fill(5), [5, 5, 5]); + +// should fill from start +assert.deepEqual([1, 2, 3].fill(5, 1), [1, 5, 5]); + +// should fill from start to end +assert.deepEqual([1, 2, 3].fill(5, 1, 2), [1, 5, 3]); + +// should fill from negative start +assert.deepEqual([1, 2, 3].fill(5, -1), [1, 2, 5]); + +// should fill from negative start to positive end +assert.deepEqual([1, 2, 3].fill(5, -2, 3), [1, 5, 5]); + +// should fill from negative start to negative end +assert.deepEqual([1, 2, 3].fill(5, -3, -1), [5, 5, 3]); + +// should fill from positive start to negative end +assert.deepEqual([1, 2, 3].fill(5, 1, -1), [1, 5, 3]); + +// should fill custom object +assert.deepEqual(Array.prototype.fill.call({'0': 1, 'length': 3}, 5), {'0': 5, '1': 5, '2': 5, 'length': 3}); + +// should handle custom object with negative length +assert.deepEqual(Array.prototype.fill.call({'0': 2, 'length': -1}, 5), {'0': 2, 'length': -1}); + +// should handle no elements +assert.deepEqual([].fill(5), []); + +// should handle bad start +assert.deepEqual([1, 2, 3].fill(5, 'hello'), [5, 5, 5]); + +// should handle bad end +assert.deepEqual([1, 2, 3].fill(5, 1, {}), [1, 2, 3]); + +// should handle bad start and end +assert.deepEqual([1, 2, 3].fill(5, 'hello', {}), [1, 2, 3]); + + +// should handle bad this +assert.throws(function() { + Array.prototype.fill.call(null, 5) +}, TypeError); diff --git a/test/fixtures/traceur/ArrayExtras/Find.js b/test/fixtures/traceur/ArrayExtras/Find.js new file mode 100644 index 0000000000..123da41810 --- /dev/null +++ b/test/fixtures/traceur/ArrayExtras/Find.js @@ -0,0 +1,88 @@ +// should have a length of 1 +assert.equal(Array.prototype.find.length, 1); + +// should handle basic case +assert.equal([1, 2, 3].find(function(v) { + return v * v === 4; +}), 2); + +// should handle arrow functions +assert.equal([1, 2, 3].find(v => v * v === 4), 2); + +// should return undefined when not found +assert.equal([1, 2, 3].find(v => v > 10), undefined); + +// should return first match +assert.equal([2, 2, 3].find(v => v * v === 4), 2); + +// should handle custom objects +assert.equal(Array.prototype.find.call({ + 'length': 2, + '0': false, + '1': true +}, v => v), true); + +// should handle bad predicate +assert.throws(function() { + [1, 2, 3].find(1) +}, TypeError); + +// should handle bad this +assert.throws(function() { + Array.prototype.find.call(null, function() {}) +}, TypeError); + +// should correctly handle this +var global = this; +({ + assert: function() { + var self = this; + + // should be global this + [1, 2, 3].find(function() { + assert.notEqual(this, self); + assert.equal(this, global); + }); + + // should be the same this + [1, 2, 3].find(function() { + assert.equal(this, self); + }, self); + + // should not have an effect on arrow functions + [1, 2, 3].find(() => assert.equal(this, self)); + [1, 2, 3].find(() => assert.equal(this, self), self); + + // should call with correct args + var arr = [5]; + arr.find(function(value, i, object) { + assert.equal(value, 5); + assert.equal(i, 0); + assert.equal(arr, object); + }); + } +}).assert(); + +var lengthCalls = 0; +var itemCalls = 0; +var callbackCalls = 0; +var object = { + length: { + valueOf() { + lengthCalls++; + return 3; + } + }, + get 2() { + itemCalls++; + return 'a'; + } +}; + +assert.equal(Array.prototype.find.call(object, (v) => { + callbackCalls++; + return v === 'a'; +}), 'a'); +assert.equal(lengthCalls, 1); +assert.equal(itemCalls, 1); +assert.equal(callbackCalls, 3); diff --git a/test/fixtures/traceur/ArrayExtras/FindIndex.js b/test/fixtures/traceur/ArrayExtras/FindIndex.js new file mode 100644 index 0000000000..f572f7b1e9 --- /dev/null +++ b/test/fixtures/traceur/ArrayExtras/FindIndex.js @@ -0,0 +1,47 @@ +// should have a length of 1 +assert.equal(Array.prototype.findIndex.length, 1); + +// should handle basic case +assert.equal([1, 2, 3].findIndex(function(v) { + return v * v === 4; +}), 1); + +// should handle arrow functions +assert.equal([1, 2, 3].findIndex(v => v * v === 4), 1); + +// should return -1 when not found +assert.equal([1, 2, 3].findIndex(v => v > 10), -1); + +// should return first match +assert.equal([2, 2, 3].findIndex(v => v * v === 4), 0); + +// should handle custom objects +assert.equal(Array.prototype.findIndex.call({ + 'length': 2, + '0': false, + '1': true +}, v => v), 1); + +var lengthCalls = 0; +var itemCalls = 0; +var callbackCalls = 0; +var object = { + length: { + valueOf() { + lengthCalls++; + return 3; + } + }, + get 2() { + itemCalls++; + return 'a'; + } +}; + +assert.equal(Array.prototype.findIndex.call(object, (v) => { + callbackCalls++; + return v === 'a'; +}), 2); +assert.equal(lengthCalls, 1); +assert.equal(itemCalls, 1); +assert.equal(callbackCalls, 3); diff --git a/test/fixtures/traceur/ArrayExtras/From.js b/test/fixtures/traceur/ArrayExtras/From.js new file mode 100644 index 0000000000..553b20186c --- /dev/null +++ b/test/fixtures/traceur/ArrayExtras/From.js @@ -0,0 +1,155 @@ +// should have a length of 1 +//assert.equal(Array.from.length, 1); +var arr; +var obj; + +// should make an array from arguments +function arrayFromArgs() { + return Array.from(arguments); +} +arr = arrayFromArgs('a', 1); + +assert.equal(arr.length, 2); +assert.deepEqual(arr, ['a', 1]); +assert.isTrue(Array.isArray(arr)); + +// should handle undefined values +var arrayLike = {0: 'a', 2: 'c', length: 3}; +arr = Array.from(arrayLike); + +assert.equal(arr.length, 3); +assert.deepEqual(arr, ['a', undefined, 'c']); +assert.isTrue(Array.isArray(arr)); + +// should use a mapFn +arr = Array.from([{'a': 1}, {'a': 2}], function(item, i) { + return item.a + i; +}); + +assert.deepEqual(arr, [1, 3]); + +// should set this in mapFn +var thisObj = {a: 10}; +arr = Array.from([{'a': 1}, {'a': 2}], function(item, i) { + return this.a + item.a + i; +}, thisObj); + +assert.deepEqual(arr, [11, 13]); + +// should map on array-like object +arr = Array.from({0: {'a': 5}, length: 1}, function(item, i) { + return item.a + i; +}); + +assert.deepEqual(arr, [5]); + +// should throw on bad map fn +assert.throws(function() { + Array.from([], null) +}, TypeError); + +// should make from an array-like object +var arrayLikeObj = function(len) { + this.length = len; +}; +arrayLikeObj.from = Array.from; +obj = arrayLikeObj.from(['a', 'b', 'c']); + +assert.equal(obj.length, 3); +assert.deepEqual(obj, {0: 'a', 1: 'b', 2: 'c', length: 3}); + +// should make from a non-array iterable +var calledIterator = 0; +var Iterable = function(len) { + var self = this; + + self.length = len; + self[Symbol.iterator] = function*() { + for (var i = 0; i < self.length; i++) { + calledIterator++; + yield self[i]; + } + }; +}; +var it = new Iterable(3); +it[0] = 'a'; +it[1] = 'b'; +it[2] = 'c'; +obj = Array.from(it); + +assert.equal(obj.length, 3); +assert.equal(obj[0], 'a'); +assert.equal(obj[1], 'b'); +assert.equal(obj[2], 'c'); +assert.equal(calledIterator, 3); + +// should make from a sub-classed array +var length = 0; +var constructorCounter = 0; +var lengthSetCounter = 0; +var lengthGetCounter = 0; + +class MyArray extends Array { + constructor(v) { + constructorCounter++; + assert.isUndefined(v); + } + + set length(v) { + lengthSetCounter++; + length = v; + } + + get length() { + lengthGetCounter++; + return length; + } +} + +var ma = MyArray.from(['a', 'b']); +assert.instanceOf(ma, MyArray); +assert.equal(constructorCounter, 1); +assert.equal(lengthSetCounter, 1); +assert.equal(lengthGetCounter, 0); +assert.isTrue(ma.hasOwnProperty('0')); +assert.isTrue(ma.hasOwnProperty('1')); +assert.isFalse(ma.hasOwnProperty('length')); +assert.equal(ma[0], 'a'); +assert.equal(ma[1], 'b'); +assert.equal(ma.length, 2); + +// should make from a sub-classed array without iterable +length = 0; +constructorCounter = 0; +lengthSetCounter = 0; +lengthGetCounter = 0; + +class MyArray2 extends MyArray { + constructor(v) { + constructorCounter++; + assert.equal(v, 2); + } +}; +MyArray2.prototype[Symbol.iterator] = undefined; + +class MyArray3 extends Array { + constructor(v) { + this.length = v; + } +} +MyArray3.prototype[Symbol.iterator] = undefined; + +var ma3 = new MyArray3(2); +ma3[0] = 'a'; +ma3[1] = 'b'; +ma = MyArray2.from(ma3); +assert.instanceOf(ma, MyArray2); +assert.equal(constructorCounter, 1); +assert.equal(lengthSetCounter, 1); +assert.equal(lengthGetCounter, 0); +assert.isTrue(ma.hasOwnProperty('0')); +assert.isTrue(ma.hasOwnProperty('1')); +assert.isFalse(ma.hasOwnProperty('length')); +assert.equal(ma[0], 'a'); +assert.equal(ma[1], 'b'); +assert.equal(ma.length, 2); diff --git a/test/fixtures/traceur/ArrayExtras/Of.js b/test/fixtures/traceur/ArrayExtras/Of.js new file mode 100644 index 0000000000..0616705b43 --- /dev/null +++ b/test/fixtures/traceur/ArrayExtras/Of.js @@ -0,0 +1,37 @@ +var arr; + +// should have a length of 0 +assert.equal(Array.of.length, 0); + +//should return an array from arguments +arr = Array.of(1, 'a', 3); +assert.deepEqual(arr, [1, 'a', 3]); +assert.isTrue(arr instanceof Array); + +//should work with no arguments +arr = Array.of(); +assert.deepEqual(arr, []); +assert.isTrue(arr instanceof Array); + +//should work with sub-classed array +class MyArray extends Array {} + +arr = MyArray.of(4, 'b'); +assert.equal(arr[0], 4); +assert.equal(arr[1], 'b'); +assert.equal(arr.length, 2); +assert.isTrue(arr instanceof MyArray); + +//should call with exotic array +class ExoticArray { + constructor(len) { + this.length = len; + } +} +arr = Array.of.call(ExoticArray, 5, 'c', 6, 'd'); +assert.equal(arr[0], 5); +assert.equal(arr[1], 'c'); +assert.equal(arr[2], 6); +assert.equal(arr[3], 'd'); +assert.equal(arr.length, 4); +assert.isTrue(arr instanceof ExoticArray); diff --git a/test/fixtures/traceur/ArrayIterator.js b/test/fixtures/traceur/ArrayIterator.js new file mode 100644 index 0000000000..489db71999 --- /dev/null +++ b/test/fixtures/traceur/ArrayIterator.js @@ -0,0 +1,27 @@ +var a = ['a', 'b', 'c']; + +var res = []; +for (var x of a) { + res.push(x); +} +assert.deepEqual(res, ['a', 'b', 'c']); + +//assert.equal(a[Symbol.iterator], a.values); + +res = []; +for (var x of a.values()) { + res.push(x); +} +assert.deepEqual(res, ['a', 'b', 'c']); + +res = []; +for (var x of a.keys()) { + res.push(x); +} +assert.deepEqual(res, [0, 1, 2]); + +res = []; +for (var x of a.entries()) { + res.push(x); +} +assert.deepEqual(res, [[0, 'a'], [1, 'b'], [2, 'c']]); diff --git a/test/fixtures/traceur/ArrowFunctions/AlphaRename.js b/test/fixtures/traceur/ArrowFunctions/AlphaRename.js new file mode 100644 index 0000000000..1c181f684e --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/AlphaRename.js @@ -0,0 +1,22 @@ +var global = this; +var self = {}; + +function outer() { + var f = () => { + assert.equal(this, self); + + var g = () => { + assert.equal(this, self); + }; + g(); + + var h = function() { + assert.equal(this, global); + }; + h(); + }; + + f(); +} + +outer.call(self); diff --git a/test/fixtures/traceur/ArrowFunctions/Arguments.js b/test/fixtures/traceur/ArrowFunctions/Arguments.js new file mode 100644 index 0000000000..ad94aa2b4f --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Arguments.js @@ -0,0 +1,6 @@ +function f() { + var args = (() => arguments)(); + assert.equal(args, arguments); +} + +f(); diff --git a/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js b/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js new file mode 100644 index 0000000000..2aa3255ccd --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js @@ -0,0 +1,52 @@ +// Options: --block-binding + +// These tests are from: +// http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax + +let empty = () => undefined; +assert.equal(empty(), undefined); + +// Expression bodies needs no parentheses or braces +let identity = (x) => x; +assert.equal(identity(empty), empty); + +// Object literals needs to be wrapped in parens. +let keyMaker = (val) => ({key: val}); +assert.equal(keyMaker(empty).key, empty); + +// => { starts a block. +let emptyBlock = () => {a: 42}; +assert.equal(emptyBlock(), undefined); + +// Nullary arrow function starts with arrow (cannot begin statement) +const preamble = 'hello'; +const body = 'world'; +let nullary = () => preamble + ': ' + body; +assert.equal('hello: world', nullary()); + +// No need for parens even for lower-precedence expression body +let square = x => x * x; +assert.equal(81, square(9)); + +let oddArray = []; +let array = [2, 3, 4, 5, 6, 7]; +array.forEach((v, i) => { if (i & 1) oddArray[i >>> 1] = v; }); +assert.equal('3,5,7', oddArray.toString()); + +var f = (x = 42) => x; +assert.equal(42, f()); + +{ + let g = (...xs) => xs; + assertArrayEquals([0, 1, true], g(0, 1, true)); +} + +var h = (x, ...xs) => xs; +assertArrayEquals([0, 1, true], h(-1, 0, 1, true)); + +assert.equal(typeof (() => {}), 'function'); +assert.equal(Object.getPrototypeOf(() => {}), Function.prototype); + +var i = ({a = 1}) => a; +assert.equal(i({}), 1); +assert.equal(i({a: 2}), 2); diff --git a/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js b/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js new file mode 100644 index 0000000000..f461959aaa --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js @@ -0,0 +1,5 @@ +// https://github.com/google/traceur-compiler/issues/478 + +function f() { + (1 ? ({a=0}) => {} : 1); +} diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js new file mode 100644 index 0000000000..b342823845 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js @@ -0,0 +1,5 @@ +// Error: :4:16: Unexpected token = + +function f() { + ({a = (0, {a = 0})} = {}) +} diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js new file mode 100644 index 0000000000..6252ef4fcc --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js @@ -0,0 +1,3 @@ +// Error: :3:5: Unexpected token = + +({a = 0}); diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js new file mode 100644 index 0000000000..a5d260c392 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js @@ -0,0 +1,3 @@ +// Error: :3:18: Unexpected token = + +var f = ({x = {y = 1}) => 2; \ No newline at end of file diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js b/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js new file mode 100644 index 0000000000..a0c05a6f30 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --arrow-functions=false +// Error: :4:21: Unexpected token > + +var identity = (x) => x; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js b/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js new file mode 100644 index 0000000000..4db02378a2 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js @@ -0,0 +1,3 @@ +// Options: --arrow-functions --free-variable-checker +// Error: :3:35: missingIdentifier is not defined +var identity = (identityParam) => missingIdentifier; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js b/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js new file mode 100644 index 0000000000..b0b6078c15 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js @@ -0,0 +1,3 @@ +// Error: :3:15: Unexpected token + + +var f = (a, b + 5) => a + b; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js new file mode 100644 index 0000000000..932532c4b3 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js @@ -0,0 +1,3 @@ +// Error: :3:26: Semi-colon expected + +var identity = (x) => {x}.bind({}); diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js new file mode 100644 index 0000000000..b064f6d29d --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js @@ -0,0 +1,4 @@ +// Error: :4:11: Semi-colon expected +// Error: :4:11: Unexpected token => + +(x) + (y) => y; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js new file mode 100644 index 0000000000..c3e1bb2b8c --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js @@ -0,0 +1,4 @@ +// Error: :4:9: Semi-colon expected +// Error: :4:9: Unexpected token => + +(x) + y => y; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js b/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js new file mode 100644 index 0000000000..7276b3b180 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js @@ -0,0 +1,6 @@ +// Error: :5:17: Unexpected token , +// Error: :5:12: Unexpected token ... + +{ + let f = (...xs, x) => xs; +} \ No newline at end of file diff --git a/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js b/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js new file mode 100644 index 0000000000..7884adf087 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js @@ -0,0 +1,3 @@ +// Error: :3:13: Unexpected token ... + +var f = (x, ...xs); diff --git a/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js b/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js new file mode 100644 index 0000000000..d3681bd6b9 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js @@ -0,0 +1,2 @@ +var identity = (identityParam) => identityParam; +assert.equal(1234, identity(1234)); diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js b/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js new file mode 100644 index 0000000000..de7f381055 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js @@ -0,0 +1,39 @@ +// Skip. Not implemented. + +// TODO: needs # prefix implemented for freezing +// Use # to freeze and join to nearest relevant closure +function return_pure() { + return #(a) -> a * a; +} + +let p = return_pure(), + q = return_pure(); +assert(p === q); + +function check_frozen(o) { + try { + o.x = "expando"; + assert(! "reached"); + } catch (e) { + // e is something like "TypeError: o is not extensible" + assert(e.name == "TypeError"); + } +} + +check_frozen(p); + +function partial_mul(a) { + return #(b) -> a * b; +} + +let x = partial_mul(3), + y = partial_mul(4), + z = partial_mul(3); + +assert(x !== y); +assert(x !== z); +assert(y !== z); + +check_frozen(x); +check_frozen(y); +check_frozen(z); diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js b/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js new file mode 100644 index 0000000000..27548d0d58 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js @@ -0,0 +1,19 @@ +// Skip. Not implemented. + +// TODO: needs the intializer shorthand implemented for arrow functions + +// Object intializer shorthand: "method" = function-valued property with dynamic ''this'' +const obj = { + method() -> { + return => this; + } +}; + +assert(obj.method() === obj); +assert(obj.method.call(u) === u); + +// Name binding forms hoist to body (var) or block (let, const) top +var warmer(a) -> { return a; }; +let warm(b) -> { return b; }; +const colder(c) -> { return c; }; +const #coldest(d) -> {...}; diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js b/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js new file mode 100644 index 0000000000..0ef4fd6835 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js @@ -0,0 +1,14 @@ +// Skip. Not implemented. + +// TODO: needs soft bind and ??= implemented + +// A special form based on the default operator proposal +const self_default_bound = (this ??= self, a, b) -> { + this.c = a * b; +} +self_default_bound(6, 7); +assert(self.c === 42); + +self_default_bound.call(other, 8, 9); +assert(other.c === 72); +assert(self.c === 42); diff --git a/test/fixtures/traceur/ArrowFunctions/ThisBindings.js b/test/fixtures/traceur/ArrowFunctions/ThisBindings.js new file mode 100644 index 0000000000..c3aee86629 --- /dev/null +++ b/test/fixtures/traceur/ArrowFunctions/ThisBindings.js @@ -0,0 +1,18 @@ +// Options: --block-binding + +// These tests are from: +// http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax + +const obj = { + method: function () { + return () => this; + } +}; +assert.equal(obj.method()(), obj); + +let fake = {steal: obj.method()}; +assert.equal(fake.steal(), obj); + +let real = {borrow: obj.method}; +assert.equal(real.borrow()(), real); + diff --git a/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js b/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js new file mode 100644 index 0000000000..6525b1cc98 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js @@ -0,0 +1,21 @@ +// Options: --async-functions +// Async. + +function asyncComplete(self, arg) { + return new Promise((resolve) => { + resolve([self, arg]); + }); +} + +var self = {}; +var obj = {}; +var value; + +async function A() { + assert.equal(this, self); + var value = await asyncComplete(this, arguments[0]); + assert.deepEqual([self, obj], value); + done(); +} + +A.call(self, obj); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js new file mode 100644 index 0000000000..c02247d217 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js @@ -0,0 +1,9 @@ +// Options: --async-functions +// Async. + +var f = async () => 1; + +f().then((result) => { + assert.equal(result, 1); + done(); +}).catch(done); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js new file mode 100644 index 0000000000..42e3f472b4 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js @@ -0,0 +1,16 @@ +// Options: --async-functions +// Async. + +function g() { + var f = async (x = arguments) => [x, arguments]; + + f().then((result) => { + assert.equal(result[0][0], 1); + assert.equal(result[1][0], 1); + assert.equal(result[0][1], 2); + assert.equal(result[1][1], 2); + done(); + }).catch(done); +} + +g(1, 2); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js new file mode 100644 index 0000000000..d4d0f64028 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js @@ -0,0 +1,15 @@ +// Options: --async-functions +// Async. + +function g() { + var f = async (x = this) => [x, this]; + var p = {}; + f.call(p).then((result) => { + assert.equal(result[0], o); + assert.equal(result[1], o); + done(); + }).catch(done); +} + +var o = {}; +g.call(o); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js b/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js new file mode 100644 index 0000000000..4c9444da90 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js @@ -0,0 +1,31 @@ +// Options: --async-functions +// Async. + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +class C { + async test() { + var x = 0; + await asyncTimeout(1); + assert.equal(1, ++x); + await asyncTimeout(1); + assert.equal(2, ++x); + C.test(); + } + + static async test() { + var x = 0; + await asyncTimeout(1); + assert.equal(1, ++x); + await asyncTimeout(1); + assert.equal(2, ++x); + + done(); + } +} + +new C().test(); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js b/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js new file mode 100644 index 0000000000..7020a6978d --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js @@ -0,0 +1,21 @@ +// Options: --async-functions +// Async. + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +var object = { + async test() { + var x = 0; + await asyncTimeout(1); + assert.equal(1, ++x); + await asyncTimeout(1); + assert.equal(2, ++x); + done(); + } +} + +object.test(); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js b/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js new file mode 100644 index 0000000000..75be014bc0 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js @@ -0,0 +1,18 @@ +// Options: --async-functions + +var async; +async +function f() { + return async + async; +} + +async = 1; +assert.equal(async, 1); +assert.equal(f(), 2); + +async = async +function g() { + +} + +assert.equal(async, 1); diff --git a/test/fixtures/traceur/AsyncFunctions/Basics.js b/test/fixtures/traceur/AsyncFunctions/Basics.js new file mode 100644 index 0000000000..9592812858 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Basics.js @@ -0,0 +1,46 @@ +// Options: --async-functions --generators=false +// Async. +// +// The --generators=false part is to test #1231 + +var f = (x, y) => ({x, y}); + +(async function() { + var x = await 1; + assert.equal(1, x); + x = await (await 2); + assert.equal(2, x); + x = (await 3, await 4); + assert.equal(4, x); + + x = f(await 5, await 6); + assert.deepEqual({x: 5, y: 6}, x); + x = await f(await 7, await 8); + assert.deepEqual({x: 7, y: 8}, x); + + if (await true) { + x = 9; + } else { + x = 10; + } + assert.equal(9, x); + if (await false) { + x = 11; + } else { + x = 12; + } + assert.equal(12, x); + + var j = 0; + for (var i = await 0; (await i) < (await 3); await i++) { + assert.equal(i, j++); + } + assert.equal(3, j); + + var g = (x) => x; + var h = () => 13; + x = await g({z: await h()}); + assert.deepEqual({z: 13}, x); + + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Complete.js b/test/fixtures/traceur/AsyncFunctions/Complete.js new file mode 100644 index 0000000000..948e11142a --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Complete.js @@ -0,0 +1,16 @@ +// Options: --async-functions +// Async. + +function asyncComplete() { + return new Promise((resolve) => { + resolve('complete'); + }); +} + +// ---------------------------------------------------------------------------- + +(async function() { + var value = await asyncComplete(); + assert.equal('complete', value); + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Empty.js b/test/fixtures/traceur/AsyncFunctions/Empty.js new file mode 100644 index 0000000000..4cd44b74c9 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Empty.js @@ -0,0 +1,10 @@ +// Options: --async-functions +// Async. + +async function empty() { +} + +empty().then((v) => { + assert.isUndefined(v); + done(); +}); \ No newline at end of file diff --git a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js new file mode 100644 index 0000000000..3973c62fc5 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js @@ -0,0 +1,7 @@ +// Options: --async-functions +// Error: :7:5: Semi-colon expected +// Error: :7:5: Unexpected token => + +var async = () => 1; +var x = async +(y) => y; diff --git a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js new file mode 100644 index 0000000000..b48847aa1d --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js @@ -0,0 +1,6 @@ +// Options: --async-functions +// Error: :6:1: Unexpected token => + +var async = () => 1; +var x = async (y) +=> y; diff --git a/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js b/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js new file mode 100644 index 0000000000..ccfde7dd72 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js @@ -0,0 +1,15 @@ +// Disabled by default. +// Error: :13:21: Semi-colon expected + +function asyncComplete() { + return new Promise((resolve) => { + resolve('complete'); + }); +} + +// ---------------------------------------------------------------------------- + +(async function() { + var value = async asyncComplete(); + assert.equal('complete', value); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Export.module.js b/test/fixtures/traceur/AsyncFunctions/Export.module.js new file mode 100644 index 0000000000..cd23d5a62b --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Export.module.js @@ -0,0 +1,18 @@ +// Options: --async-functions +// Async. + +import {asyncFunction} from './resources/async-function.js'; +import asyncFunctionDefault from './resources/async-function.js'; + +assert.instanceOf(asyncFunction(), Promise); +assert.instanceOf(asyncFunctionDefault(), Promise); + +(async function() { + var x = await asyncFunction(); + assert.equal(x, 1); + + var y = await asyncFunctionDefault(); + assert.equal(y, 2); + + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Finally.js b/test/fixtures/traceur/AsyncFunctions/Finally.js new file mode 100644 index 0000000000..4e9f603625 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Finally.js @@ -0,0 +1,25 @@ +// Options: --async-functions +// Async. + +var finallyVisited = false; + +var resolve; +var p = new Promise((r) => { + resolve = r; +}); +var v; + +async function test() { + try { + v = await p; + } finally { + finallyVisited = true; + } + assert.equal(42, v); + assert.isTrue(finallyVisited); + done(); +} + +test(); +assert.isFalse(finallyVisited); +resolve(42); diff --git a/test/fixtures/traceur/AsyncFunctions/Finally2.js b/test/fixtures/traceur/AsyncFunctions/Finally2.js new file mode 100644 index 0000000000..63cf8e1240 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Finally2.js @@ -0,0 +1,21 @@ +// Options: --async-functions +// Async. + +var finallyVisited = false; +var resolve; + +async function test() { + try { + await new Promise((r) => { + resolve = r; + }); + } finally { + finallyVisited = true; + } + assert.isTrue(finallyVisited); + done(); +} + +test(); +assert.isFalse(finallyVisited); +resolve(); diff --git a/test/fixtures/traceur/AsyncFunctions/PromiseCast.js b/test/fixtures/traceur/AsyncFunctions/PromiseCast.js new file mode 100644 index 0000000000..aabac1d0bb --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/PromiseCast.js @@ -0,0 +1,12 @@ +// Options: --async-functions +// Async. + +async function f() { + var x = await 1; + assert.equal(x, 1); + x = await undefined; + assert.equal(x, undefined); + done(); +} + +f(); diff --git a/test/fixtures/traceur/AsyncFunctions/Prototype.js b/test/fixtures/traceur/AsyncFunctions/Prototype.js new file mode 100644 index 0000000000..cbdc07aeaa --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Prototype.js @@ -0,0 +1,7 @@ +// Options: --async-functions + +async function f() { +} + +assert.equal(Object.getPrototypeOf(f), Function.prototype); +assert.instanceOf(f(), Promise); diff --git a/test/fixtures/traceur/AsyncFunctions/Rethrow.js b/test/fixtures/traceur/AsyncFunctions/Rethrow.js new file mode 100644 index 0000000000..253b9ddfdf --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Rethrow.js @@ -0,0 +1,13 @@ +// Options: --async-functions +// Async. + +async function rethrow(x) { + 1; + throw x; + 2; +} + +rethrow(2).catch((err) => { + assert.equal(err, 2) + done(); +}); diff --git a/test/fixtures/traceur/AsyncFunctions/Return.js b/test/fixtures/traceur/AsyncFunctions/Return.js new file mode 100644 index 0000000000..fa98200106 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Return.js @@ -0,0 +1,16 @@ +// Options: --async-functions +// Async. + +async function ret(x) { + if (x > 1) + return x - 2; + return x + 3; +} + +(async function() { + var v = await ret(4); + assert.equal(v, 2); + v = await ret(0); + assert.equal(v, 3); + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Throw.js b/test/fixtures/traceur/AsyncFunctions/Throw.js new file mode 100644 index 0000000000..452312fae9 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Throw.js @@ -0,0 +1,30 @@ +// Options: --async-functions +// Async. + +async function asyncThrow(e) { + if (true) + throw e; + await asyncYield(); +} + +function asyncYield() { + return asyncTimeout(0); +} + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +(async function() { + var value; + try { + value = await asyncThrow(1); + fail("shouldn't get here"); + } catch (e) { + assert.equal(1, e); + } + + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Timeout.js b/test/fixtures/traceur/AsyncFunctions/Timeout.js new file mode 100644 index 0000000000..a0803b1716 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Timeout.js @@ -0,0 +1,21 @@ +// Options: --async-functions +// Async. + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +(async function() { + var x = 0; + await asyncTimeout(1); + assert.equal(1, ++x); + await asyncTimeout(1); + assert.equal(2, ++x); + await asyncTimeout(1); + assert.equal(3, ++x); + await asyncTimeout(1); + assert.equal(4, ++x); + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Value.js b/test/fixtures/traceur/AsyncFunctions/Value.js new file mode 100644 index 0000000000..1a1aaf5f8c --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Value.js @@ -0,0 +1,24 @@ +// Options: --async-functions +// Async. + +async function asyncValue(value) { + if (true) + return value; + await asyncYield(); +} + +function asyncYield() { + return asyncTimeout(0); +} + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +(async function() { + var value = await asyncValue(42); + assert.equal(42, value); + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Yield.js b/test/fixtures/traceur/AsyncFunctions/Yield.js new file mode 100644 index 0000000000..dfb4bba86a --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/Yield.js @@ -0,0 +1,17 @@ +// Options: --async-functions +// Async. + +function asyncYield() { + return asyncTimeout(0); +} + +function asyncTimeout(ms) { + return new Promise((resolve) => { + setTimeout(resolve, ms); + }); +} + +(async function() { + await asyncYield(); + done(); +})(); diff --git a/test/fixtures/traceur/AsyncFunctions/resources/async-function.js b/test/fixtures/traceur/AsyncFunctions/resources/async-function.js new file mode 100644 index 0000000000..3431ca98d4 --- /dev/null +++ b/test/fixtures/traceur/AsyncFunctions/resources/async-function.js @@ -0,0 +1,7 @@ +export async function asyncFunction() { + return 1; +} + +export default async function() { + return 2; +}; diff --git a/test/fixtures/traceur/Classes/ClassMethodInheritance.js b/test/fixtures/traceur/Classes/ClassMethodInheritance.js new file mode 100644 index 0000000000..c957d1188e --- /dev/null +++ b/test/fixtures/traceur/Classes/ClassMethodInheritance.js @@ -0,0 +1,23 @@ +function B() {} +B.b = function() { + return 'B.b'; +}; + +class C extends B {} + +assert.equal(Object.getPrototypeOf(C), B); +assert.equal(Object.getPrototypeOf(C.prototype), B.prototype); + +assert.equal(C.b(), 'B.b'); + +class D extends Object {} + +assert.equal(Object.getPrototypeOf(D), Object); +assert.equal(Object.getPrototypeOf(D.prototype), Object.prototype); +assert.equal(D.keys, Object.keys); + +class E {} + +assert.equal(Object.getPrototypeOf(E), Function.prototype); +assert.equal(Object.getPrototypeOf(E.prototype), Object.prototype); +assert.isFalse('keys' in E); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/ClassNameBinding.js b/test/fixtures/traceur/Classes/ClassNameBinding.js new file mode 100644 index 0000000000..de7df429f9 --- /dev/null +++ b/test/fixtures/traceur/Classes/ClassNameBinding.js @@ -0,0 +1,41 @@ + +var ClassExpr = class { + m() { + return ClassExpr; + } +} + +var TempClass = ClassExpr; +ClassExpr = 42; + +assert.equal(42, new TempClass().m()); +assert.equal(TempClass.name, ''); + +////////////////////////////////////////////////////////////////////////////// + +var ClassExpr2 = class ClassExprInner { + m() { + return ClassExprInner; + } +} + +TempClass = ClassExpr2; +ClassExpr2 = 42; + +assert.equal(TempClass, new TempClass().m()); +assert.equal(TempClass.name, 'ClassExprInner'); + +////////////////////////////////////////////////////////////////////////////// + +class ClassDef { + m() { + return ClassDef; + } +} + +var TempClass = ClassDef; +ClassDef = 42; + +assert.equal(TempClass, new TempClass().m()); +// IE does not have a name property on functions. +assert.isTrue(TempClass.name === 'ClassDef' || TempClass.name === undefined); diff --git a/test/fixtures/traceur/Classes/ClassNameInStack.js b/test/fixtures/traceur/Classes/ClassNameInStack.js new file mode 100644 index 0000000000..41d1fe4a3f --- /dev/null +++ b/test/fixtures/traceur/Classes/ClassNameInStack.js @@ -0,0 +1,29 @@ +class MyClassName { + m() { + throw new Error(); + } +} + +try { + new MyClassName().m(); + fail('Should have thrown'); +} catch (ex) { + if (ex.stack) + assert.isTrue(String(ex.stack).indexOf('MyClassName') >= 0); +} + +////////////////////////////////////////////////////////////////////////////// + +class MySecondClass extends MyClassName{ + m() { + throw new Error(); + } +} + +try { + new MySecondClass().m(); + fail('Should have thrown'); +} catch (ex) { + if (ex.stack) + assert.isTrue(String(ex.stack).indexOf('MySecondClass') >= 0); +} diff --git a/test/fixtures/traceur/Classes/Constructor.js b/test/fixtures/traceur/Classes/Constructor.js new file mode 100644 index 0000000000..ce76af6bef --- /dev/null +++ b/test/fixtures/traceur/Classes/Constructor.js @@ -0,0 +1,34 @@ +class Point { + constructor(x, y) { + this.x = x; + this.y = y; + } +} + +class A { + classRef() { + return A; + } +}; + +var p = new Point(1, 2); +assert.equal(1, p.x); +assert.equal(2, p.y); + +var p2 = new Point(3, 4); +assert.equal(3, p2.x); +assert.equal(4, p2.y); +assert.equal(1, p.x); +assert.equal(2, p.y); + +for (var element in Point) { + fail('Point contains static member : ' + element); +} + +// Tests to ensure that we're not binding function identifier per class +var a = new A(); +var tmpA = A; +A = 42; +assert.equal(tmpA, a.classRef()); +// IE does not have a name property on functions. +assert.isTrue(tmpA.name === 'A' || tmpA.name === undefined); diff --git a/test/fixtures/traceur/Classes/ConstructorChaining.js b/test/fixtures/traceur/Classes/ConstructorChaining.js new file mode 100644 index 0000000000..7d2a4bd936 --- /dev/null +++ b/test/fixtures/traceur/Classes/ConstructorChaining.js @@ -0,0 +1,22 @@ +class ConstructorA { + constructor(x) { + this.x = x; + } +} + +class ConstructorB extends ConstructorA { + constructor(x, y) { + super(x); + this.y = y; + } +} + +// ---------------------------------------------------------------------------- + +var a = new ConstructorA('ax'); +assert.equal('ax', a.x); +assert.isFalse(a.hasOwnProperty('y')); + +var b = new ConstructorB('bx', 'by'); +assert.equal('bx', b.x); +assert.equal('by', b.y); diff --git a/test/fixtures/traceur/Classes/ConstructorMember.js b/test/fixtures/traceur/Classes/ConstructorMember.js new file mode 100644 index 0000000000..ae0a2efbe4 --- /dev/null +++ b/test/fixtures/traceur/Classes/ConstructorMember.js @@ -0,0 +1,25 @@ +class ConstructorMember { + constructor() {} +} + +class DerivedConstructorMember extends ConstructorMember { + constructor() {} +} + +// ---------------------------------------------------------------------------- + +var cm = new ConstructorMember; +assert.equal(cm.constructor, ConstructorMember.prototype.constructor); +assert.isTrue(ConstructorMember.prototype.hasOwnProperty('constructor')); + +for (var key in ConstructorMember) { + assert.notEqual('constructor should not be enumerable', 'constructor', key); +} + +var dcm = new DerivedConstructorMember; +assert.equal(dcm.constructor, DerivedConstructorMember.prototype.constructor); +assert.isTrue(DerivedConstructorMember.prototype.hasOwnProperty('constructor')); + +for (var key in DerivedConstructorMember) { + assert.notEqual('constructor should not be enumerable', 'constructor', key); +} diff --git a/test/fixtures/traceur/Classes/DefaultConstructor.js b/test/fixtures/traceur/Classes/DefaultConstructor.js new file mode 100644 index 0000000000..057d30e24e --- /dev/null +++ b/test/fixtures/traceur/Classes/DefaultConstructor.js @@ -0,0 +1,31 @@ +class B { + constructor(x, y) { + this.x = x; + this.y = y; + } +} + +class C extends B { + // No constructor +} + +var c = new B(1, 2); +assert.equal(1, c.x); +assert.equal(2, c.y); + +assert.isFalse( + Object.getOwnPropertyDescriptor(B.prototype, 'constructor').enumerable); +assert.isFalse( + Object.getOwnPropertyDescriptor(C.prototype, 'constructor').enumerable); + +// Ensure that we don't try to call super() in the default constructor. +class D extends null {} +var d = new D(); + + +class E extends function(x) { + this.x = x; +} {} + +var e = new E(42) +assert.equal(42, e.x); diff --git a/test/fixtures/traceur/Classes/DeriveFromObject.js b/test/fixtures/traceur/Classes/DeriveFromObject.js new file mode 100644 index 0000000000..852ca2b0fc --- /dev/null +++ b/test/fixtures/traceur/Classes/DeriveFromObject.js @@ -0,0 +1,6 @@ +class DerivedFromObject extends Object { +} + +// ---------------------------------------------------------------------------- + +// TODO(rnystrom): No tests for this? diff --git a/test/fixtures/traceur/Classes/EmptyClass.js b/test/fixtures/traceur/Classes/EmptyClass.js new file mode 100644 index 0000000000..733584a99b --- /dev/null +++ b/test/fixtures/traceur/Classes/EmptyClass.js @@ -0,0 +1,29 @@ +class Empty {} + +class EmptyB extends Empty { +} + +// ---------------------------------------------------------------------------- + +var e = new Empty(); +assert.isNotNull(e); + +for (var element in e) { + assert.equal('constructor', element); +} + +for (var element in Empty) { + fail('Empty contains static member : ' + element); +} + +// Instances should be different. +var e2 = new Empty(); +assert.notEqual(e, e2); + +assert.isTrue(e instanceof Empty); +assert.isFalse(e instanceof EmptyB); + +var b = new EmptyB(); + +assert.isTrue(b instanceof Empty); +assert.isTrue(b instanceof EmptyB); diff --git a/test/fixtures/traceur/Classes/Error_Disabled.js b/test/fixtures/traceur/Classes/Error_Disabled.js new file mode 100644 index 0000000000..8735ad59c0 --- /dev/null +++ b/test/fixtures/traceur/Classes/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --classes=false +// Error: :4:1: Unexpected reserved word + +class C {} diff --git a/test/fixtures/traceur/Classes/Error_GH1556.js b/test/fixtures/traceur/Classes/Error_GH1556.js new file mode 100644 index 0000000000..88f0c96893 --- /dev/null +++ b/test/fixtures/traceur/Classes/Error_GH1556.js @@ -0,0 +1,5 @@ +// Error: :5:19: Unexpected token = + +// extends LeftHandSideExpression +// see https://github.com/google/traceur-compiler/issues/1556 +class A extends B = C {} diff --git a/test/fixtures/traceur/Classes/Error_Super.js b/test/fixtures/traceur/Classes/Error_Super.js new file mode 100644 index 0000000000..9855970fb1 --- /dev/null +++ b/test/fixtures/traceur/Classes/Error_Super.js @@ -0,0 +1,10 @@ +// Error: :7:17: Unexpected token ; + +class A {} + +class ImproperSuper extends A { + method() { + return super; + } +} + diff --git a/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js b/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js new file mode 100644 index 0000000000..f70856a0a1 --- /dev/null +++ b/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js @@ -0,0 +1,10 @@ +// Error: :7:18: Unexpected token no substitution template + +class A {} + +class ImproperSuper extends A { + method() { + return super ``; + } +} + diff --git a/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js b/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js new file mode 100644 index 0000000000..8093c9534a --- /dev/null +++ b/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js @@ -0,0 +1,11 @@ + +assert.throw(function() { + class C extends Math {} +}, 'Super expression must either be null or a function'); + +assert.throw(function() { + function f() {} + // prototype needs to be an Object or null. + f.prototype = 42; + class C extends f {} +}, 'super prototype must be an Object or null'); diff --git a/test/fixtures/traceur/Classes/ExtendObject.js b/test/fixtures/traceur/Classes/ExtendObject.js new file mode 100644 index 0000000000..e5b11ffe2d --- /dev/null +++ b/test/fixtures/traceur/Classes/ExtendObject.js @@ -0,0 +1,4 @@ +// Can no longer extend objects. +assert.throw(function() { + class C extends {} {} +}, TypeError); diff --git a/test/fixtures/traceur/Classes/ExtendStrange.js b/test/fixtures/traceur/Classes/ExtendStrange.js new file mode 100644 index 0000000000..3911d03ddb --- /dev/null +++ b/test/fixtures/traceur/Classes/ExtendStrange.js @@ -0,0 +1,54 @@ +class C extends null {} + +var c = new C; +assert.isTrue(c instanceof C); +assert.isFalse(c instanceof Object); + +// Closure testing framework tries to toString the object and fails. +assert.isTrue(Object.getPrototypeOf(c) === C.prototype); +assert.isTrue(Object.getPrototypeOf(Object.getPrototypeOf(c)) === null); + +assert.equal(c.toString, undefined); + +class D extends null { + constructor(...args) { + super(...args); + } +} + +// super() does not depend on the [HomeObject]. It just calls the [Prototype] +// of the function. +new D(); + +class E extends function() { return null }() { + constructor(...args) { + super(...args); + } +} + +// super() does not depend on the [HomeObject]. It just calls the [Prototype] +// of the function. +new E(); + +function f() {}; +f.prototype = null; + +class F extends f { + get x() { + return 1; + } +} + +assert.equal(1, new F().x); + + +function g() {} +function h() {} +g.prototype = h; +class G extends g { + get x() { + return 2; + } +} + +assert.equal(2, new G().x); diff --git a/test/fixtures/traceur/Classes/FieldInheritance.js b/test/fixtures/traceur/Classes/FieldInheritance.js new file mode 100644 index 0000000000..c9b863aaee --- /dev/null +++ b/test/fixtures/traceur/Classes/FieldInheritance.js @@ -0,0 +1,26 @@ +class Point2D { + constructor() { + this.x = 1; + this.y = 2; + } +} + +class Point3D extends Point2D { + constructor() { + super(); + this.z = 3; + } +} + +// ---------------------------------------------------------------------------- + +var a = new Point2D(); +assert.isTrue(a.hasOwnProperty('x')); +assert.isTrue(a.hasOwnProperty('y')); +assert.isFalse(a.hasOwnProperty('z')); +assert.isUndefined(a.z); + +var b = new Point3D(); +assert.isTrue(b.hasOwnProperty('x')); +assert.isTrue(b.hasOwnProperty('y')); +assert.isTrue(b.hasOwnProperty('z')); diff --git a/test/fixtures/traceur/Classes/FieldInitializers.js b/test/fixtures/traceur/Classes/FieldInitializers.js new file mode 100644 index 0000000000..dcd938fc00 --- /dev/null +++ b/test/fixtures/traceur/Classes/FieldInitializers.js @@ -0,0 +1,23 @@ +class Point { + constructor() { + this.x = 0; + this.y = 0; + } +} + +// ---------------------------------------------------------------------------- + +var p = new Point(); +assert.equal(0, p.x); +assert.equal(0, p.y); +p.x = 1; +assert.equal(1, p.x); + +var p2 = new Point(); +assert.equal(0, p2.x); +assert.equal(0, p2.y); +assert.equal(1, p.x); + +for (var element in Point) { + fail('Point contains static member : ' + element); +} diff --git a/test/fixtures/traceur/Classes/FieldLookup.js b/test/fixtures/traceur/Classes/FieldLookup.js new file mode 100644 index 0000000000..6afad51a9e --- /dev/null +++ b/test/fixtures/traceur/Classes/FieldLookup.js @@ -0,0 +1,47 @@ +// This requires manually constructed classes. + +function fieldLookupA() { } +fieldLookupA.prototype = { + foo : "A.value", + get bar() { + return "A.get.bar"; + }, + set bar(value) { }, + boo : "A.boo.value", + baz : undefined +} + +function fieldLookupB() { } +fieldLookupB.prototype = { + __proto__ : fieldLookupA.prototype, + get foo() { + return "B.get.foo"; + }, + set foo(value) { }, + bar: "B.value", + boo: undefined, + baz: "B.baz.value", +} + +class FieldLookupC extends fieldLookupB { + x() { + return super.foo; + } + y() { + return super.bar; + } + z() { + return super.boo; + } + w() { + return super.baz; + } +} + +// ---------------------------------------------------------------------------- + +var c = new FieldLookupC(); +assert.equal("B.get.foo", c.x()); +assert.equal("B.value", c.y()); +assert.isUndefined(c.z()); +assert.equal("B.baz.value", c.w()); diff --git a/test/fixtures/traceur/Classes/Fields.js b/test/fixtures/traceur/Classes/Fields.js new file mode 100644 index 0000000000..70848ed8fe --- /dev/null +++ b/test/fixtures/traceur/Classes/Fields.js @@ -0,0 +1,19 @@ +class Point { + constructor() { + this.x = 0; + this.y = 0; + } +} + +// ---------------------------------------------------------------------------- + +var p = new Point(); + +var keys = []; +for (var key in p) { + keys.push(key); +} + +assert.isTrue(keys.indexOf('x') !== -1); +assert.isTrue(keys.indexOf('y') !== -1); +assert.isTrue(keys.indexOf('constructor') === -1); diff --git a/test/fixtures/traceur/Classes/Getters.js b/test/fixtures/traceur/Classes/Getters.js new file mode 100644 index 0000000000..06bd252815 --- /dev/null +++ b/test/fixtures/traceur/Classes/Getters.js @@ -0,0 +1,20 @@ +class GetterA { + get x() { return 'getter x'; } + get y() { return 'getter y'; } +} + +class GetterB extends GetterA { + get x() { return super.x; } +} + +class GetterC extends GetterB { + get y() { return super.y; } +} + +// ---------------------------------------------------------------------------- + +var b = new GetterB(); +var c = new GetterC(); + +assert.equal('getter x', b.x); +assert.equal('getter y', c.y); diff --git a/test/fixtures/traceur/Classes/Inheritance.js b/test/fixtures/traceur/Classes/Inheritance.js new file mode 100644 index 0000000000..562e12dadb --- /dev/null +++ b/test/fixtures/traceur/Classes/Inheritance.js @@ -0,0 +1,9 @@ +class SimpleBase {} +class SimpleDerived extends SimpleBase {} + +// ---------------------------------------------------------------------------- + +var derived = new SimpleDerived(); +assert.isTrue(derived instanceof SimpleDerived); +assert.isTrue(derived instanceof SimpleBase); +assert.isTrue(derived instanceof Object); diff --git a/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js b/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js new file mode 100644 index 0000000000..4b8722655d --- /dev/null +++ b/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js @@ -0,0 +1,31 @@ +var baseContainer = { + base: function() { + this.yyy = 'base constructor'; + } +}; + +baseContainer.base.prototype = { + x: 'proto x', + constructor: function() { + this.y = 'base y'; + } +} + +class MemberExprBase extends baseContainer.base { + constructor(w) { + super(); + this.z = 'var z'; + this.w = w; + } +} + +// ---------------------------------------------------------------------------- + +var a = new MemberExprBase('w value'); +var pa = Object.getPrototypeOf(a); +var ppa = Object.getPrototypeOf(pa); + +assertHasOwnProperty(a, 'yyy', 'w', 'z'); +assertLacksOwnProperty(a, 'x'); +assertHasOwnProperty(pa, 'constructor'); +assertHasOwnProperty(ppa, 'x', 'constructor'); diff --git a/test/fixtures/traceur/Classes/InheritanceFromNonclass.js b/test/fixtures/traceur/Classes/InheritanceFromNonclass.js new file mode 100644 index 0000000000..67b767156f --- /dev/null +++ b/test/fixtures/traceur/Classes/InheritanceFromNonclass.js @@ -0,0 +1,17 @@ +function noClassA() {} +noClassA.prototype = { + ma: function() { return 'ma'; } +} + +class NoClassB extends noClassA { + mb() { + return 'mb ' + super.ma(); + } +} + +// ---------------------------------------------------------------------------- + +var b = new NoClassB; +assert.isTrue(b instanceof noClassA); +assert.equal('ma', b.ma()); +assert.equal('mb ma', b.mb()); diff --git a/test/fixtures/traceur/Classes/InheritanceNameBinding.js b/test/fixtures/traceur/Classes/InheritanceNameBinding.js new file mode 100644 index 0000000000..d39468d855 --- /dev/null +++ b/test/fixtures/traceur/Classes/InheritanceNameBinding.js @@ -0,0 +1,11 @@ +class NameBindingBase {} + +class NameBindingDerived extends NameBindingBase { + getX() { return this.x; } +} + +// ---------------------------------------------------------------------------- + +var derived = new NameBindingDerived(); +derived.x = 12; +assert.equal(12, derived.getX()); diff --git a/test/fixtures/traceur/Classes/Method.js b/test/fixtures/traceur/Classes/Method.js new file mode 100644 index 0000000000..69e8c76f2b --- /dev/null +++ b/test/fixtures/traceur/Classes/Method.js @@ -0,0 +1,21 @@ +class Universe { + answer() { + return 42; + } +} + +// ---------------------------------------------------------------------------- + +var universe = new Universe(); +assert.equal(42, universe.answer()); + +var keys = []; +for (var key in universe) { + keys.push(key); +} +assert.isTrue(keys.indexOf('answer') !== -1); +assert.isTrue(keys.indexOf('constructor') === -1); + +for (var key in Universe) { + fail('Universe contains static member : ' + key); +} diff --git a/test/fixtures/traceur/Classes/MethodInheritance.js b/test/fixtures/traceur/Classes/MethodInheritance.js new file mode 100644 index 0000000000..c9e0f63baa --- /dev/null +++ b/test/fixtures/traceur/Classes/MethodInheritance.js @@ -0,0 +1,32 @@ +class MethodsA { + ma() {} +} + +class MethodsB extends MethodsA { + mb() {} +} + +class MethodsC extends MethodsB { + mc() {} +} + +// ---------------------------------------------------------------------------- + +var a = new MethodsA(); +var b = new MethodsB(); +var c = new MethodsC(); + +var pa = Object.getPrototypeOf(a); +var pb = Object.getPrototypeOf(b); +var pc = Object.getPrototypeOf(c); + +assertNoOwnProperties(a); +assertNoOwnProperties(b); +assertNoOwnProperties(c); + +assertHasOwnProperty(pa, 'ma'); +assertLacksOwnProperty(pa, 'mb', 'mc'); +assertHasOwnProperty(pb, 'mb'); +assertLacksOwnProperty(pb, 'ma', 'mc'); +assertHasOwnProperty(pc, 'mc'); +assertLacksOwnProperty(pc, 'ma', 'mb'); diff --git a/test/fixtures/traceur/Classes/MethodLookup.js b/test/fixtures/traceur/Classes/MethodLookup.js new file mode 100644 index 0000000000..2a11cc3be3 --- /dev/null +++ b/test/fixtures/traceur/Classes/MethodLookup.js @@ -0,0 +1,34 @@ +class MethodLookupA { + foo() { + return 'A.foo()'; + } + get bar() { + return 'A.get.bar'; + } + set bar(value) { } +} + +class MethodLookupB extends MethodLookupA { + get foo() { + return 'B.foo.get'; + } + set foo(value) { } + bar() { + return 'B.bar()'; + } +} + +class MethodLookupC extends MethodLookupB { + x() { + return super.foo; + } + y() { + return super.bar(); + } +} + +// ---------------------------------------------------------------------------- + +var c = new MethodLookupC(); +assert.equal('B.foo.get', c.x()); +assert.equal('B.bar()', c.y()); diff --git a/test/fixtures/traceur/Classes/NameBinding.js b/test/fixtures/traceur/Classes/NameBinding.js new file mode 100644 index 0000000000..38a6be7c4d --- /dev/null +++ b/test/fixtures/traceur/Classes/NameBinding.js @@ -0,0 +1,36 @@ +class ElementHolder { + getElement() { return this.element; } + + makeFilterCapturedThis() { + var capturedThis = this; + return function (x) { + return x == capturedThis.element; + } + } + + makeFilterLostThis() { + return function () { return this; } + } + + makeFilterHidden(element) { + return function (x) { return x == element; } + } +} + +// ---------------------------------------------------------------------------- + +var obj = new ElementHolder(); + +obj.element = 40; +assert.equal(40, obj.getElement()); +assert.isTrue(obj.makeFilterCapturedThis()(40)); + +// http://code.google.com/p/v8/issues/detail?id=1381 +// assert.isUndefined(obj.makeFilterLostThis()()); + +obj.element = 39; +assert.isFalse(obj.makeFilterCapturedThis()(40)); +assert.isTrue(obj.makeFilterCapturedThis()(39)); + +assert.isFalse(obj.makeFilterHidden(41)(40)); +assert.isTrue(obj.makeFilterHidden(41)(41)); diff --git a/test/fixtures/traceur/Classes/NestedClassSuper.js b/test/fixtures/traceur/Classes/NestedClassSuper.js new file mode 100644 index 0000000000..9efce298ce --- /dev/null +++ b/test/fixtures/traceur/Classes/NestedClassSuper.js @@ -0,0 +1,104 @@ +class One { + constructor(o) { o.r = 'c1'; } + m() { return 'm1'; } + get g() { return 'g1'; } + set x(v) { this.x_ = v+1; } + get x() { return this.x_; } +} + +// All OneExt class decls are identical. +// +// Just testing identical behavior in the different contexts: +// constructor, method, method with inner func, getter, setter. +class OneExtWrapper { + constructor() { + class OneExt extends One { + constructor() { + var o = {}; + super(o); + assert.equal('c1', o.r); + } + m() { return super.m(); } + get g() { return super.g; } + set x(v) { super.x = v; } + get x() { return super.x; } + } + this.Cconstr = OneExt; + } + m() { + class OneExt extends One { + constructor() { + var o = {}; + super(o); + assert.equal('c1', o.r); + } + m() { return super.m(); } + get g() { return super.g; } + set x(v) { super.x = v; } + get x() { return super.x; } + } + return OneExt; + } + mf() { + return (function(){ + class OneExt extends One { + constructor() { + var o = {}; + super(o); + assert.equal('c1', o.r); + } + m() { return super.m(); } + get g() { return super.g; } + set x(v) { super.x = v; } + get x() { return super.x; } + } + return OneExt; + })(); + } + get g() { + class OneExt extends One { + constructor() { + var o = {}; + super(o); + assert.equal('c1', o.r); + } + m() { return super.m(); } + get g() { return super.g; } + set x(v) { super.x = v; } + get x() { return super.x; } + } + return OneExt; + } + set Cprop(v) { + class OneExt extends One { + constructor() { + var o = {}; + super(o); + assert.equal('c1', o.r); + } + m() { return super.m(); } + get g() { return super.g; } + set x(v) { super.x = v; } + get x() { return super.x; } + } + this.C = OneExt; + } + get Cprop() { + return this.C; + } +} + +// ---------------------------------------------------------------------------- + +function checkClass(C) { + var o = new C(); + assert.equal('m1', o.m()); + assert.equal('g1', o.g); + o.x = 'x'; + assert.equal('x1', o.x); +} + +var o = new OneExtWrapper(); +o.Cprop = 'dummy value'; + +[o.Cconstr, o.m(), o.mf(), o.g, o.Cprop].forEach(checkClass); diff --git a/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js b/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js new file mode 100644 index 0000000000..ab24afa89a --- /dev/null +++ b/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js @@ -0,0 +1,45 @@ +// a = animal, n = name, sn = super name, fn = full name, wn = with name + +class Animal { + constructor(n) { + this.n1 = n + ' Animal'; + } + get n() { return this.n1; } +} + +class Roo extends Animal { + constructor(n) { + class Koala extends Animal { + constructor(n) { + super(n); + this.n2 = n + ' Koala'; + } + get n() { return this.n2; } + get sn() { return super.n; } + get fn() { return this.n + ' aka ' + this.sn; } + } + this.a = new Koala(n + ' II'); + + super(n); + this.n2 = n + ' Roo'; + } + wn(n) { + return ' (with ' + n + ')'; + } + get n() { return this.n2 + this.wn(this.a.n); } + get sn() { return super.n + this.wn(this.a.sn); } + get fn() { return this.n + ' aka ' + this.sn + this.wn(this.a.fn); } +} + +// ---------------------------------------------------------------------------- + +var o = new Roo('Kanga'); +assert.equal('Kanga II Koala', o.a.n); +assert.equal('Kanga II Animal', o.a.sn); +assert.equal('Kanga II Koala aka Kanga II Animal', o.a.fn); + +assert.equal('Kanga Roo (with Kanga II Koala)', o.n); +assert.equal('Kanga Animal (with Kanga II Animal)', o.sn); +assert.equal('Kanga Roo (with Kanga II Koala) aka ' + + 'Kanga Animal (with Kanga II Animal) ' + + '(with Kanga II Koala aka Kanga II Animal)', o.fn); diff --git a/test/fixtures/traceur/Classes/NestedFunctionSuper.js b/test/fixtures/traceur/Classes/NestedFunctionSuper.js new file mode 100644 index 0000000000..a16c07c022 --- /dev/null +++ b/test/fixtures/traceur/Classes/NestedFunctionSuper.js @@ -0,0 +1,76 @@ +class SuperBase { + m() { return 40; } + get x () { return this.baseX; } + set x (value) { this.baseX = value; } + constructor() { + this.baseC = 2; + this.baseX = 4; + } +} + +class SuperDerived extends SuperBase { + m() { return 41; } + superM() { + return (function() { + return super.m(); + })(); + } + superX() { + return (function() { + return super.x; + })(); + } + superX2() { + return (function() { + return (function() { + return super.x; + })(); + })(); + } + superX2F() { + return function() { + return (function() { + return super.x; + })(); + }; + } + get superXprop() { + return (function() { + return super.x; + })(); + } + set superXprop(v) { + return (function() { + super.x = v; + })(); + } + constructor() { + this.x = 10; + this.derC = 3; + (function() { super(); })(); + } +} + +// ---------------------------------------------------------------------------- + +var obj = new SuperDerived(); +assert.equal(41, obj.m()); +assert.equal(40, obj.superM()); + +assert.equal(4, obj.baseX); +assert.equal(4, obj.x); +assert.equal(4, obj.superX()); +assert.equal(4, obj.superX2()); +assert.equal(4, obj.superX2F()()); +assert.equal(4, obj.superXprop); + +obj.superXprop = 5; +assert.equal(5, obj.baseX); +assert.equal(5, obj.x); +assert.equal(5, obj.superX()); +assert.equal(5, obj.superX2()); +assert.equal(5, obj.superX2F()()); +assert.equal(5, obj.superXprop); + +assert.equal(2, obj.baseC); +assert.equal(3, obj.derC); diff --git a/test/fixtures/traceur/Classes/NewClassExpression.js b/test/fixtures/traceur/Classes/NewClassExpression.js new file mode 100644 index 0000000000..a08d0ff8eb --- /dev/null +++ b/test/fixtures/traceur/Classes/NewClassExpression.js @@ -0,0 +1,18 @@ + +assert.equal((new class { + get x() { + return 'x'; + } + getX() { + return this.x; + } +}).getX(), 'x'); + +assert.equal(new class { + get y() { + return 'y'; + } + getY() { + return this.y; + } +}().getY(), 'y'); diff --git a/test/fixtures/traceur/Classes/OptionalParams.js b/test/fixtures/traceur/Classes/OptionalParams.js new file mode 100644 index 0000000000..4040e25bf9 --- /dev/null +++ b/test/fixtures/traceur/Classes/OptionalParams.js @@ -0,0 +1,18 @@ +class OptionalParams { + constructor(opt = 1) { + this.opt = opt; + } + instanceMethod(opt = 2) { + return opt; + } +} + +// ---------------------------------------------------------------------------- + +var obj = new OptionalParams(); +assert.equal(1, obj.opt); +assert.equal(2, obj.instanceMethod()); +assert.equal(3, obj.instanceMethod(3)); + +var obj2 = new OptionalParams(2); +assert.equal(2, obj2.opt); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/PropertyAccessors.js b/test/fixtures/traceur/Classes/PropertyAccessors.js new file mode 100644 index 0000000000..94f0028504 --- /dev/null +++ b/test/fixtures/traceur/Classes/PropertyAccessors.js @@ -0,0 +1,59 @@ +class ImmutablePoint { + get x () { return this.x_; } + get y () { return this.y_; } +} + +class MutablePoint { + get x () { return this.x_; } + set x (x) { this.x_ = x; } + get y () { return this.y_; } + set y (y) { this.y_ = y; } +} + +// ---------------------------------------------------------------------------- + +var immutable = new ImmutablePoint(); +assert.equal(undefined, immutable.x); +assert.equal(undefined, immutable.y); +immutable.x_ = 10; +immutable.y_ = 20; +assert.equal(10, immutable.x); +assert.equal(20, immutable.y); +assert.equal(10, immutable.x_); +assert.equal(20, immutable.y_); + +try { + immutable.x = 11; + fail('should not be able to set a get only property'); +} catch (except) { +} +try { + immutable.y = 11; + fail('should not be able to set a get only property'); +} catch (except) { +} +assert.equal(10, immutable.x); +assert.equal(20, immutable.y); + +var mutable = new MutablePoint(); +assert.equal(undefined, mutable.x); +assert.equal(undefined, mutable.y); +mutable.x_ = 10; +mutable.y_ = 20; +assert.equal(10, mutable.x); +assert.equal(20, mutable.y); +assert.equal(10, mutable.x_); +assert.equal(20, mutable.y_); + +try { + mutable.x = 11; +} catch (except) { + fail('should be able to set a read/write property'); +} +try { + mutable.y = 12; +} catch (except) { + fail('should be able to set a read/write property'); +} +assert.equal(11, mutable.x); +assert.equal(12, mutable.y); diff --git a/test/fixtures/traceur/Classes/PrototypeDescriptor.js b/test/fixtures/traceur/Classes/PrototypeDescriptor.js new file mode 100644 index 0000000000..1be4d32b2a --- /dev/null +++ b/test/fixtures/traceur/Classes/PrototypeDescriptor.js @@ -0,0 +1,7 @@ +class C {} + +var descr = Object.getOwnPropertyDescriptor(C, 'prototype'); +assert.isFalse(descr.enumerable); +assert.isFalse(descr.configurable); +assert.isFalse(descr.writable); +assert.equal(descr.value, C.prototype); diff --git a/test/fixtures/traceur/Classes/RestParams.js b/test/fixtures/traceur/Classes/RestParams.js new file mode 100644 index 0000000000..4720e962b1 --- /dev/null +++ b/test/fixtures/traceur/Classes/RestParams.js @@ -0,0 +1,15 @@ +class RestParams { + constructor(...rest) { + this.rest = rest; + } + instanceMethod(...rest) { + return rest; + } +} + +// ---------------------------------------------------------------------------- + +var obj = new RestParams(0, 1, 2); +assertArrayEquals([0, 1, 2], obj.rest); +assertArrayEquals([3, 4, 5], obj.instanceMethod(3, 4, 5)); + diff --git a/test/fixtures/traceur/Classes/SemiColon.js b/test/fixtures/traceur/Classes/SemiColon.js new file mode 100644 index 0000000000..64c076d705 --- /dev/null +++ b/test/fixtures/traceur/Classes/SemiColon.js @@ -0,0 +1,3 @@ +class SemiColon { + ; +} \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/SimpleSuper.js b/test/fixtures/traceur/Classes/SimpleSuper.js new file mode 100644 index 0000000000..7b282563ae --- /dev/null +++ b/test/fixtures/traceur/Classes/SimpleSuper.js @@ -0,0 +1,31 @@ +class SuperBase { + m() { return 40; } + get x () { return this.baseX; } + set x (value) { this.baseX = value; } + constructor() { + this.baseC = 2; + this.baseX = 4; + } +} + +class SuperDerived extends SuperBase { + m() { return 41; } + superM() { return super.m(); } + superX() { return super.x; } + constructor() { + this.x = 10; + this.derC = 3; + super(); + } +} + +// ---------------------------------------------------------------------------- + +var obj = new SuperDerived(); +assert.equal(41, obj.m()); +assert.equal(40, obj.superM()); +assert.equal(4, obj.baseX); +assert.equal(4, obj.x); +assert.equal(4, obj.superX()); +assert.equal(2, obj.baseC); +assert.equal(3, obj.derC); diff --git a/test/fixtures/traceur/Classes/Skip_DerivedButton.js b/test/fixtures/traceur/Classes/Skip_DerivedButton.js new file mode 100644 index 0000000000..15f63caf26 --- /dev/null +++ b/test/fixtures/traceur/Classes/Skip_DerivedButton.js @@ -0,0 +1,39 @@ +// Skip. Not implemented. +// Only in browser. + +class CustomButton extends HTMLButtonElement { + constructor() { + this.value = 'Custom Button'; + } +} + +class CustomSelect extends HTMLSelectElement {} +class CustomInput extends HTMLInputElement {} +class CustomDiv extends HTMLDivElement {} +class CustomUIEvent extends UIEvent {} +// class CustomSpan extends HTMLSpanElement {} +class CustomTableRow extends HTMLTableRowElement {} +class CustomHeading extends HTMLHeadingElement {} +class CustomElement extends HTMLElement {} +class CustomUList extends HTMLUListElement {} +class CustomLI extends HTMLLIElement {} +class CustomMenu extends HTMLMenuElement {} +class CustomTextArea extends HTMLTextAreaElement {} + +// ---------------------------------------------------------------------------- + +var button = new CustomButton(); +document.body.appendChild(button); +document.body.appendChild(new CustomSelect()); +document.body.appendChild(new CustomInput()); +document.body.appendChild(new CustomDiv()); +// document.body.appendChild(new CustomSpan()); +document.body.appendChild(new CustomTableRow()); +document.body.appendChild(new CustomHeading()); +document.body.appendChild(new CustomElement()); +document.body.appendChild(new CustomUList()); +document.body.appendChild(new CustomLI()); +document.body.appendChild(new CustomMenu()); +document.body.appendChild(new CustomTextArea()); + +// TODO(rnystrom): Test these. diff --git a/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js b/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js new file mode 100644 index 0000000000..8841875d64 --- /dev/null +++ b/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js @@ -0,0 +1,16 @@ +// Skip. Not implemented. +// Only in browser. + +class CustomBlockquote extends HTMLBlockquoteElement { + constructor() { + this.custom = 42; + } +} + +var customBlockquote = new CustomBlockquote; +assert.equal(42, customBlockquote.custom); +assert.equal('BLOCKQUOTE', customBlockquote.tagName); +assert.isTrue(customBlockquote instanceof CustomBlockquote); +assert.isTrue(customBlockquote instanceof HTMLBlockquoteElement); +assert.isTrue(customBlockquote instanceof HTMLQuoteElement); +assert.isTrue(customBlockquote instanceof HTMLElement); diff --git a/test/fixtures/traceur/Classes/Static.js b/test/fixtures/traceur/Classes/Static.js new file mode 100644 index 0000000000..08e9228253 --- /dev/null +++ b/test/fixtures/traceur/Classes/Static.js @@ -0,0 +1,70 @@ +var x = 42; + +class B { + static m() { + return this; + } + + static get x() { + return x; + } + + static set x(value) { + x = value; + } +} + +assert.equal(B, B.m()); +assert.equal(42, B.x); +B.x = 1; +assert.equal(1, x); + +class StaticMethod { + static static() { + return 'static method'; + } +} + +assert.equal('static method', StaticMethod.static()); + +class StaticGetter { + static get static() { + return 'static getter'; + } +} + +assert.equal('static getter', StaticGetter.static); + +class StaticSetter { + static set static(value) { + x = value; + } +} + +StaticSetter.static = 'static setter'; +assert.equal('static setter', x); + +class MethodNamedStatic { + static() { + return this; + } +} + +var c = new MethodNamedStatic(); +assert.equal(c, c.static()); + +class AccessorNamedStatic { + get static() { + return [this, x]; + } + + set static(value) { + x = [this, value]; + } +} + +x = 2; +c = new AccessorNamedStatic(); +assertArrayEquals([c, 2], c.static); +c.static = 3; +assertArrayEquals([c, 3], x); diff --git a/test/fixtures/traceur/Classes/StaticSuper.js b/test/fixtures/traceur/Classes/StaticSuper.js new file mode 100644 index 0000000000..558c5bb334 --- /dev/null +++ b/test/fixtures/traceur/Classes/StaticSuper.js @@ -0,0 +1,35 @@ +var x = 'B.getter'; + +class B { + static method() { + return [this, 'B.method']; + } + + static get getter() { + return [this, x]; + } + + static set setter(value) { + x = [this, value]; + } +} + +class C extends B { + static method() { + return super.method(); + } + + static get getter() { + return super.getter; + } + + static set setter(value) { + super.setter = value; + } +} + +assertArrayEquals([C, 'B.method'], C.method()); +assertArrayEquals([C, 'B.getter'], C.getter); + +C.setter = 'B.setter'; +assertArrayEquals([C, 'B.setter'], x); diff --git a/test/fixtures/traceur/Classes/StaticSuperNoExtends.js b/test/fixtures/traceur/Classes/StaticSuperNoExtends.js new file mode 100644 index 0000000000..58c369a789 --- /dev/null +++ b/test/fixtures/traceur/Classes/StaticSuperNoExtends.js @@ -0,0 +1,47 @@ +var x = 42; + +Function.prototype.testFunction = function() { + return [this, 42, this.call]; +}; + +Object.defineProperty(Function.prototype, 'testGetter', { + get: function() { + return [this, x, this.call]; + }, + configurable: true +}); + + +Object.defineProperty(Function.prototype, 'testSetter', { + set: function(value) { + x = [this, value, this.call]; + }, + configurable: true +}); + + +class NoExtends { + static method() { + return super.testFunction(); + } + + static get getter() { + return super.testGetter; + } + + static set setter(value) { + super.testSetter = value; + } +} + +var call = Function.prototype.call; +assertArrayEquals([NoExtends, 42, call], NoExtends.method()); + +assertArrayEquals([NoExtends, 42, call], NoExtends.getter); + +NoExtends.setter = 1; +assertArrayEquals([NoExtends, 1, call], x); + +delete Function.prototype.testFunction; +delete Function.prototype.testGetter; +delete Function.prototype.testSetter; \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/StaticSymbol.js b/test/fixtures/traceur/Classes/StaticSymbol.js new file mode 100644 index 0000000000..99ec7dd8ab --- /dev/null +++ b/test/fixtures/traceur/Classes/StaticSymbol.js @@ -0,0 +1,8 @@ +// Options: --symbols +var sym = Symbol(); +class C { + static [sym]() { + return 42; + } +} +assert.equal(C[sym](), 42); diff --git a/test/fixtures/traceur/Classes/SuperChaining.js b/test/fixtures/traceur/Classes/SuperChaining.js new file mode 100644 index 0000000000..5688aa62fd --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperChaining.js @@ -0,0 +1,28 @@ +class ChainA { + foo() { + return 'A'; + } +} + +class ChainB extends ChainA { + foo() { + return super.foo() + ' B'; + } +} + +class ChainC extends ChainB { + foo() { + return super.foo() + ' C'; + } +} + +class ChainD extends ChainC { + foo() { + return super.foo() + ' D'; + } +} + +// ---------------------------------------------------------------------------- + +var d = new ChainD(); +assert.equal('A B C D', d.foo()); diff --git a/test/fixtures/traceur/Classes/SuperChangeProto.js b/test/fixtures/traceur/Classes/SuperChangeProto.js new file mode 100644 index 0000000000..6bf02b2620 --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperChangeProto.js @@ -0,0 +1,20 @@ +var log = ''; + +class Base { + p() { log += '[Base]'; } +} + +class OtherBase { + p() { log += '[OtherBase]'; } +} +class Derived extends Base { + p() { + log += '[Derived]'; + super.p(); + Derived.prototype.__proto__ = OtherBase.prototype; + super.p(); + } +} + +new Derived().p(); +assert.equal(log, '[Derived][Base][OtherBase]'); diff --git a/test/fixtures/traceur/Classes/SuperMissing.js b/test/fixtures/traceur/Classes/SuperMissing.js new file mode 100644 index 0000000000..6eb4f8679f --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperMissing.js @@ -0,0 +1,40 @@ +class MissingSuperA {} + +class MissingSuperB extends MissingSuperA { + method() { + return super.foo(); + } + field() { + return super.foo; + } +} + +// ---------------------------------------------------------------------------- + +// Collect the expected values. +var expectedF; +var expectedM; +var actualF; +var actualM; + +expectedF = ({}).x; +try { + ({}).method(); +} catch (e) { + expectedM = e; +} + +// Test against those. +var b = new MissingSuperB(); +var actualF = b.field(); +var actualM; +try { + b.method(); +} catch (e) { + actualM = e; +} + +assert.equal(actualF, expectedF); +assert.instanceOf(expectedM, TypeError); +assert.instanceOf(actualM, TypeError); +assert.equal(Object.getPrototypeOf(actualM), Object.getPrototypeOf(expectedM)); diff --git a/test/fixtures/traceur/Classes/SuperPostfix.js b/test/fixtures/traceur/Classes/SuperPostfix.js new file mode 100644 index 0000000000..843c26891e --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperPostfix.js @@ -0,0 +1,23 @@ +class B { + constructor() { + this._x = 0; + } + get x() { + return this._x; + } + set x(x) { + this._x = x; + } +} + +class C extends B { + m() { + assert.equal(this.x, 0); + assert.equal(super.x++, 0); + assert.equal(this.x, 1); + assert.equal(super.x--, 1); + assert.equal(this.x, 0); + } +} + +new C().m(); diff --git a/test/fixtures/traceur/Classes/SuperSet.js b/test/fixtures/traceur/Classes/SuperSet.js new file mode 100644 index 0000000000..cb612b9fe0 --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperSet.js @@ -0,0 +1,56 @@ +class B { + constructor() { + this._y = {v: 321}; + this._z = 1; + } + set x(value) { + this._x = value; + } + get x() { + return this._y; + } + getX() { + return this._x; + } + getV() { + return this._y.v + } + + set z(v) { + this._z = v; + } + get z() { + return this._z; + } +} + +class C extends B { + constructor() { + super(); + } + set x(value) { + assert.equal(super.x = value, value); + } + set v(value) { + return super.x.v = value; + } + inc(val) { + assert.equal(super.z += val, 4); + } + incLookup(val) { + assert.equal(super['z'] += val, 9); + } +} + +var c = new C; +c.x = 42; +assert.equal(42, c.getX()); + +c.v = 123; +assert.equal(123, c.getV()); + +c.inc(3); +assert.equal(4, c.z); + +c.incLookup(5); +assert.equal(9, c.z); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/SuperUnary.js b/test/fixtures/traceur/Classes/SuperUnary.js new file mode 100644 index 0000000000..310041e220 --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperUnary.js @@ -0,0 +1,26 @@ +class B { + constructor() { + this._x = 0; + } + get x() { + return this._x; + } + set x(x) { + this._x = x; + } +} + +class C extends B { + m() { + assert.equal(this.x, 0); + assert.equal(++super.x, 1); + assert.equal(this.x, 1); + assert.equal(--super.x, 0); + assert.equal(this.x, 0); + + // Don't use assert.typeOf since we are testing typeof. + assert.equal(typeof super.x, 'number'); + } +} + +new C().m(); diff --git a/test/fixtures/traceur/Classes/SuperWithoutExtends.js b/test/fixtures/traceur/Classes/SuperWithoutExtends.js new file mode 100644 index 0000000000..5b2546b084 --- /dev/null +++ b/test/fixtures/traceur/Classes/SuperWithoutExtends.js @@ -0,0 +1,15 @@ +class C { + constructor() { + this.x = true; + } + static m() { + return super.hasOwnProperty('m'); + } + + m() { + return super.hasOwnProperty('x'); + } +} + +assert.isTrue(new C().m()); +assert.isTrue(C.m()); diff --git a/test/fixtures/traceur/Classes/Types.js b/test/fixtures/traceur/Classes/Types.js new file mode 100644 index 0000000000..dbdfd6e262 --- /dev/null +++ b/test/fixtures/traceur/Classes/Types.js @@ -0,0 +1,26 @@ +// Options: --types + +class Typed { + constructor(x : number) { + this.x_ = x; + } + + addTo(y : number) : number { + this.x += y; + return this.x; + } + + get x() : number { + return this.x_; + } + + set x(x : number) { + this.x_ = x; + } +} + +// Generics, ClassExpression +var C = class ClassExpression {}; + +assert.equal(1, new Typed(1).x); +assert.equal(2, new Typed(1).addTo(1)); diff --git a/test/fixtures/traceur/Collections/Map.js b/test/fixtures/traceur/Collections/Map.js new file mode 100644 index 0000000000..17dc74e2d4 --- /dev/null +++ b/test/fixtures/traceur/Collections/Map.js @@ -0,0 +1,234 @@ +var t = new Map(); + +var objectKey = {}; +var stringKey = 'keykeykey'; +var numberKey = 42.24; +var booleanKey = true; +var undefinedKey = undefined; +var nullKey = null; +var nanKey = NaN; +var zeroKey = 0; + + +assert.equal(t.size, 0); + +t.set(undefinedKey, 'value8'); +t.set(nullKey, 'value9'); +t.set(stringKey, 'value5'); +t.set(numberKey, 'value6'); +t.set(booleanKey, 'value7'); +t.set(objectKey, 'value1'); +t.set(nanKey, 'value10'); +t.set(zeroKey, 'value11'); + +assert.equal(t.size, 8); + +assert.equal(t.get(objectKey), 'value1'); +assert.equal(t.get(stringKey), 'value5'); +assert.equal(t.get(numberKey), 'value6'); +assert.equal(t.get(booleanKey), 'value7'); +assert.equal(t.get(undefinedKey), 'value8'); +assert.equal(t.get(nullKey), 'value9'); +assert.equal(t.get(nanKey), 'value10'); +assert.equal(t.get(zeroKey), 'value11'); + +assert.equal(t.get({}), undefined); +assert.equal(t.get('keykeykey'), 'value5'); +assert.equal(t.get(42.24), 'value6'); +assert.equal(t.get(true), 'value7'); +assert.equal(t.get(undefined), 'value8'); +assert.equal(t.get(null), 'value9'); +assert.equal(t.get(NaN), 'value10'); +assert.equal(t.get(0), 'value11'); +assert.equal(t.get(1 / Infinity), 'value11'); +assert.equal(t.get(-1 / Infinity), 'value11'); + +assert.isTrue(!t.has({})); + +assert.isTrue(t.has(objectKey)); +assert.isTrue(t.has(stringKey)); +assert.isTrue(t.has(numberKey)); +assert.isTrue(t.has(booleanKey)); +assert.isTrue(t.has(undefinedKey)); +assert.isTrue(t.has(nullKey)); +assert.isTrue(t.has(nanKey)); +assert.isTrue(t.has(zeroKey)); + +assert.isTrue(t.has('keykeykey')); +assert.isTrue(t.has(42.24)); +assert.isTrue(t.has(true)); +assert.isTrue(t.has(undefined)); +assert.isTrue(t.has(null)); +assert.isTrue(t.has(NaN)); +assert.isTrue(t.has(0)); +assert.isTrue(t.has(-0)); + + +// forEach +var arrKeys = []; +var arr = []; +var cnt = 0; +t.forEach(function (value, key, map) { + if (cnt === 0) { + t.set('foo', 42); + } + assert.equal(map, t); + arrKeys.push(key); + arr.push(value); + cnt++; +}); +assert.equal(cnt, 9); +t.delete('foo'); + +assertArrayEquals(arrKeys, [ + undefinedKey, + nullKey, + stringKey, + numberKey, + booleanKey, + objectKey, + nanKey, + zeroKey, + 'foo' +]); +assertArrayEquals(arr, [ + 'value8', + 'value9', + 'value5', + 'value6', + 'value7', + 'value1', + 'value10', + 'value11', + 42 +]); + +// iterator +arrKeys = []; +arr = []; +cnt = 0; + +for (var mapIterItem of t) { + if (cnt === 0) { + t.set('foo', 42); + } + var [mapIterItemKey, mapIterItemVal] = mapIterItem; + arrKeys.push(mapIterItemKey); + arr.push(mapIterItemVal); + cnt++; +} +assert.equal(cnt, 9); +t.delete('foo'); + +assertArrayEquals(arrKeys, [ undefinedKey, nullKey, stringKey, + numberKey, booleanKey, objectKey, + nanKey, zeroKey, 'foo' ]); +assertArrayEquals(arr, [ + 'value8', + 'value9', + 'value5', + 'value6', + 'value7', + 'value1', + 'value10', + 'value11', + 42 +]); + + +// .entries() +arrKeys = []; +arr = []; +cnt = 0; + +for (var mapIterItem of t.entries()) { + var [mapIterItemKey, mapIterItemVal] = mapIterItem; + arrKeys.push(mapIterItemKey); + arr.push(mapIterItemVal); + cnt++; +} +assert.equal(cnt, 8); + +assertArrayEquals(arrKeys, [ + undefinedKey, + nullKey, + stringKey, + numberKey, + booleanKey, + objectKey, + nanKey, + zeroKey +]); +assertArrayEquals(arr, [ + 'value8', + 'value9', + 'value5', + 'value6', + 'value7', + 'value1', + 'value10', + 'value11' +]); + + +// .keys() +arrKeys = []; +cnt = 0; + +for (var mapIterKey of t.keys()) { + arrKeys.push(mapIterKey); + cnt++; +} +assert.equal(cnt, 8); + +assertArrayEquals(arrKeys, [ + undefinedKey, + nullKey, + stringKey, + numberKey, + booleanKey, + objectKey, + nanKey, + zeroKey +]); + + +// .values() +arr = []; +cnt = 0; + +for (var mapIterVal of t.values()) { + arr.push(mapIterVal); + cnt++; +} +assert.equal(cnt, 8); + +assertArrayEquals(arr, [ + 'value8', + 'value9', + 'value5', + 'value6', + 'value7', + 'value1', + 'value10', + 'value11' +]); + + +var t3 = new Map([ [[],[]], [{},{}], [NaN,NaN] ]); +var deleteReturnValue; + +assert.equal(t3.size, 3); +assert.isTrue(t3.has(NaN)); +assert.isTrue(isNaN(t3.get(NaN))); +assert.equal(t3.set(NaN, NaN), t3); // test of 23.1.3.9.11 +deleteReturnValue = t3.delete(NaN); +assert.equal(t3.size, 2); +assert.isTrue(deleteReturnValue); +deleteReturnValue = t3.delete(NaN); +assert.equal(t3.size, 2); +assert.isFalse(deleteReturnValue); +t3.clear(); +assert.equal(t3.size, 0); + +assert.equal(Map.prototype[Symbol.iterator], Map.prototype.entries); diff --git a/test/fixtures/traceur/Collections/Set.js b/test/fixtures/traceur/Collections/Set.js new file mode 100644 index 0000000000..93b19001e2 --- /dev/null +++ b/test/fixtures/traceur/Collections/Set.js @@ -0,0 +1,142 @@ +var t = new Set(); + +var objectKey = {}; +var stringKey = 'keykeykey'; +var numberKey = 42.24; +var booleanKey = true; +var undefinedKey = undefined; +var nullKey = null; +var nanKey = NaN; +var zeroKey = 0; +var addReturnValue; + +t.add(objectKey); +t.add(stringKey); +t.add(numberKey); +t.add(booleanKey); +t.add(undefinedKey); +t.add(nullKey); +t.add(nanKey); +addReturnValue = t.add(zeroKey); + +assert.equal(t.size, 8); +assert.equal(t, addReturnValue); + +assert.isTrue(!t.has({})); + +assert.isTrue(t.has(objectKey)); +assert.isTrue(t.has(stringKey)); +assert.isTrue(t.has(numberKey)); +assert.isTrue(t.has(booleanKey)); +assert.isTrue(t.has(undefinedKey)); +assert.isTrue(t.has(nullKey)); +assert.isTrue(t.has(nanKey)); +assert.isTrue(t.has(zeroKey)); + +assert.isTrue(t.has('keykeykey')); +assert.isTrue(t.has(42.24)); +assert.isTrue(t.has(true)); +assert.isTrue(t.has(undefined)); +assert.isTrue(t.has(null)); +assert.isTrue(t.has(NaN)); +assert.isTrue(t.has(0)); +assert.isTrue(t.has(-0)); + +var expected = [ + undefinedKey, + nullKey, + stringKey, + numberKey, + booleanKey, + objectKey, + nanKey, + zeroKey +]; +expected.sort(); + + +// forEach +var arr = []; +var cnt = 0; +var context = {}; + +t.forEach(function(val, val2, obj) { + if (isNaN(val)) { + assert.isTrue(isNaN(val2)); + } else { + assert.equal(val, val2); + } + assert.equal(obj, t); + assert.equal(this, context) + arr.push(val); + cnt++; +}, context); + +assert.equal(cnt, 8); + +arr.sort(); +assertArrayEquals(arr, expected); + +// iterator +arr = []; +cnt = 0; + +for (var setIterVal of t) { + arr.push(setIterVal); + cnt++; +} +assert.equal(cnt, 8); + + +arr.sort(); +assertArrayEquals(arr, expected); + +// .values() +arr = []; +cnt = 0; + +for (var setIterVal of t.values()) { + arr.push(setIterVal); + cnt++; +} +assert.equal(cnt, 8); + + +arr.sort(); +assertArrayEquals(arr, expected); + +var t3 = new Set([[], {}, NaN]); +assert.equal(t3.size, 3); +assert.isTrue(t3.has(NaN)); +t3.delete(NaN); +assert.equal(t3.size, 2); +t3.delete(NaN); +assert.equal(t3.size, 2); +t3.clear(); +assert.equal(t3.size, 0); + +// .keys() +var t4 = new Set(); +var iter = t4.keys(); +t4.add(objectKey); +t4.add(stringKey); +t4.add(nanKey); +assert.deepEqual(iter.next(), {value: objectKey, done: false}); +assert.deepEqual(iter.next(), {value: stringKey, done: false}); +t4.delete(nanKey); +assert.deepEqual(iter.next(), {value: undefined, done: true}); + +assert.equal(Set.prototype.keys, Set.prototype.values); + +// .entries() +var t5 = new Set(); +var iter = t5.entries(); +t5.add(objectKey); +t5.add(stringKey); +t5.add(nanKey); +assert.deepEqual(iter.next(), {value: [objectKey, objectKey], done: false}); +assert.deepEqual(iter.next(), {value: [stringKey, stringKey], done: false}); +t5.delete(nanKey); +assert.deepEqual(iter.next(), {value: undefined, done: true}); + +assert.equal(Set.prototype[Symbol.iterator], Set.prototype.values); diff --git a/test/fixtures/traceur/Collections/SetWithSymbols.js b/test/fixtures/traceur/Collections/SetWithSymbols.js new file mode 100644 index 0000000000..c4618dc091 --- /dev/null +++ b/test/fixtures/traceur/Collections/SetWithSymbols.js @@ -0,0 +1,4 @@ +// Options: --symbols + +var s = new Set(['Banana', 'Orange', 'Apple', 'Mango', 'Apple', 'Apple']); +assert.equal(s.size, 4); diff --git a/test/fixtures/traceur/ComputedPropertyNames/Class.js b/test/fixtures/traceur/ComputedPropertyNames/Class.js new file mode 100644 index 0000000000..c9900c48ca --- /dev/null +++ b/test/fixtures/traceur/ComputedPropertyNames/Class.js @@ -0,0 +1,48 @@ +var x = '0'; +var y; + +class C { + [x]() { + return 0; + } + get [1]() { + return 1; + } + set [2](v) { + y = v; + } + *[3]() { + yield 3; + } + + static [4]() { + return 4; + } + static get [5]() { + return 5; + } + static set [6](v) { + y = v; + } + static *[7]() { + yield 7; + } +} + +var object = new C; +assert.equal(object[0](), 0); +assert.equal(object[1], 1); +object[2] = 2; +assert.equal(y, 2); +var g = object[3](); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + + +assert.equal(C[4](), 4); +assert.equal(C[5], 5); +C[6] = 6; +assert.equal(y, 6); +var g = C[7](); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js b/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js new file mode 100644 index 0000000000..722c0fc180 --- /dev/null +++ b/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js @@ -0,0 +1,35 @@ +var x = '0'; +var y; +var object = { + [x]: 0, + [1]: 1, + [2]() { + return 2; + }, + get [3]() { + return 3; + }, + set [4](v) { + y = v; + }, + *[5]() { + yield 5; + } +}; + +assert.equal(object[0], 0); +assert.equal(object[1], 1); +assert.equal(object[2](), 2); +object[4] = 4; +assert.equal(y, 4); +var g = object[5](); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + +var object2 = { + __proto__: object, + [6]: 6 +}; + +assert.equal(object2[6], 6); +assert.equal(object2[0], 0); diff --git a/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js b/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js new file mode 100644 index 0000000000..099c8907e3 --- /dev/null +++ b/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js @@ -0,0 +1,6 @@ +// Options: --computed-property-names=false +// Error: :5:3: Unexpected token [ + +var object = { + [1]: 2 +}; diff --git a/test/fixtures/traceur/ComputedPropertyNames/Symbol.js b/test/fixtures/traceur/ComputedPropertyNames/Symbol.js new file mode 100644 index 0000000000..c28f817145 --- /dev/null +++ b/test/fixtures/traceur/ComputedPropertyNames/Symbol.js @@ -0,0 +1,9 @@ +// Options: --symbols + +var s = Symbol(); + +var object = { + [s]: 42 +}; + +assert.equal(object[s], 42); diff --git a/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js b/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js new file mode 100644 index 0000000000..039a0fc438 --- /dev/null +++ b/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js @@ -0,0 +1,6 @@ +// Error: :5:15: Unexpected token = + +var object = { + // Default parameters are not allowed on setters. + set x(value = 42) {} +} \ No newline at end of file diff --git a/test/fixtures/traceur/DefaultParameters/Simple.js b/test/fixtures/traceur/DefaultParameters/Simple.js new file mode 100644 index 0000000000..0f2b26b2c6 --- /dev/null +++ b/test/fixtures/traceur/DefaultParameters/Simple.js @@ -0,0 +1,45 @@ +function f(a = 1, b = 2) { + return a + b; +} + +assert.equal(0, f.length); +assert.equal(3, f()); +assert.equal(6, f(4)); +assert.equal(24, f(8, 16)); + +assert.equal(3, f(undefined, undefined)); +assert.equal(33, f(undefined, 32)); + +function g(a, b = a) { + return a + b; +} + +assert.equal(1, g.length); +assert.equal(4, g(2)); +assert.equal(4, g(2, undefined)); +assert.equal(5, g(2, 3)); + +function C(obj = this) { + this.obj = obj; +} + +assert.equal(0, C.length); + +var c = new C; +assert.equal(c, c.obj); + +var c2 = new C(undefined); +assert.equal(c2, c2.obj); + +var c3 = new C(42); +assert.equal(42, c3.obj); + +function h(a = 1, b) { + return {a: a, b: b}; +} + +assert.equal(1, h().a); +assert.equal(2, h(2).a); +assert.isUndefined(h().b); +assert.isUndefined(h(2).b); +assert.equal(4, h(3, 4).b); diff --git a/test/fixtures/traceur/Destructuring/Arguments.js b/test/fixtures/traceur/Destructuring/Arguments.js new file mode 100644 index 0000000000..7046316663 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Arguments.js @@ -0,0 +1,8 @@ +function destructureArguments(x, y) { + [arguments[0], [arguments[1]]] = [1, [2]] + return x + y; +} + +// ---------------------------------------------------------------------------- + +assert.equal(3, destructureArguments(1, 2)); diff --git a/test/fixtures/traceur/Destructuring/Array.js b/test/fixtures/traceur/Destructuring/Array.js new file mode 100644 index 0000000000..6f6d979e59 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Array.js @@ -0,0 +1,25 @@ +function destructArray() { + var a, b, c, d; + [a, [b], c, d] = ['hello', [',', 'junk'], ['world']]; + return { + a: a, + b: b, + c: c, + d: d + }; +} + +// ---------------------------------------------------------------------------- + +var result = destructArray(); +assert.equal('hello', result.a); +assert.equal(',', result.b); +assertArrayEquals(['world'], result.c); +assert.isUndefined(result.d); + +function testNested() { + var a; + [[a] = ['b']] = []; + return a; +} +assert.equal(testNested(), 'b'); diff --git a/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js b/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js new file mode 100644 index 0000000000..89269b0000 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js @@ -0,0 +1,5 @@ +var x, y; +[x, {y = 1}] = [0, {}]; + +assert.equal(x, 0); +assert.equal(y, 1); diff --git a/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js b/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js new file mode 100644 index 0000000000..6a97645aae --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js @@ -0,0 +1,5 @@ +// https://github.com/google/traceur-compiler/issues/969 + +var x; +[x = 1] = []; +assert.equal(x, 1); diff --git a/test/fixtures/traceur/Destructuring/ArrowFunction.js b/test/fixtures/traceur/Destructuring/ArrowFunction.js new file mode 100644 index 0000000000..bbc7a75b66 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ArrowFunction.js @@ -0,0 +1,17 @@ +var f = ({x}) => x; +assert.equal(42, f({x: 42})); + +var g = ({x: y, z: [a, b, ...c]}) => [y, a, b, c]; +assertArrayEquals([1, 2, 3, [4, 5]], g({x: 1, z: [2, 3, 4, 5]})); + +var h = ([a, {b: c, d}]) => [a, c, d]; +assertArrayEquals([1, 2, 3], h([1, {b: 2, d: 3}])); + +var i = ([, a]) => a; +assert.equal(i([0, 1]), 1); + +var j = ([, [, a]]) => a; +assert.equal(j([0, [1, 2]]), 2); + +var k = ([a] = new String('b')) => a; +assert.equal(k(), 'b'); diff --git a/test/fixtures/traceur/Destructuring/Catch.js b/test/fixtures/traceur/Destructuring/Catch.js new file mode 100644 index 0000000000..6b110c025f --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Catch.js @@ -0,0 +1,30 @@ +var head = 'head'; +var tail = 'tail'; +var name = 'name'; + +function MyError(s) { + this.message = new String(s); + this.name = 'Error'; +} + +try { + throw new MyError('abc'); +} catch ({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); +} + +assert.equal('head', head); +assert.equal('tail', tail); +assert.equal('name', name); + +assert.throws(() => { + try { + throw [0]; + } catch ([innerX]) { + + } + + innerX; +}, ReferenceError); diff --git a/test/fixtures/traceur/Destructuring/Class.js b/test/fixtures/traceur/Destructuring/Class.js new file mode 100644 index 0000000000..c699d39c4c --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Class.js @@ -0,0 +1,28 @@ +function MyError(s) { + this.message = new String(s); + this.name = 'Error'; +} + +class C { + constructor({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); + } + + method({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); + } + + set x({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); + } +} + +var c = new C(new MyError('abc')); +c.method(new MyError('abc')); +c.x = new MyError('abc'); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializedName.js b/test/fixtures/traceur/Destructuring/CoverInitializedName.js new file mode 100644 index 0000000000..1b91bd3a8d --- /dev/null +++ b/test/fixtures/traceur/Destructuring/CoverInitializedName.js @@ -0,0 +1,4 @@ +// https://github.com/google/traceur-compiler/issues/183 + +var f = ({x = 42}) => x; +assert.equal(f({}), 42); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializer.js b/test/fixtures/traceur/Destructuring/CoverInitializer.js new file mode 100644 index 0000000000..ed37f7257d --- /dev/null +++ b/test/fixtures/traceur/Destructuring/CoverInitializer.js @@ -0,0 +1,9 @@ +// https://github.com/google/traceur-compiler/issues/1015 + +var x, y; +({x = 1, y = 2} = {}); +assert.equal(x, 1); +assert.equal(y, 2); + +({x: {x = 3}} = {x: {}}); +assert.equal(x, 3); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js b/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js new file mode 100644 index 0000000000..eb0a9781d3 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js @@ -0,0 +1,9 @@ +// https://github.com/google/traceur-compiler/issues/836 + +var count = 0; +for ({a = 0} of [{}]) { + count++; + assert.equal(a, 0); +} + +assert.equal(count, 1); diff --git a/test/fixtures/traceur/Destructuring/DefaultParams.js b/test/fixtures/traceur/Destructuring/DefaultParams.js new file mode 100644 index 0000000000..e6a1670b75 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/DefaultParams.js @@ -0,0 +1,5 @@ +function f([x] = [1], {y} = {y: 2}) { + return x + y; +} + +assert.equal(3, f()); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/Empty.js b/test/fixtures/traceur/Destructuring/Empty.js new file mode 100644 index 0000000000..275534362b --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Empty.js @@ -0,0 +1,32 @@ +var calls = 0; + +var {} = Object(calls++); +assert.equal(calls, 1); + +assert.throw(function() { + var [] = Object(calls++); +}, TypeError); +assert.equal(calls, 2); + +assert.throw(function() { + var {} = Object(calls++), [] = Object(calls++); +}); +assert.equal(calls, 4); + + +/////////////////////// + +calls = 0; + +({} = Object(calls++)); +assert.equal(calls, 1); + +assert.throw(function() { + [] = Object(calls++); +}, TypeError); +assert.equal(calls, 2); + +assert.throw(function() { + ({} = Object(calls++), [] = Object(calls++)); +}, TypeError); +assert.equal(calls, 4); diff --git a/test/fixtures/traceur/Destructuring/Error_Disabled.js b/test/fixtures/traceur/Destructuring/Error_Disabled.js new file mode 100644 index 0000000000..f177fe43b3 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --destructuring=false +// Error: 4:5: Unexpected token [ + +var [x, y] = [0, 1]; diff --git a/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js b/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js new file mode 100644 index 0000000000..ea9c29c5f7 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js @@ -0,0 +1,4 @@ +// Error: :3:19: Unexpected token in + +for (var {k} = {} in {}) { +} diff --git a/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js b/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js new file mode 100644 index 0000000000..6a15645310 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js @@ -0,0 +1,4 @@ +// Error: :3:19: Unexpected token of + +for (var {k} = {} of []) { +} diff --git a/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js b/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js new file mode 100644 index 0000000000..c7eca5a9d6 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js @@ -0,0 +1,3 @@ +// Error: :3:16: Unexpected token , + +var f = ([...xs, ys]) => xs; diff --git a/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js b/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js new file mode 100644 index 0000000000..441d53c8d1 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js @@ -0,0 +1,3 @@ +// Error: :3:5: Unexpected token = + +({x = 42}); diff --git a/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js b/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js new file mode 100644 index 0000000000..9027f27207 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js @@ -0,0 +1,9 @@ +function destructEvaluatesToRvalue() { + var a; + return [a] = [1, 2, 3]; +} + +// ---------------------------------------------------------------------------- + +var result = destructEvaluatesToRvalue(); +assertArrayEquals([1, 2, 3], result); diff --git a/test/fixtures/traceur/Destructuring/EvaluationOrder.js b/test/fixtures/traceur/Destructuring/EvaluationOrder.js new file mode 100644 index 0000000000..50df75e13e --- /dev/null +++ b/test/fixtures/traceur/Destructuring/EvaluationOrder.js @@ -0,0 +1,10 @@ +function destructEvaluationOrder() { + var a; + [a, a, a] = [1, 2, 3, 4]; + return a; +} + +// ---------------------------------------------------------------------------- + +var result = destructEvaluationOrder(); +assert.equal(3, result); diff --git a/test/fixtures/traceur/Destructuring/ForInLoop.js b/test/fixtures/traceur/Destructuring/ForInLoop.js new file mode 100644 index 0000000000..42aadf4239 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ForInLoop.js @@ -0,0 +1,28 @@ +// Options: --block-binding + +var object = { + abc: 0, // Keep all the keys at length 3. + def: 1 +}; + +var expectedHeads = ['a', 'd']; +var expectedTails = [['b', 'c'], ['e','f']]; +var i = 0; +for (var [head, ...tail] in object) { + assert.equal(expectedHeads[i], head); + assertArrayEquals(expectedTails[i], tail); + i++; +} +assert.equal(2, i); + +{ + let x = 42; + for (let {length: x} in object) { + assert.equal(3, x); + } + assert.equal(42, x); +} + +var k; +for ({length: k} in {abc: 3}) // No block + assert.equal(3, k); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/ForOfLoop.js b/test/fixtures/traceur/Destructuring/ForOfLoop.js new file mode 100644 index 0000000000..cc9260c166 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ForOfLoop.js @@ -0,0 +1,28 @@ +// Options: --block-binding + +function* gen() { + yield new String('abc'); + yield new String('def'); +} + +var expectedHeads = ['a', 'd']; +var expectedTails = [['b', 'c'], ['e','f']]; +var i = 0; +for (var [head, ...tail] of gen()) { + assert.equal(expectedHeads[i], head); + assertArrayEquals(expectedTails[i], tail); + i++; +} +assert.equal(2, i); + +{ + let x = 42; + for (let {length: x} of gen()) { + assert.equal(3, x); + } + assert.equal(42, x); +} + +var k; +for ({length: k} of [new String('abc')]) // No block + assert.equal(3, k); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js b/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js new file mode 100644 index 0000000000..9af424c550 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js @@ -0,0 +1,14 @@ +function f([a, b, ...c], d) { + return [a, b, c, d]; +} +assertArrayEquals([1, 2, [3, 4], 5], f([1, 2, 3, 4], 5)); + +function g([, a]) { + return a; +} +assert.equal(g([0, 1]), 1); + +function h([, [, a]]) { + return a; +} +assert.equal(h([0, [1, 2]]), 2); diff --git a/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js b/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js new file mode 100644 index 0000000000..612ae47dd2 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js @@ -0,0 +1,5 @@ +function f({a, b: {c}}, d) { + return [a, c, d]; +} + +assertArrayEquals([1, 2, 3], f({a: 1, b: {c: 2}}, 3)); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/Initializer.js b/test/fixtures/traceur/Destructuring/Initializer.js new file mode 100644 index 0000000000..ce8a9caa97 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Initializer.js @@ -0,0 +1,74 @@ +var [a = 0] = []; +assert.equal(0, a); + +var {b = 1} = {}; +assert.equal(1, b); + +var {c = 2} = {c: 3}; +assert.equal(3, c); + +var {d = 4} = Object.create({d: 5}); +assert.equal(5, d); + +var {e: f = 6} = {}; +assert.equal(6, f); + +var {g: h = 7} = {h: 8}; +assert.equal(7, h); + +var [, , , i = 9] = [10, 11, 12]; +assert.equal(9, i); + +function j({x = 42}, expected) { + assert.equal(expected, x); +} + +j({}, 42); +j({x: 43}, 43); + +var count = 0; +var [k = 42] = (count++, [21]); +assert.equal(21, k); +assert.equal(1, count); + +var {x = 1} = {x: undefined}; +assert.equal(x, 1); + +var {'x': x = 2} = {x: undefined}; +assert.equal(x, 2); + +var {['x']: x = 3} = {x: undefined}; +assert.equal(x, 3); + +var [y = 4] = [undefined]; +assert.equal(y, 4); + + +var xCount = 0; +var yCount = 0; +var zCount = 0; + +var object = { + get x() { + xCount++; + return { + get y() { + yCount++; + return { + get z() { + zCount++; + return undefined; + } + }; + } + }; + } +}; + +var {y: {z = 5, w = 6}, v = 7} = object.x; +assert.equal(z, 5); +assert.equal(w, 6); +assert.equal(v, 7); +assert.equal(xCount, 1); +assert.equal(yCount, 1); +assert.equal(zCount, 1); diff --git a/test/fixtures/traceur/Destructuring/InitializerObject.js b/test/fixtures/traceur/Destructuring/InitializerObject.js new file mode 100644 index 0000000000..946b0e2a2d --- /dev/null +++ b/test/fixtures/traceur/Destructuring/InitializerObject.js @@ -0,0 +1,12 @@ +var x, z; + +({x = {y: 1}} = {}); +assert.deepEqual(x, {y: 1}); + +({x = {y: {z = 2} = {}}} = {}); +assert.equal(z, 2); +assert.deepEqual(x, {y: {}}); + +({x = {y: {z = 3} = {z: 4}}} = {}); +assert.equal(z, 4); +assert.deepEqual(x, {y: {z: 4}}); diff --git a/test/fixtures/traceur/Destructuring/Method.js b/test/fixtures/traceur/Destructuring/Method.js new file mode 100644 index 0000000000..604bdc09fb --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Method.js @@ -0,0 +1,14 @@ +function MyError(s) { + this.message = new String(s); + this.name = 'Error'; +} + +var object = { + method({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); + } +}; + +object.method(new MyError('abc')); diff --git a/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js b/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js new file mode 100644 index 0000000000..f980a8fbd8 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js @@ -0,0 +1,4 @@ +// https://github.com/google/traceur-compiler/issues/838 + +var f = ({a = 0}, {b = 1}) => ({a, b}); +assert.deepEqual(f({}, {}), {a: 0, b: 1}); diff --git a/test/fixtures/traceur/Destructuring/NestedScopeArguments.js b/test/fixtures/traceur/Destructuring/NestedScopeArguments.js new file mode 100644 index 0000000000..692a1bcfd4 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/NestedScopeArguments.js @@ -0,0 +1,11 @@ +// Destructuring bind alpha-renames 'arguments'; this ensures that +// renaming doesn't rename in nested scopes. +function destructNestedScopeArguments(x) { + [(function () { return arguments[1]; })(null, x)[0]] = [42]; +} + +// ---------------------------------------------------------------------------- + +var result = []; +destructNestedScopeArguments(result); +assert.equal(42, result[0]); diff --git a/test/fixtures/traceur/Destructuring/Object.js b/test/fixtures/traceur/Destructuring/Object.js new file mode 100644 index 0000000000..562f24d4e6 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Object.js @@ -0,0 +1,42 @@ +function destructObject() { + var a, b, c, d; + ({a, x: b, y: {c, z: [,d]}} = { + a: 7, // field with shorthand a => a: a syntax + x: 8, // typical syntax + y: { // nested object destructuring + // missing binding 'c' + z: [10, 11, 12] // nested array destructuring + } + }); + return { + a: a, + b: b, + c: c, + d: d + }; +} + +// ---------------------------------------------------------------------------- + +var result = destructObject(); +assert.equal(7, result.a); +assert.equal(8, result.b); +assert.isUndefined(result.c); +assert.equal(11, result.d); + +var {0: x, '1': y, length: z} = [0, 1, 2, 3]; +assert.equal(0, x); +assert.equal(1, y); +assert.equal(4, z); + +var {x: y,} = {x: 5}; +assert.equal(5, y); + +var x; +({x = 6} = {}); +assert.equal(x, 6); + +var z; +({x: {y = 7}, z = 8} = {x: {}}); +assert.equal(y, 7); +assert.equal(z, 8); diff --git a/test/fixtures/traceur/Destructuring/Rest.js b/test/fixtures/traceur/Destructuring/Rest.js new file mode 100644 index 0000000000..6000165cf4 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Rest.js @@ -0,0 +1,19 @@ +function destructRest() { + var a, b, c, d; + [...a] = [1, 2, 3]; + [b, ...c] = [1, 2, 3]; + [,,, ...d] = [1, 2, 3]; + return {a: a, b: b, c: c, d: d}; +} + +var result = destructRest(); +assertArrayEquals([1, 2, 3], result.a); +assert.equal(1, result.b); +assertArrayEquals([2, 3], result.c); +assertArrayEquals([], result.d); + +assert.throw(function() { + var e; + // No iterator. + [...e] = {x: 'boom'}; +}, TypeError); diff --git a/test/fixtures/traceur/Destructuring/RestIterator.js b/test/fixtures/traceur/Destructuring/RestIterator.js new file mode 100644 index 0000000000..2963e51ed2 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/RestIterator.js @@ -0,0 +1,45 @@ +(function() { + var i; + + function* f() { + for (i = 0; i < 8; i++) { + yield i; + } + } + var x, x2, xs; + [, x, , x2, , ...xs] = f(); + assert.equal(1, x); + assert.equal(3, x2); + assertArrayEquals([5, 6, 7], xs); + + [] = f(); + assert.equal(8, i); // Since we never call next(). + + x = -1; + [x] = f(); + assert.equal(0, x); + assert.equal(0, i); // Since we called next once. +})(); + +// Same but with VariableDeclarations instead of AssignmenExpressions. +(function() { + var i; + + function* f() { + for (i = 0; i < 8; i++) { + yield i; + } + } + + var [, x, , x2, , ...xs] = f(); + assert.equal(1, x); + assert.equal(3, x2); + assertArrayEquals([5, 6, 7], xs); + + var [] = f(); + assert.equal(8, i); // Since we never call next(). + + var [y] = f(); + assert.equal(0, y); + assert.equal(0, i); // Since we called next once. +})(); diff --git a/test/fixtures/traceur/Destructuring/ScopeThis.js b/test/fixtures/traceur/Destructuring/ScopeThis.js new file mode 100644 index 0000000000..c2f8c80087 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ScopeThis.js @@ -0,0 +1,19 @@ +function destructScopeThis() { + var x; + var o = { + f: function() { + [this.x] = [1]; + } + }; + o.f(); + return { + x: x, + o_x: o.x + }; +} + +// ---------------------------------------------------------------------------- + +var result = destructScopeThis(); +assert.isUndefined(result.x); +assert.equal(1, result.o_x); diff --git a/test/fixtures/traceur/Destructuring/SetAccessor.js b/test/fixtures/traceur/Destructuring/SetAccessor.js new file mode 100644 index 0000000000..2273925139 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/SetAccessor.js @@ -0,0 +1,14 @@ +function MyError(s) { + this.message = new String(s); + this.name = 'Error'; +} + +var object = { + set x({message: [head, ...tail], name}) { + assert.equal('a', head); + assertArrayEquals(['b', 'c'], tail); + assert.equal('Error', name); + } +}; + +object.x = new MyError('abc'); diff --git a/test/fixtures/traceur/Destructuring/Simplify.js b/test/fixtures/traceur/Destructuring/Simplify.js new file mode 100644 index 0000000000..e20d86c90d --- /dev/null +++ b/test/fixtures/traceur/Destructuring/Simplify.js @@ -0,0 +1,168 @@ +// Options: --symbols=false +// +// It probably doesn't make a difference to the results, but the private name +// transformation turns array lookup and member access into function calls, and +// I'd like to keep that from being a confounding factor. + +'use strict'; + +var a, b, c, x, y, z; + +// ---------------------------------------------------------------------------- + +function checkA() { + assert.equal(1, a); + assert.isUndefined(b); + assert.isUndefined(c); + a = b = c = undefined; +} + +function checkAb() { + assert.equal(1, a); + assert.equal(2, b); + assert.isUndefined(c); + a = b = c = undefined; +} + +function checkAbc() { + assert.equal(1, a); + assert.equal(2, b); + assert.equal(3, c); + a = b = c = undefined; +} + +// ---------------------------------------------------------------------------- + +// misc single assignment +var [a] = 42 === 42 ? [1] : [42]; +checkA(); +[a] = 42 === 42 ? [1] : [42]; +checkA(); + +var [a] = null || [1]; +checkA(); +[a] = null || [1]; +checkA(); + +// ParseTreeType.MEMBER_EXPRESSION +x = {x: {a: 1, b: 2, c: 3}}; +var {a, b, c} = x.x; +checkAbc(); + +var {a} = x.x; +checkA(); + +x = {x: [1, 2, 3]}; +var [a] = x.x; +checkA(); +[a] = x.x; +checkA(); + +// ParseTreeType.MEMBER_LOOKUP_EXPRESSION +x = [[1,2,3]]; +var [a] = x[0]; +checkA(); +[a] = x[0]; +checkA(); +var [a, b, c] = x[0]; +checkAbc(); +[a, b, c] = x[0]; +checkAbc(); + + +// ParseTreeType.PAREN_EXPRESSION +var [a] = 42 === 42 ? [1] : [42]; +checkA(); +[a] = 42 === 42 ? [1] : [42]; +checkA(); + +var [a] = null || [1]; +checkA(); +[a] = null || [1]; +checkA(); + +// ParseTreeType.ARRAY_LITERAL_EXPRESSION +var [a] = [1, 2, 3]; +checkA(); +[a] = [1, 2, 3]; +checkA(); +var [[a]] = [[1], 2, 3]; +checkA(); +[[a]] = [[1], 2, 3]; +checkA(); + +// ParseTreeType.OBJECT_LITERAL_EXPRESSION +var {a} = {a: 1, b: 2, c: 3}; +checkA(); +var {x: {a}} = {x: {a: 1, b: 2}, c: 3}; +checkA(); + +// ParseTreeType.CALL_EXPRESSION +x = function() { + return [1, 2, 3]; +}; +var [a, b, c] = x(); +checkAbc(); +[a, b, c] = x(); +checkAbc(); + +x = function() { + return {a: 1, b: 2, c: 3}; +}; +var {a, b, c} = x(); +checkAbc(); +// ParseTreeType.IDENTIFIER_EXPRESSION + +// arrays +x = [1, 2, 3]; +var [a] = x; +checkA(); +[a] = x; +checkA(); + +x = [[1], 2, 3]; +var [[a]] = x; +checkA(); +[[a]] = x; +checkA(); + +x = [[1, 2, 3]]; +var [[a, b, c]] = x; +checkAbc(); +[[a, b, c]] = x; +checkAbc(); + +x = [1, [2, 3]]; +var [ a, [b, c] ] = x; +checkAbc(); +[ a, [b, c] ] = x; +checkAbc(); + +x = [[1, 2], 3]; +var [[a, b], c] = x; +checkAbc(); +[[a, b], c] = x; +checkAbc(); + +x = [[1], 2, [3]]; +var [[a], b, [c]] = x; +checkAbc(); +[[a], b, [c]] = x; +checkAbc(); + +// objects +x = {a: 1, b: 2, c: 3}; +var {a, b, c} = x; +checkAbc(); + +x = {a: 1, b: 2, c: 3}; +var {a} = x; +checkA(); + +x = {a: 1, b: 2, c: 3}; +var {a, b, c} = x; +checkAbc(); + +x = {x: {a: 1, b: 2}, c: 3}; +var {x: {a}} = x; +checkA(); diff --git a/test/fixtures/traceur/Destructuring/StrangeProperties.js b/test/fixtures/traceur/Destructuring/StrangeProperties.js new file mode 100644 index 0000000000..487cbd055d --- /dev/null +++ b/test/fixtures/traceur/Destructuring/StrangeProperties.js @@ -0,0 +1,17 @@ +var x, y; + +({if: x = 1, else: y} = {else: 2}); +assert.equal(x, 1); +assert.equal(y, 2); + +({'': x = 3, ' ': y} = {' ': 4}); +assert.equal(x, 3); +assert.equal(y, 4); + +({true: x = 5, false: y} = {false: 6}); +assert.equal(x, 5); +assert.equal(y, 6); + +({0: x = 7, 1: y} = {1: 8}); +assert.equal(x, 7); +assert.equal(y, 8); diff --git a/test/fixtures/traceur/Destructuring/TopLevel.js b/test/fixtures/traceur/Destructuring/TopLevel.js new file mode 100644 index 0000000000..6409d45b91 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/TopLevel.js @@ -0,0 +1,9 @@ +var a, b, c, d; +[a, [b, c], d] = ['hello', [',', 'junk'], ['world']]; + +// ---------------------------------------------------------------------------- + +assert.equal('hello', a); +assert.equal(',', b); +assert.equal('junk', c); +assertArrayEquals(['world'], d); diff --git a/test/fixtures/traceur/Destructuring/ValueTypes.js b/test/fixtures/traceur/Destructuring/ValueTypes.js new file mode 100644 index 0000000000..b76d12cc6c --- /dev/null +++ b/test/fixtures/traceur/Destructuring/ValueTypes.js @@ -0,0 +1,58 @@ +(function() { + var {toFixed} = 42; + assert.equal(Number.prototype.toFixed, toFixed); + + var {toString, toLocaleString} = 42; + assert.equal(Number.prototype.toString, toString); + assert.equal(Number.prototype.toLocaleString, toLocaleString); + + var [x] = 'string'; + assert.equal('s', x); + + var [x, y] = 'string'; + assert.equal('s', x); + assert.equal('t', y); + + var [x, ...xs] = 'string'; + assert.equal('s', x); + assert.deepEqual(['t', 'r', 'i', 'n', 'g'], xs); + + var {toFixed: {length}} = 42; + assert.equal(1, length); + + var {x: {toString}} = {x: true}; + assert.equal(Boolean.prototype.toString, toString); + + var [[x]] = ['string']; + assert.equal('s', x); + + // Same with assignment expression + + ({toFixed} = 42); + assert.equal(Number.prototype.toFixed, toFixed); + + ({toString, toLocaleString} = 42); + assert.equal(Number.prototype.toString, toString); + assert.equal(Number.prototype.toLocaleString, toLocaleString); + + [x] = 'string'; + assert.equal('s', x); + + [x, y] = 'string'; + assert.equal('s', x); + assert.equal('t', y); + + [x, ...xs] = 'string'; + assert.equal('s', x); + assert.deepEqual(['t', 'r', 'i', 'n', 'g'], xs); + + ({toFixed: {length}} = 42); + assert.equal(1, length); + + ({x: {toString}} = {x: true}); + assert.equal(Boolean.prototype.toString, toString); + + [[x]] = ['string']; + assert.equal('s', x); + +})(); diff --git a/test/fixtures/traceur/Destructuring/VarDecl.js b/test/fixtures/traceur/Destructuring/VarDecl.js new file mode 100644 index 0000000000..ec77aff801 --- /dev/null +++ b/test/fixtures/traceur/Destructuring/VarDecl.js @@ -0,0 +1,27 @@ +// Options: --block-binding + +function destructVarDecl() { + // Const; and an array inside an object literal inside an array. + const a = 0, [b, {c, x: [d]}] = [1, {c: 2, x: [3]}]; + + // Now an object literal inside an array inside an object literal. + var {x: [{e}, f], g} = {x: [{e:4}, 5], g: 6}; + + // Two patterns in one var. + var {h} = {h: 7}, {i} = {i: 8}; + + return { a: a, b: b, c: c, d: d, e: e, f: f, g: g, h: h, i: i }; +} + +// ---------------------------------------------------------------------------- + +var result = destructVarDecl(); +assert.equal(0, result.a); +assert.equal(1, result.b); +assert.equal(2, result.c); +assert.equal(3, result.d); +assert.equal(4, result.e); +assert.equal(5, result.f); +assert.equal(6, result.g); +assert.equal(7, result.h); +assert.equal(8, result.i); diff --git a/test/fixtures/traceur/Exponentiation/Basics.js b/test/fixtures/traceur/Exponentiation/Basics.js new file mode 100644 index 0000000000..42ad3e7b12 --- /dev/null +++ b/test/fixtures/traceur/Exponentiation/Basics.js @@ -0,0 +1,25 @@ +// Options: --exponentiation + +(function() { + assert.equal(8, 2 ** 3); + assert.equal(24, 3 * 2 ** 3); + var x = 2; + assert.equal(8, 2 ** ++x); + assert.equal(1, 2 ** -1 * 2); + + var calls = 0; + var q = {q: 3}; + var o = { + get p() { + calls++; + return q; + } + }; + + o.p.q **= 2; + assert.equal(1, calls); + assert.equal(9, o.p.q); + + assert.equal(512, 2 ** (3 ** 2)); + assert.equal(512, 2 ** 3 ** 2); +})(); diff --git a/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js b/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js new file mode 100644 index 0000000000..9207a2299e --- /dev/null +++ b/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --generator-comprehension=false +// Error: :4:13: Unexpected token for + +var iter = (for (x of [0, 1, 2, 3, 4]) x); diff --git a/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js b/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js new file mode 100644 index 0000000000..66c7e28002 --- /dev/null +++ b/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js @@ -0,0 +1,5 @@ +// Options: --generator-comprehension --free-variable-checker +// Error: :5:1: notDefined is not defined + +var iter = (for (notDefined of [0]) notDefined); +notDefined; diff --git a/test/fixtures/traceur/GeneratorComprehension/Simple.js b/test/fixtures/traceur/GeneratorComprehension/Simple.js new file mode 100644 index 0000000000..ffeae46555 --- /dev/null +++ b/test/fixtures/traceur/GeneratorComprehension/Simple.js @@ -0,0 +1,40 @@ +// Options: --generator-comprehension + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +function* range() { + for (var i = 0; i < 5; i++) { + yield i; + } +} + +var iter = (for (x of [0, 1, 2, 3, 4]) x); +assert.equal('01234', accumulate(iter)); + +var iter2 = (for (x of [0, 1, 2, 3, 4]) for (y of [0, 1, 2, 3, 4]) x + '' + y ); +assert.equal('00010203041011121314202122232430313233344041424344', + accumulate(iter2)); + +var iter3 = ( + for (x of [0, 1, 2, 3, 4]) + for (y of range()) + if (x === y) + x + '' + y); +assert.equal('0011223344', accumulate(iter3)); + +// Ensure this works as expression statement +(for (testVar of []) testVar); + +var iter4 = ( + for (x of range()) + if (x % 2 === 0) + for (y of range()) + if (y % 2 === 1) + x + '' + y); +assert.equal('010321234143', accumulate(iter4)); diff --git a/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js b/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js new file mode 100644 index 0000000000..5442161373 --- /dev/null +++ b/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js @@ -0,0 +1,23 @@ +// Options: --generator-comprehension +// Skip. The sugaring uses var instead of let which leads to wrong closure. + +var iter = (for (x of [0, 1]) for (y of [2, 3]) () => [x, y] ); + +assert.isTrue(iter.moveNext()); +var f1 = iter.current; + +assert.isTrue(iter.moveNext()); +var f2 = iter.current; + +assert.isTrue(iter.moveNext()); +var f3 = iter.current; + +assert.isTrue(iter.moveNext()); +var f4 = iter.current; + +assert.isFalse(iter.moveNext()); + +assertArrayEquals([0, 2], f1()); +assertArrayEquals([0, 3], f2()); +assertArrayEquals([1, 2], f3()); +assertArrayEquals([1, 3], f4()); \ No newline at end of file diff --git a/test/fixtures/traceur/Math/acosh.module.js b/test/fixtures/traceur/Math/acosh.module.js new file mode 100644 index 0000000000..716e3c02bc --- /dev/null +++ b/test/fixtures/traceur/Math/acosh.module.js @@ -0,0 +1,8 @@ +import {acosh} from '../../../src/runtime/polyfills/Math.js'; + +function testAcosh(acosh) { + assert.equal(0, acosh(1)); +} + +testAcosh(acosh); +testAcosh(Math.acosh); diff --git a/test/fixtures/traceur/Math/asinh.module.js b/test/fixtures/traceur/Math/asinh.module.js new file mode 100644 index 0000000000..2590ef121d --- /dev/null +++ b/test/fixtures/traceur/Math/asinh.module.js @@ -0,0 +1,8 @@ +import {asinh} from '../../../src/runtime/polyfills/Math.js'; + +function testAsinh(asinh) { + assert.equal(0, asinh(0)); +} + +testAsinh(asinh); +testAsinh(Math.asinh); diff --git a/test/fixtures/traceur/Math/atanh.module.js b/test/fixtures/traceur/Math/atanh.module.js new file mode 100644 index 0000000000..0a96869e6b --- /dev/null +++ b/test/fixtures/traceur/Math/atanh.module.js @@ -0,0 +1,8 @@ +import {atanh} from '../../../src/runtime/polyfills/Math.js'; + +function testAtanh(atanh) { + assert.equal(0, atanh(0)); +} + +testAtanh(atanh); +testAtanh(Math.atanh); diff --git a/test/fixtures/traceur/Math/cbrt.module.js b/test/fixtures/traceur/Math/cbrt.module.js new file mode 100644 index 0000000000..726ff94e2a --- /dev/null +++ b/test/fixtures/traceur/Math/cbrt.module.js @@ -0,0 +1,8 @@ +import {cbrt} from '../../../src/runtime/polyfills/Math.js'; + +function testCbrt(cbrt) { + assert.equal(0, cbrt(0)); +} + +testCbrt(cbrt); +testCbrt(Math.cbrt); diff --git a/test/fixtures/traceur/Math/clz32.module.js b/test/fixtures/traceur/Math/clz32.module.js new file mode 100644 index 0000000000..2d21aaeaa9 --- /dev/null +++ b/test/fixtures/traceur/Math/clz32.module.js @@ -0,0 +1,9 @@ +import {clz32} from '../../../src/runtime/polyfills/Math.js'; + +function testClz32(clz32) { + [NaN, Infinity, -Infinity, 0, -0, 'abc', 'Infinity', '-Infinity', {}].forEach( + (x) => assert.equal(32, clz32(x))); +} + +testClz32(clz32); +testClz32(Math.clz32); diff --git a/test/fixtures/traceur/Math/cosh.module.js b/test/fixtures/traceur/Math/cosh.module.js new file mode 100644 index 0000000000..c61ab85d06 --- /dev/null +++ b/test/fixtures/traceur/Math/cosh.module.js @@ -0,0 +1,11 @@ +import {cosh} from '../../../src/runtime/polyfills/Math.js'; + +function testCosh(cosh) { + assert.equal(Infinity, cosh(-Infinity)); + assert.equal(Infinity, cosh(Infinity)); + assert.equal(1, cosh(0)); + assert.equal(1, cosh(-0)); +} + +testCosh(cosh); +testCosh(Math.cosh); diff --git a/test/fixtures/traceur/Math/expm1.module.js b/test/fixtures/traceur/Math/expm1.module.js new file mode 100644 index 0000000000..0bbeb63d26 --- /dev/null +++ b/test/fixtures/traceur/Math/expm1.module.js @@ -0,0 +1,9 @@ +import {expm1} from '../../../src/runtime/polyfills/Math.js'; + +function testExpm1(expm1) { + assert.equal(Infinity, expm1(Infinity)); + assert.equal(-1, expm1(-Infinity)); +} + +testExpm1(expm1); +testExpm1(Math.expm1); diff --git a/test/fixtures/traceur/Math/fround.module.js b/test/fixtures/traceur/Math/fround.module.js new file mode 100644 index 0000000000..e05699be24 --- /dev/null +++ b/test/fixtures/traceur/Math/fround.module.js @@ -0,0 +1,8 @@ +import {fround} from '../../../src/runtime/polyfills/Math.js'; + +function testFround(fround) { + assert.equal(0, fround(0)); +} + +testFround(fround); +testFround(Math.fround); diff --git a/test/fixtures/traceur/Math/hypot.module.js b/test/fixtures/traceur/Math/hypot.module.js new file mode 100644 index 0000000000..097e5b5318 --- /dev/null +++ b/test/fixtures/traceur/Math/hypot.module.js @@ -0,0 +1,9 @@ +import {hypot} from '../../../src/runtime/polyfills/Math.js'; + +function testHypot(hypot) { + assert.equal(1, hypot(1)); + assert.equal(Math.PI, hypot(Math.PI)); +} + +testHypot(hypot); +testHypot(Math.hypot); diff --git a/test/fixtures/traceur/Math/imul.module.js b/test/fixtures/traceur/Math/imul.module.js new file mode 100644 index 0000000000..e67624dca2 --- /dev/null +++ b/test/fixtures/traceur/Math/imul.module.js @@ -0,0 +1,8 @@ +import {imul} from '../../../src/runtime/polyfills/Math.js'; + +function testImul(imul) { + assert.equal(8, imul(2, 4)); +} + +testImul(imul); +testImul(Math.imul); diff --git a/test/fixtures/traceur/Math/log10.module.js b/test/fixtures/traceur/Math/log10.module.js new file mode 100644 index 0000000000..64cae99669 --- /dev/null +++ b/test/fixtures/traceur/Math/log10.module.js @@ -0,0 +1,9 @@ +import {log10} from '../../../src/runtime/polyfills/Math.js'; + +function testLog10(log10) { + assert.equal(1, log10(10)); + assert.equal(2, log10(100)); +} + +testLog10(log10); +testLog10(Math.log10); diff --git a/test/fixtures/traceur/Math/log1p.module.js b/test/fixtures/traceur/Math/log1p.module.js new file mode 100644 index 0000000000..2fd94cbf2f --- /dev/null +++ b/test/fixtures/traceur/Math/log1p.module.js @@ -0,0 +1,8 @@ +import {log1p} from '../../../src/runtime/polyfills/Math.js'; + +function testLog1p(log1p) { + assert.equal(0, log1p(0)); +} + +// testLog1p(log1p); +testLog1p(Math.log1p); diff --git a/test/fixtures/traceur/Math/log2.module.js b/test/fixtures/traceur/Math/log2.module.js new file mode 100644 index 0000000000..fc5935d091 --- /dev/null +++ b/test/fixtures/traceur/Math/log2.module.js @@ -0,0 +1,9 @@ +import {log2} from '../../../src/runtime/polyfills/Math.js'; + +function testLog2(log2) { + assert.equal(1, log2(2)); + assert.equal(2, log2(4)); +} + +testLog2(log2); +testLog2(Math.log2); diff --git a/test/fixtures/traceur/Math/sign.module.js b/test/fixtures/traceur/Math/sign.module.js new file mode 100644 index 0000000000..35c816a583 --- /dev/null +++ b/test/fixtures/traceur/Math/sign.module.js @@ -0,0 +1,11 @@ +import {sign} from '../../../src/runtime/polyfills/Math.js'; + +function testSign(sign) { + assert.equal(1, sign(1)); + assert.equal(-1, sign(-1)); + assert.equal(0, sign(0)); + assert.equal(-0, sign(-0)); +} + +testSign(sign); +testSign(Math.sign); diff --git a/test/fixtures/traceur/Math/sinh.module.js b/test/fixtures/traceur/Math/sinh.module.js new file mode 100644 index 0000000000..c09335be35 --- /dev/null +++ b/test/fixtures/traceur/Math/sinh.module.js @@ -0,0 +1,11 @@ +import {sinh} from '../../../src/runtime/polyfills/Math.js'; + +function testSinh(sinh) { + assert.equal(0, sinh(0)); + assert.equal(-0, sinh(-0)); + assert.equal(Infinity, sinh(Infinity)); + assert.equal(-Infinity, sinh(-Infinity)); +} + +testSinh(sinh); +testSinh(Math.sinh); diff --git a/test/fixtures/traceur/Math/tanh.module.js b/test/fixtures/traceur/Math/tanh.module.js new file mode 100644 index 0000000000..056ce2fa32 --- /dev/null +++ b/test/fixtures/traceur/Math/tanh.module.js @@ -0,0 +1,11 @@ +import {tanh} from '../../../src/runtime/polyfills/Math.js'; + +function testTanh(tanh) { + assert.equal(0, tanh(0)); + assert.equal(-0, tanh(-0)); + assert.equal(1, tanh(Infinity)); + assert.equal(-1, tanh(-Infinity)); +} + +testTanh(tanh); +testTanh(Math.tanh); diff --git a/test/fixtures/traceur/Math/trunc.module.js b/test/fixtures/traceur/Math/trunc.module.js new file mode 100644 index 0000000000..c9841d70ef --- /dev/null +++ b/test/fixtures/traceur/Math/trunc.module.js @@ -0,0 +1,14 @@ +import {trunc} from '../../../src/runtime/polyfills/Math.js'; + +function testTrunc(trunc) { + assert.equal(0, trunc(0)); + assert.equal(-0, trunc(-0)); + assert.equal(Infinity, trunc(Infinity)); + assert.equal(-Infinity, trunc(-Infinity)); + assert.equal(42, trunc(42)); + assert.equal(2, trunc(2.5)); + assert.equal(-2, trunc(-2.5)); +} + +testTrunc(trunc); +testTrunc(Math.trunc); diff --git a/test/fixtures/traceur/MemberVariables/Assertions.module.js b/test/fixtures/traceur/MemberVariables/Assertions.module.js new file mode 100644 index 0000000000..e10e0997aa --- /dev/null +++ b/test/fixtures/traceur/MemberVariables/Assertions.module.js @@ -0,0 +1,25 @@ +// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js + +import '../TypeAssertions/resources/assert.js'; + +class Test { + a:string; + static b:string; + uninitialized: string; + c; +} + +var test = new Test(); + +test.c = 'str'; +assert.equal(test.c, 'str'); + +test.a = 'a'; +assert.equal(test.a, 'a'); + +Test.b = 'b'; +assert.equal(Test.b, 'b'); + +assert.throw(() => { test.uninitialized; }, chai.AssertionError); +assert.throw(() => { test.a = 0; }, chai.AssertionError); +assert.throw(() => { Test.b = 0; }, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/ClassExpression.module.js b/test/fixtures/traceur/MemberVariables/ClassExpression.module.js new file mode 100644 index 0000000000..d16a1ec925 --- /dev/null +++ b/test/fixtures/traceur/MemberVariables/ClassExpression.module.js @@ -0,0 +1,14 @@ +// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js + +import '../TypeAssertions/resources/assert.js'; + +class C extends class { + x: number; +} { + y: number; +} + +var c = new C(); + +assert.throw(() => { c.x = 'str'}, chai.AssertionError); +assert.throw(() => { c.y = 'str'}, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/Error_Disabled.js b/test/fixtures/traceur/MemberVariables/Error_Disabled.js new file mode 100644 index 0000000000..324e6b50b7 --- /dev/null +++ b/test/fixtures/traceur/MemberVariables/Error_Disabled.js @@ -0,0 +1,5 @@ +// Error: :4:4: Unexpected token : + +class C { + x: number; +} diff --git a/test/fixtures/traceur/MemberVariables/Inheritance.module.js b/test/fixtures/traceur/MemberVariables/Inheritance.module.js new file mode 100644 index 0000000000..9db32dfd84 --- /dev/null +++ b/test/fixtures/traceur/MemberVariables/Inheritance.module.js @@ -0,0 +1,24 @@ +// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js + +import '../TypeAssertions/resources/assert.js'; + +class Parent { + a:string; + static staticA:string; +} + +class Child extends Parent { + b:string; + static staticB:string; +} + +var child = new Child(); +child.a = 'defined in Parent'; +child.b = 'defined in Child'; +Child.staticA = 'static in Parent'; +Child.staticB = 'static in Child'; + +assert.throw(() => { child.a = 0; }, chai.AssertionError); +assert.throw(() => { child.b = 0; }, chai.AssertionError); +assert.throw(() => { Child.staticA = 0; }, chai.AssertionError); +assert.throw(() => { Child.staticB = 0; }, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/NestedClass.module.js b/test/fixtures/traceur/MemberVariables/NestedClass.module.js new file mode 100644 index 0000000000..1f0148011e --- /dev/null +++ b/test/fixtures/traceur/MemberVariables/NestedClass.module.js @@ -0,0 +1,17 @@ +// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js + +import '../TypeAssertions/resources/assert.js'; + +class C { + d() { + class D { + x: number; + } + + return new D(); + } +} + +var d = new C().d(); + +assert.throw(() => { d.x = 'string'}, chai.AssertionError); diff --git a/test/fixtures/traceur/Modules/EmptyNamedImport.module.js b/test/fixtures/traceur/Modules/EmptyNamedImport.module.js new file mode 100644 index 0000000000..866efd0a87 --- /dev/null +++ b/test/fixtures/traceur/Modules/EmptyNamedImport.module.js @@ -0,0 +1 @@ +import {} from './resources/m.js'; diff --git a/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js b/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js new file mode 100644 index 0000000000..1b8242c196 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js @@ -0,0 +1,10 @@ +// Error: test/feature/Modules/Error_DuplicateImport.module.js:6:9: 'a' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:5:9 +// Error: test/feature/Modules/Error_DuplicateImport.module.js:9:8: 'd' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:8:8 +// Error: test/feature/Modules/Error_DuplicateImport.module.js:10:9: 'd' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:8:8 + +import {a} from './resources/a.js'; +import {c as a} from './resources/c.js'; + +import d from './resources/default-class.js'; +import d from './resources/default-name.js'; +import {a as d} from './resources/a2.js'; diff --git a/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js b/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js new file mode 100644 index 0000000000..be6eb05625 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js @@ -0,0 +1,3 @@ +// Error: :3:9: Unexpected token if + +export {if}; diff --git a/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js b/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js new file mode 100644 index 0000000000..ac5e6de748 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js @@ -0,0 +1,3 @@ +// Error: :3:9: Unexpected token if + +export {if as x}; diff --git a/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js b/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js new file mode 100644 index 0000000000..da408f30cb --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js @@ -0,0 +1,3 @@ +// Error: test/feature/Modules/resources/export-conflict.js:2:8: Duplicate export. 'a' was previously exported at test/feature/Modules/resources/export-conflict.js:1:12 + +import {a} from './resources/export-conflict.js'; diff --git a/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js b/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js new file mode 100644 index 0000000000..2e9c0cea53 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js @@ -0,0 +1,6 @@ +// Error: test/feature/Modules/Error_ExportStarDuplicateExport.module.js:4:8: Duplicate export. 'a' was previously exported at test/feature/Modules/Error_ExportStarDuplicateExport.module.js:3:8 + +export * from './resources/a.js'; +export * from './resources/a2.js'; + +assert.equal(1, 2); diff --git a/test/fixtures/traceur/Modules/Error_ImportDefault.module.js b/test/fixtures/traceur/Modules/Error_ImportDefault.module.js new file mode 100644 index 0000000000..45f14c2c5a --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ImportDefault.module.js @@ -0,0 +1,3 @@ +// Error: test/feature/Modules/Error_ImportDefault.module.js:3:8: 'default' is not exported by 'test/feature/Modules/resources/a.js' + +import error from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_ImportStar.module.js b/test/fixtures/traceur/Modules/Error_ImportStar.module.js new file mode 100644 index 0000000000..e13fb713fe --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_ImportStar.module.js @@ -0,0 +1,4 @@ +// Error: :3:10: Unexpected token from + +import * from './resources/m.js'; +assert.equal(3, a + b); diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport.module.js new file mode 100644 index 0000000000..85fa2002dc --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_InvalidExport.module.js @@ -0,0 +1,3 @@ +// Error: :3:9: 'c' is not exported by 'test/feature/Modules/resources/a.js' + +export {c} from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js new file mode 100644 index 0000000000..25554def04 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js @@ -0,0 +1,3 @@ +// Error: :3:9: 'c' is not exported by 'test/feature/Modules/resources/a.js' + +export {c as d} from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js new file mode 100644 index 0000000000..0617075628 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js @@ -0,0 +1,3 @@ +// Error: test/feature/Modules/Error_InvalidExport3.module.js:3:9: 'c' is not exported by 'test/feature/Modules/resources/b.js' + +export {c as d} from './resources/b.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js new file mode 100644 index 0000000000..88f2765c41 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js @@ -0,0 +1,7 @@ +// Error: File not found 'test/feature/Modules/resources/no_such_file.js' +// Error: Specified as ./resources/no_such_file.js. +// Error: Imported by test/feature/Modules/Error_InvalidModuleDeclaration.module.js. +// Error: Normalizes to test/feature/Modules/resources/no_such_file.js +// Error: locate resolved against base './' + +import * as b from './resources/no_such_file.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js new file mode 100644 index 0000000000..7702371f2d --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js @@ -0,0 +1,3 @@ +// Error: 3:38: Unexpected token . + +import * as b from './resources/a.js'.c; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/Error_MissingExport.module.js b/test/fixtures/traceur/Modules/Error_MissingExport.module.js new file mode 100644 index 0000000000..9328df7011 --- /dev/null +++ b/test/fixtures/traceur/Modules/Error_MissingExport.module.js @@ -0,0 +1,7 @@ +// Error: :5:12: 'y' is not exported by 'test/feature/Modules/resources/x.js' +// Error: :5:15: 'z' is not exported by 'test/feature/Modules/resources/x.js' +// Error: :6:9: 'w' is not exported by 'test/feature/Modules/resources/x.js' + +import {x, y, z} from './resources/x.js'; +import {w} from './resources/x.js'; + diff --git a/test/fixtures/traceur/Modules/ExportStar.module.js b/test/fixtures/traceur/Modules/ExportStar.module.js new file mode 100644 index 0000000000..d8e3ccf84d --- /dev/null +++ b/test/fixtures/traceur/Modules/ExportStar.module.js @@ -0,0 +1,6 @@ +import * as o from './resources/o.js'; + +assert.equal(1, o.a); +assert.equal(2, o.b); +assert.equal(3, o.c); +assert.equal(4, o.d); diff --git a/test/fixtures/traceur/Modules/Exports.module.js b/test/fixtures/traceur/Modules/Exports.module.js new file mode 100644 index 0000000000..10a4d9a5d0 --- /dev/null +++ b/test/fixtures/traceur/Modules/Exports.module.js @@ -0,0 +1,17 @@ +import * as a from './resources/i.js'; + +(function() { + 'use strict'; + assert.equal(0, a.i); + a.inc(); + assert.equal(1, a.i); + + assert.throws(function() { + a.i = 2; + }, TypeError); +})(); + +assert.equal(1, a.i); + +import * as d from './resources/d.js'; +assert.equal('A', d.a); diff --git a/test/fixtures/traceur/Modules/ImportAsExportAs.module.js b/test/fixtures/traceur/Modules/ImportAsExportAs.module.js new file mode 100644 index 0000000000..148782a5d0 --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportAsExportAs.module.js @@ -0,0 +1,2 @@ +import * as m from './resources/m3.js'; +assert.equal(m.x, 'z'); diff --git a/test/fixtures/traceur/Modules/ImportCircular.module.js b/test/fixtures/traceur/Modules/ImportCircular.module.js new file mode 100644 index 0000000000..200b0d798a --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportCircular.module.js @@ -0,0 +1,6 @@ +// Error: Unsupported circular dependency between test/feature/Modules/ImportCircular.module.js and test/feature/Modules/resources/clockwise.js + +import {clockwise} from './resources/clockwise.js'; +export function counterclockwise() { + return clockwise(); +} diff --git a/test/fixtures/traceur/Modules/ImportDefault.module.js b/test/fixtures/traceur/Modules/ImportDefault.module.js new file mode 100644 index 0000000000..2dfc7591cb --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportDefault.module.js @@ -0,0 +1,17 @@ +import x from './resources/default.js'; +assert.equal(x, 42); + +import C from './resources/default-class.js'; +assert.equal(new C().m(), 'm'); + +import {default as D} from './resources/default-name.js'; +assert.equal(D, 4); + +import f from './resources/default-function.js'; +assert.equal(f(), 123); + +import E from './resources/default-class-expression.js'; +assert.equal(new E().n(), 'n'); + +import g from './resources/default-function-expression.js'; +assert.equal(g(), 456); diff --git a/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js b/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js new file mode 100644 index 0000000000..865e5c437e --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js @@ -0,0 +1,4 @@ +this.sideEffect = 1; +import {} from './resources/side-effect2.js'; +assert.equal(2, this.sideEffect); +this.sideEffect = 1; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/ImportFromModule.module.js b/test/fixtures/traceur/Modules/ImportFromModule.module.js new file mode 100644 index 0000000000..99ac97a287 --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportFromModule.module.js @@ -0,0 +1,17 @@ +import {a as renamedX, b} from './resources/m.js'; +import {a} from './resources/m.js'; +import * as m2 from './resources/m.js'; + +assert.equal(1, a); +assert.equal(1, renamedX); +assert.equal(2, b); + +import * as m from './resources/m.js'; + +assert.equal(a, renamedX); +assert.equal(a, m.a); + +import * as m3 from './resources/m.js'; + +assert.isTrue(m === m3); +assert.equal(b, m.b); diff --git a/test/fixtures/traceur/Modules/ImportNoImportClause.module.js b/test/fixtures/traceur/Modules/ImportNoImportClause.module.js new file mode 100644 index 0000000000..e83308df8d --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportNoImportClause.module.js @@ -0,0 +1,4 @@ +this.sideEffect = 1; +import './resources/side-effect.js'; +assert.equal(2, this.sideEffect); +this.sideEffect = 1; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/ImportReExportDefault.module.js b/test/fixtures/traceur/Modules/ImportReExportDefault.module.js new file mode 100644 index 0000000000..383f8241c6 --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportReExportDefault.module.js @@ -0,0 +1,2 @@ +import x from './resources/re-export-default.js'; +assert.equal(x, 42); diff --git a/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js b/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js new file mode 100644 index 0000000000..75071473a5 --- /dev/null +++ b/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js @@ -0,0 +1,2 @@ +import {x} from './resources/re-export-default-as.js'; +assert.equal(x, 42); diff --git a/test/fixtures/traceur/Modules/ModuleDefault.module.js b/test/fixtures/traceur/Modules/ModuleDefault.module.js new file mode 100644 index 0000000000..e2fe225850 --- /dev/null +++ b/test/fixtures/traceur/Modules/ModuleDefault.module.js @@ -0,0 +1,3 @@ +import * as m from './resources/default.js'; + +assert.equal(m.default, 42); diff --git a/test/fixtures/traceur/Modules/StaticMethod.module.js b/test/fixtures/traceur/Modules/StaticMethod.module.js new file mode 100644 index 0000000000..cc37654001 --- /dev/null +++ b/test/fixtures/traceur/Modules/StaticMethod.module.js @@ -0,0 +1,2 @@ +import {TestClass} from './resources/TestClass.js'; +assert.equal(TestClass.method(), 42); diff --git a/test/fixtures/traceur/Modules/ThisInModules.module.js b/test/fixtures/traceur/Modules/ThisInModules.module.js new file mode 100644 index 0000000000..0056ac4272 --- /dev/null +++ b/test/fixtures/traceur/Modules/ThisInModules.module.js @@ -0,0 +1,4 @@ +var global = this; + +import * as m from './resources/f.js'; +assert.equal(global, m.f()); diff --git a/test/fixtures/traceur/Modules/resources/TestClass.js b/test/fixtures/traceur/Modules/resources/TestClass.js new file mode 100644 index 0000000000..723df2b773 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/TestClass.js @@ -0,0 +1,5 @@ +export class TestClass { + static method() { + return 42; + } +} diff --git a/test/fixtures/traceur/Modules/resources/a.js b/test/fixtures/traceur/Modules/resources/a.js new file mode 100644 index 0000000000..d0ba61cbde --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/a.js @@ -0,0 +1 @@ +export var a = 'A'; diff --git a/test/fixtures/traceur/Modules/resources/a2.js b/test/fixtures/traceur/Modules/resources/a2.js new file mode 100644 index 0000000000..da6520dad9 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/a2.js @@ -0,0 +1 @@ +export var a = 'A2'; diff --git a/test/fixtures/traceur/Modules/resources/b.js b/test/fixtures/traceur/Modules/resources/b.js new file mode 100644 index 0000000000..e7d0cc71ec --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/b.js @@ -0,0 +1 @@ +import * as c from './c.js'; diff --git a/test/fixtures/traceur/Modules/resources/c.js b/test/fixtures/traceur/Modules/resources/c.js new file mode 100644 index 0000000000..fc55ed1488 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/c.js @@ -0,0 +1 @@ +export var c = 'C'; diff --git a/test/fixtures/traceur/Modules/resources/clockwise.js b/test/fixtures/traceur/Modules/resources/clockwise.js new file mode 100644 index 0000000000..02e22761f8 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/clockwise.js @@ -0,0 +1,4 @@ +import {counterclockwise} from '../ImportCircular.module.js'; +export function clockwise() { + return 'The circle is complete'; +} diff --git a/test/fixtures/traceur/Modules/resources/d.js b/test/fixtures/traceur/Modules/resources/d.js new file mode 100644 index 0000000000..4a9ab8813e --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/d.js @@ -0,0 +1 @@ +export * from './a.js'; diff --git a/test/fixtures/traceur/Modules/resources/default-class-expression.js b/test/fixtures/traceur/Modules/resources/default-class-expression.js new file mode 100644 index 0000000000..4dcbb96368 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default-class-expression.js @@ -0,0 +1,5 @@ +export default class { + n() { + return 'n'; + } +} diff --git a/test/fixtures/traceur/Modules/resources/default-class.js b/test/fixtures/traceur/Modules/resources/default-class.js new file mode 100644 index 0000000000..8c1e65c3be --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default-class.js @@ -0,0 +1,7 @@ +export default class C { + m() { + return 'm'; + } +} + +assert.instanceOf(C, Function); diff --git a/test/fixtures/traceur/Modules/resources/default-function-expression.js b/test/fixtures/traceur/Modules/resources/default-function-expression.js new file mode 100644 index 0000000000..442eb2ccac --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default-function-expression.js @@ -0,0 +1,3 @@ +export default function() { + return 456; +} diff --git a/test/fixtures/traceur/Modules/resources/default-function.js b/test/fixtures/traceur/Modules/resources/default-function.js new file mode 100644 index 0000000000..3522838092 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default-function.js @@ -0,0 +1,5 @@ +export default function f() { + return 123; +} + +assert.instanceOf(f, Function); diff --git a/test/fixtures/traceur/Modules/resources/default-name.js b/test/fixtures/traceur/Modules/resources/default-name.js new file mode 100644 index 0000000000..fc9ffb7a38 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default-name.js @@ -0,0 +1,2 @@ +var p = 4; +export {p as default}; diff --git a/test/fixtures/traceur/Modules/resources/default.js b/test/fixtures/traceur/Modules/resources/default.js new file mode 100644 index 0000000000..7a4e8a723a --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/default.js @@ -0,0 +1 @@ +export default 42; diff --git a/test/fixtures/traceur/Modules/resources/export-conflict.js b/test/fixtures/traceur/Modules/resources/export-conflict.js new file mode 100644 index 0000000000..830463412f --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/export-conflict.js @@ -0,0 +1,2 @@ +export var a = 'a'; +export * from './a.js'; // also exports a diff --git a/test/fixtures/traceur/Modules/resources/f.js b/test/fixtures/traceur/Modules/resources/f.js new file mode 100644 index 0000000000..dff8ba2f28 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/f.js @@ -0,0 +1 @@ +export var f = () => this; diff --git a/test/fixtures/traceur/Modules/resources/i.js b/test/fixtures/traceur/Modules/resources/i.js new file mode 100644 index 0000000000..1096ab76ca --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/i.js @@ -0,0 +1,4 @@ +export var i = 0; +export function inc() { + i++; +} diff --git a/test/fixtures/traceur/Modules/resources/m.js b/test/fixtures/traceur/Modules/resources/m.js new file mode 100644 index 0000000000..0b0c3304ff --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/m.js @@ -0,0 +1,2 @@ +export var a = 1; +export var b = 2; diff --git a/test/fixtures/traceur/Modules/resources/m2.js b/test/fixtures/traceur/Modules/resources/m2.js new file mode 100644 index 0000000000..4fce0644f6 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/m2.js @@ -0,0 +1,2 @@ +var z = 'z'; +export {z as var}; diff --git a/test/fixtures/traceur/Modules/resources/m3.js b/test/fixtures/traceur/Modules/resources/m3.js new file mode 100644 index 0000000000..d0b61d8faf --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/m3.js @@ -0,0 +1,2 @@ +import {var as x} from './m2.js'; +export {x}; diff --git a/test/fixtures/traceur/Modules/resources/n.js b/test/fixtures/traceur/Modules/resources/n.js new file mode 100644 index 0000000000..bb41d4610f --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/n.js @@ -0,0 +1,2 @@ +export var c = 3; +export var d = 4; diff --git a/test/fixtures/traceur/Modules/resources/o.js b/test/fixtures/traceur/Modules/resources/o.js new file mode 100644 index 0000000000..e0a1758a6a --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/o.js @@ -0,0 +1,2 @@ +export * from './m.js'; +export * from './n.js'; diff --git a/test/fixtures/traceur/Modules/resources/re-export-default-as.js b/test/fixtures/traceur/Modules/resources/re-export-default-as.js new file mode 100644 index 0000000000..d6ee20f83c --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/re-export-default-as.js @@ -0,0 +1 @@ +export {default as x} from './default.js'; diff --git a/test/fixtures/traceur/Modules/resources/re-export-default.js b/test/fixtures/traceur/Modules/resources/re-export-default.js new file mode 100644 index 0000000000..a2229f0904 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/re-export-default.js @@ -0,0 +1 @@ +export {default} from './default.js'; diff --git a/test/fixtures/traceur/Modules/resources/side-effect.js b/test/fixtures/traceur/Modules/resources/side-effect.js new file mode 100644 index 0000000000..cff3fea11b --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/side-effect.js @@ -0,0 +1 @@ +this.sideEffect++; diff --git a/test/fixtures/traceur/Modules/resources/side-effect2.js b/test/fixtures/traceur/Modules/resources/side-effect2.js new file mode 100644 index 0000000000..23cc5b9c39 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/side-effect2.js @@ -0,0 +1,3 @@ +this.sideEffect++; + + diff --git a/test/fixtures/traceur/Modules/resources/x.js b/test/fixtures/traceur/Modules/resources/x.js new file mode 100644 index 0000000000..7e0623ea76 --- /dev/null +++ b/test/fixtures/traceur/Modules/resources/x.js @@ -0,0 +1 @@ +export var x = 'X'; diff --git a/test/fixtures/traceur/Number/EPSILON.module.js b/test/fixtures/traceur/Number/EPSILON.module.js new file mode 100644 index 0000000000..8bb6716b37 --- /dev/null +++ b/test/fixtures/traceur/Number/EPSILON.module.js @@ -0,0 +1,10 @@ +import {EPSILON} from '../../../src/runtime/polyfills/Number.js'; + +function testEpsilon(epsilon) { + assert.equal(epsilon, Math.pow(2, -52)); + assert.equal(1 + epsilon - 1, epsilon); + assert.equal(1 + epsilon / 2 - 1, 0); +} + +testEpsilon(EPSILON); +testEpsilon(Number.EPSILON); diff --git a/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js b/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js new file mode 100644 index 0000000000..44f20fb78b --- /dev/null +++ b/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js @@ -0,0 +1,4 @@ +import {MAX_SAFE_INTEGER} from '../../../src/runtime/polyfills/Number.js'; + +assert.equal(MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); +assert.equal(Number.MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); diff --git a/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js b/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js new file mode 100644 index 0000000000..450d5b0b07 --- /dev/null +++ b/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js @@ -0,0 +1,4 @@ +import {MIN_SAFE_INTEGER} from '../../../src/runtime/polyfills/Number.js'; + +assert.equal(MIN_SAFE_INTEGER, -Math.pow(2, 53) + 1); +assert.equal(Number.MIN_SAFE_INTEGER, -Math.pow(2, 53) + 1); diff --git a/test/fixtures/traceur/Number/isFinite.module.js b/test/fixtures/traceur/Number/isFinite.module.js new file mode 100644 index 0000000000..51e5d5d66f --- /dev/null +++ b/test/fixtures/traceur/Number/isFinite.module.js @@ -0,0 +1,30 @@ +import {isFinite} from '../../../src/runtime/polyfills/Number.js'; + +function testIsFinite(isFinite) { + assert.isTrue(isFinite(-0)); + assert.isTrue(isFinite(0)); + assert.isTrue(isFinite(Number.EPSILON)); + assert.isTrue(isFinite(Number.MAX_SAFE_INTEGER + 23)); + assert.isTrue(isFinite(Number.MAX_VALUE)); + assert.isTrue(isFinite(Number.MIN_SAFE_INTEGER - 13)); + assert.isTrue(isFinite(Number.MIN_VALUE)); + + assert.isFalse(isFinite('-0')); + assert.isFalse(isFinite('0')); + assert.isFalse(isFinite('x')); + assert.isFalse(isFinite(-Infinity)); + assert.isFalse(isFinite(-NaN)); + assert.isFalse(isFinite(Infinity)); + assert.isFalse(isFinite(NaN)); + assert.isFalse(isFinite(Number.NEGATIVE_INFINITY)); + assert.isFalse(isFinite(Number.POSITIVE_INFINITY)); + assert.isFalse(isFinite(false)); + assert.isFalse(isFinite(new Number(1))); + assert.isFalse(isFinite(null)); + assert.isFalse(isFinite(true)); + assert.isFalse(isFinite(undefined)); + assert.isFalse(isFinite({valueOf() { return 1; }})); +} + +testIsFinite(isFinite); +testIsFinite(Number.isFinite); diff --git a/test/fixtures/traceur/Number/isInteger.module.js b/test/fixtures/traceur/Number/isInteger.module.js new file mode 100644 index 0000000000..73df049c1d --- /dev/null +++ b/test/fixtures/traceur/Number/isInteger.module.js @@ -0,0 +1,30 @@ +import {isInteger} from '../../../src/runtime/polyfills/Number.js'; + +function testIsInteger(isInteger) { + assert.isTrue(isInteger(-0)); + assert.isTrue(isInteger(0)); + assert.isTrue(isInteger(Number.MAX_SAFE_INTEGER + 23)); + assert.isTrue(isInteger(Number.MAX_VALUE)); + assert.isTrue(isInteger(Number.MIN_SAFE_INTEGER - 13)); + + assert.isFalse(isInteger('-0')); + assert.isFalse(isInteger('0')); + assert.isFalse(isInteger('x')); + assert.isFalse(isInteger(-Infinity)); + assert.isFalse(isInteger(-NaN)); + assert.isFalse(isInteger(Infinity)); + assert.isFalse(isInteger(NaN)); + assert.isFalse(isInteger(Number.EPSILON)); + assert.isFalse(isInteger(Number.MIN_VALUE)); + assert.isFalse(isInteger(Number.NEGATIVE_INFINITY)); + assert.isFalse(isInteger(Number.POSITIVE_INFINITY)); + assert.isFalse(isInteger(false)); + assert.isFalse(isInteger(new Number(1))); + assert.isFalse(isInteger(null)); + assert.isFalse(isInteger(true)); + assert.isFalse(isInteger(undefined)); + assert.isFalse(isInteger({valueOf() { return 1; }})); +} + +testIsInteger(isInteger); +testIsInteger(Number.isInteger); diff --git a/test/fixtures/traceur/Number/isNaN.module.js b/test/fixtures/traceur/Number/isNaN.module.js new file mode 100644 index 0000000000..037696594e --- /dev/null +++ b/test/fixtures/traceur/Number/isNaN.module.js @@ -0,0 +1,30 @@ +import {isNaN} from '../../../src/runtime/polyfills/Number.js'; + +function testIsNaN(isNaN) { + assert.isTrue(isNaN(NaN)); + assert.isTrue(isNaN(-NaN)); + + assert.isFalse(isNaN('-0')); + assert.isFalse(isNaN('0')); + assert.isFalse(isNaN('NaN')); + assert.isFalse(isNaN('x')); + assert.isFalse(isNaN(-0)); + assert.isFalse(isNaN(0)); + assert.isFalse(isNaN(Infinity)); + assert.isFalse(isNaN(Number.EPSILON)); + assert.isFalse(isNaN(Number.MAX_SAFE_INTEGER + 23)); + assert.isFalse(isNaN(Number.MAX_VALUE)); + assert.isFalse(isNaN(Number.MIN_SAFE_INTEGER - 13)); + assert.isFalse(isNaN(Number.MIN_VALUE)); + assert.isFalse(isNaN(Number.NEGATIVE_INFINITY)); + assert.isFalse(isNaN(Number.POSITIVE_INFINITY)); + assert.isFalse(isNaN(false)); + assert.isFalse(isNaN(new Number(NaN))); + assert.isFalse(isNaN(null)); + assert.isFalse(isNaN(true)); + assert.isFalse(isNaN(undefined)); + assert.isFalse(isNaN({valueOf() { return NaN; }})); +} + +testIsNaN(isNaN); +testIsNaN(Number.isNaN); diff --git a/test/fixtures/traceur/Number/isSafeInteger.module.js b/test/fixtures/traceur/Number/isSafeInteger.module.js new file mode 100644 index 0000000000..285ce2a8f2 --- /dev/null +++ b/test/fixtures/traceur/Number/isSafeInteger.module.js @@ -0,0 +1,33 @@ +import {isSafeInteger} from '../../../src/runtime/polyfills/Number.js'; + +function testIsSafeInteger(isSafeInteger) { + assert.isTrue(isSafeInteger(-0)); + assert.isTrue(isSafeInteger(0)); + assert.isTrue(isSafeInteger(Number.MAX_SAFE_INTEGER - 23)); + assert.isTrue(isSafeInteger(Number.MAX_SAFE_INTEGER)); + assert.isTrue(isSafeInteger(Number.MIN_SAFE_INTEGER + 13)); + + assert.isFalse(isSafeInteger('-0')); + assert.isFalse(isSafeInteger('0')); + assert.isFalse(isSafeInteger('x')); + assert.isFalse(isSafeInteger(-Infinity)); + assert.isFalse(isSafeInteger(-NaN)); + assert.isFalse(isSafeInteger(Infinity)); + assert.isFalse(isSafeInteger(NaN)); + assert.isFalse(isSafeInteger(Number.EPSILON)); + assert.isFalse(isSafeInteger(Number.MAX_SAFE_INTEGER + 23)); + assert.isFalse(isSafeInteger(Number.MAX_VALUE)); + assert.isFalse(isSafeInteger(Number.MIN_SAFE_INTEGER - 13)); + assert.isFalse(isSafeInteger(Number.MIN_VALUE)); + assert.isFalse(isSafeInteger(Number.NEGATIVE_INFINITY)); + assert.isFalse(isSafeInteger(Number.POSITIVE_INFINITY)); + assert.isFalse(isSafeInteger(false)); + assert.isFalse(isSafeInteger(new Number(1))); + assert.isFalse(isSafeInteger(null)); + assert.isFalse(isSafeInteger(true)); + assert.isFalse(isSafeInteger(undefined)); + assert.isFalse(isSafeInteger({valueOf() { return 1; }})); +} + +testIsSafeInteger(isSafeInteger); +testIsSafeInteger(Number.isSafeInteger); diff --git a/test/fixtures/traceur/NumericLiteral/Error_Disabled.js b/test/fixtures/traceur/NumericLiteral/Error_Disabled.js new file mode 100644 index 0000000000..dd9ad409cd --- /dev/null +++ b/test/fixtures/traceur/NumericLiteral/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --numeric-literals=false +// Error: :4:2: Semi-colon expected + +0b11; diff --git a/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js b/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js new file mode 100644 index 0000000000..4f64b8794f --- /dev/null +++ b/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js @@ -0,0 +1,4 @@ +// Options: --numeric-literals +// Error: :4:3: Binary Integer Literal must contain at least one digit + +0b; diff --git a/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js b/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js new file mode 100644 index 0000000000..362fff7613 --- /dev/null +++ b/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js @@ -0,0 +1,4 @@ +// Options: --numeric-literals +// Error: :4:3: Octal Integer Literal must contain at least one digit + +0o; diff --git a/test/fixtures/traceur/NumericLiteral/Simple.js b/test/fixtures/traceur/NumericLiteral/Simple.js new file mode 100644 index 0000000000..082038ccb7 --- /dev/null +++ b/test/fixtures/traceur/NumericLiteral/Simple.js @@ -0,0 +1,88 @@ +// Options: --numeric-literals + +(function() { + assert.equal(0, 0b0); + assert.equal(1, 0b1); + assert.equal(3, 0b11); + assert.equal(3, 0b011); + assert.equal(0, 0B0); + assert.equal(1, 0B1); + assert.equal(3, 0B11); + assert.equal(3, 0B011); + + assert.equal(0, 0o0); + assert.equal(1, 0o1); + assert.equal(7, 0o7); + assert.equal(8, 0o10); + assert.equal(8, 0o010); + assert.equal(63, 0o77); + assert.equal(0, 0O0); + assert.equal(1, 0O1); + assert.equal(7, 0O7); + assert.equal(8, 0O10); + assert.equal(8, 0O010); + assert.equal(63, 0O77); + + var o = { + 0b0: 0, + 0b1: 1, + 0b10: 2, + 0B11: 3, + 0B0100: 4 + }; + assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); + + var o = { + 0o0: 0, + 0o1: 1, + 0o7: 7, + 0O10: 8, + 0O011: 9 + }; + assertArrayEquals(['0', '1', '7', '8', '9'], Object.keys(o)); + + var o = { + get 0b0() {}, + get 0b1() {}, + get 0b10() {}, + get 0B11() {}, + get 0B0100() {} + }; + assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); + + var o = { + set 0o0(v) {}, + set 0o1(v) {}, + set 0o7(v) {}, + set 0O10(v) {}, + set 0O011(v) {} + }; + assertArrayEquals(['0', '1', '7', '8', '9'], Object.keys(o)); + + var o = { + 0b0() {}, + 0b1() {}, + 0b10() {}, + 0B11() {}, + 0B0100() {} + }; + assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); + + class C { + 0b0() {} + get 0b1() {} + set 0b10(v) {} + static 0B11() {} + static get 0B100() {} + static set 0B101(v) {} + + 0o6() {} + get 0o7() {} + set 0o10(v) {} + static 0O11() {} + static get 0O12() {} + static set 0O13(v) {} + } + assertArrayEquals(['0', '1', '2', '6', '7', '8'], Object.keys(C.prototype)); + assertArrayEquals(['3', '4', '5', '9', '10', '11'], Object.keys(C)); +})(); \ No newline at end of file diff --git a/test/fixtures/traceur/ObjectAssign.js b/test/fixtures/traceur/ObjectAssign.js new file mode 100644 index 0000000000..05841a614c --- /dev/null +++ b/test/fixtures/traceur/ObjectAssign.js @@ -0,0 +1,11 @@ +var target = {a: 0, b: 2}; +var source = {a: 1, c: 3, get d() { return this.b || this.a + 64; }}; +var assigned = Object.assign(target, source); + +// ---------------------------------------------------------------------------- + +assert.isTrue(Object.hasOwnProperty("assign")); +assert.equal(assigned.a, source.a); +assert.equal(assigned.b, target.b); +assert.equal(assigned.c, source.c); +assert.equal(assigned.d, source.d); diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js new file mode 100644 index 0000000000..069c869b11 --- /dev/null +++ b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js @@ -0,0 +1,5 @@ +// Options: --property-name-shorthand=false +// Error: :5:16: Unexpected token x + +var x = 42; +var object = {x}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js new file mode 100644 index 0000000000..4d3f5644cb --- /dev/null +++ b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js @@ -0,0 +1,3 @@ +// Error: :3:18: Unexpected token var + +var object = {var}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js new file mode 100644 index 0000000000..e7c4d29fe4 --- /dev/null +++ b/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js @@ -0,0 +1,3 @@ +// Error: missingVarObjectInitializerShorthand is not defined + +var object = {missingVarObjectInitializerShorthand}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js b/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js new file mode 100644 index 0000000000..591866b272 --- /dev/null +++ b/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js @@ -0,0 +1,8 @@ +var x = 42; +var y = 43; +var object = {x, y}; + +// ---------------------------------------------------------------------------- + +assert.equal(42, object.x); +assert.equal(43, object.y); diff --git a/test/fixtures/traceur/ObjectIs.js b/test/fixtures/traceur/ObjectIs.js new file mode 100644 index 0000000000..2f19b0edda --- /dev/null +++ b/test/fixtures/traceur/ObjectIs.js @@ -0,0 +1,34 @@ +assert.isTrue(Object.is(1, 1)); +assert.isTrue(Object.is(0, 0)); +assert.isTrue(Object.is(-0, -0)); +assert.isTrue(Object.is(NaN, NaN)); +assert.isTrue(Object.is(Infinity, Infinity)); +assert.isTrue(Object.is(-Infinity, -Infinity)); + +assert.isFalse(Object.is(0, -0)); +assert.isFalse(Object.is(-0, 0)); +assert.isFalse(Object.is(Infinity, -Infinity)); +assert.isFalse(Object.is(-Infinity, Infinity)); + +assert.isTrue(Object.is(true, true)); +assert.isTrue(Object.is(false, false)); + +assert.isTrue(Object.is(null, null)); +assert.isTrue(Object.is(undefined, undefined)); + +assert.isTrue(Object.is('', '')); +assert.isTrue(Object.is('a', 'a')); + +{ + var object = {}; + assert.isTrue(Object.is(object, object)); +} + +assert.isFalse(Object.is(new String('a'), new String('a'))); +assert.isFalse(Object.is(new Boolean, new Boolean)); +assert.isFalse(Object.is(new Number, new Number)); +assert.isFalse(Object.is(new Date(0), new Date(0))); +assert.isFalse(Object.is(/re/, /re/)); +assert.isFalse(Object.is({}, {})); +assert.isFalse(Object.is([], [])); +assert.isFalse(Object.is(function() {}, function() {})); diff --git a/test/fixtures/traceur/ObjectMixin.js b/test/fixtures/traceur/ObjectMixin.js new file mode 100644 index 0000000000..372984f92a --- /dev/null +++ b/test/fixtures/traceur/ObjectMixin.js @@ -0,0 +1,11 @@ +var target = {a: 0, b: 2}; +var source = {a: 1, c: 3, get d() { return this.b || this.a + 64; }}; +var mixed = Object.mixin(target, source); + +// ---------------------------------------------------------------------------- + +assert.isTrue(Object.hasOwnProperty("mixin")); +assert.equal(mixed.a, source.a); +assert.equal(mixed.b, target.b); +assert.equal(mixed.c, source.c); +assert.notEqual(mixed.d, source.d); diff --git a/test/fixtures/traceur/Promise.js b/test/fixtures/traceur/Promise.js new file mode 100644 index 0000000000..a5f7679209 --- /dev/null +++ b/test/fixtures/traceur/Promise.js @@ -0,0 +1,9 @@ +// Async. + +var p = new Promise((resolve, reject) => { + resolve(42); +}); +p.then((v) => { + assert.equal(v, 42); + done(); +}); diff --git a/test/fixtures/traceur/PromiseAll.js b/test/fixtures/traceur/PromiseAll.js new file mode 100644 index 0000000000..04ffbd74d8 --- /dev/null +++ b/test/fixtures/traceur/PromiseAll.js @@ -0,0 +1,13 @@ +// Async. + +function* gen() { + yield 1; + yield 2; +} + +var p2 = Promise.all(gen()); + +p2.then((v) => { + assert.deepEqual(v, [1,2]); + done(); +}); diff --git a/test/fixtures/traceur/PromiseResolve.js b/test/fixtures/traceur/PromiseResolve.js new file mode 100644 index 0000000000..69c9aadd3c --- /dev/null +++ b/test/fixtures/traceur/PromiseResolve.js @@ -0,0 +1,3 @@ +var p = Promise.resolve(42); + +assert.equal(p, Promise.resolve(p)); diff --git a/test/fixtures/traceur/PromiseThrowInResolve.js b/test/fixtures/traceur/PromiseThrowInResolve.js new file mode 100644 index 0000000000..e380f26948 --- /dev/null +++ b/test/fixtures/traceur/PromiseThrowInResolve.js @@ -0,0 +1,15 @@ +// Async. + +var message = 'testing'; +var throwInResolve = new Promise((resolve, reject) => { + resolve(42); +}); +throwInResolve.then((v) => { + throw new Error(message); +}).catch(function(ex) { + // When catch() is used in testing, these asserts would + // not be called, just the done() to avoid timeout. + assert(ex instanceof Error); + assert(ex.toString().indexOf(message) !== -1); + done(); +}).catch(done); diff --git a/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js b/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js new file mode 100644 index 0000000000..4badc9f2cf --- /dev/null +++ b/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js @@ -0,0 +1,8 @@ +// Options: --property-methods=false +// Error: :5:9: Unexpected token ( + +var object = { + method() { + return 42; + } +}; diff --git a/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js b/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js new file mode 100644 index 0000000000..dbb08846de --- /dev/null +++ b/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js @@ -0,0 +1,8 @@ +assert.throws(() => { + var object = { + "notNamedField"() { + return notNamedField; + } + }; + object.notNamedField(); +}, ReferenceError); diff --git a/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js b/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js new file mode 100644 index 0000000000..a913227b1b --- /dev/null +++ b/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js @@ -0,0 +1,71 @@ +var object = { + x: { + j() { + return this.j; + } + }, + f() { + return this.f; + }, + 'g'() {}, + "h"() {}, + 42() {}, + null() {}, + true() {}, + false() {}, + function() {}, + var() {}, + 'class'() {} // NodeJS incorrectly flags {class: ...} as an error. +}; + +// ---------------------------------------------------------------------------- + +assertArrayEquals([ + '42', + 'x', + 'f', + 'g', + 'h', + 'null', + 'true', + 'false', + 'function', + 'var', + 'class' +], Object.keys(object)); + +function assertMethod(object, name) { + assert.isTrue(object.hasOwnProperty(name)); + var descriptor = Object.getOwnPropertyDescriptor(object, name); + assert.equal('object', typeof descriptor); + assert.isTrue(descriptor.enumerable); + assert.equal('function', typeof object[name]); + // IE does not have a name property on functions. + assert.isTrue(object[name].name === '' || object[name].name === undefined); +} + +assertMethod(object, 'f'); +assertMethod(object, 'g'); +assertMethod(object, 'h'); +assertMethod(object, '42'); +assertMethod(object, 'null'); +assertMethod(object, 'true'); +assertMethod(object, 'false'); +assertMethod(object, 'function'); +assertMethod(object, 'var'); +assertMethod(object, 'class'); + +assert.equal(object.f, object.f()); + +// Test the nested object. +assertArrayEquals(['j'], Object.keys(object.x)); +assertMethod(object.x, 'j'); + +// Test name binding. +var m = 42; +class C { + m() { + return m; + } +} +assert.equal(42, new C().m()) diff --git a/test/fixtures/traceur/README b/test/fixtures/traceur/README new file mode 100644 index 0000000000..aebbfed8cd --- /dev/null +++ b/test/fixtures/traceur/README @@ -0,0 +1,23 @@ +This directory contains the "feature" tests. Each script here is a Traceur +script that uses a feature and then validates its behavior. These scripts can +be executed by running "/test/alltests.html" or "node testfeature.js" + +If any of the first lines of a feature script starts with "// Should not +compile." then that script intentionally contains an error that should *not* +successfully compile. The test harness will validate that attempting to compile +it generates an error. By convention, feature scripts like this are named +starting with "Error_". + +If any of the first lines of a feature script starts with "// Skip." we ignore +the test. + +If any of the first lines of a feature script starts with "// Async." there +will be a global function called 'done' that is expected to be called when the +test is done. + +If any of the first lines of a feature script starts with "// Only in browser." +we ignore the test if it is run using the Node.js test runner. + +If any of the first lines of a feature script starts with "// Options: " the +rest of that line is treated as a command line. The options is set as if passed +on the command line. diff --git a/test/fixtures/traceur/RegularExpression/Simple.js b/test/fixtures/traceur/RegularExpression/Simple.js new file mode 100644 index 0000000000..f425a4317c --- /dev/null +++ b/test/fixtures/traceur/RegularExpression/Simple.js @@ -0,0 +1,9 @@ +// Options: --unicode-expressions + +// Only test if the transformation worked or not. For everything else, defer +// to regexpu's test suite: +// https://github.com/mathiasbynens/regexpu/blob/master/tests/tests.js +(function() { + assert(/a/u.source === 'a'); + assert(/a.b/u.source === 'a(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF])b'); +})(); diff --git a/test/fixtures/traceur/Rest/Error_NotLast.js b/test/fixtures/traceur/Rest/Error_NotLast.js new file mode 100644 index 0000000000..e6ff97f3cf --- /dev/null +++ b/test/fixtures/traceur/Rest/Error_NotLast.js @@ -0,0 +1,6 @@ +// Error: :3:46: Unexpected token , + +function invalidParam(noDefault, ...restParam, noRestAgain) { + // Should fail to parse since non rest param is not allowed after + // param. +} \ No newline at end of file diff --git a/test/fixtures/traceur/Rest/Error_SetAccessor.js b/test/fixtures/traceur/Rest/Error_SetAccessor.js new file mode 100644 index 0000000000..754e2be8ea --- /dev/null +++ b/test/fixtures/traceur/Rest/Error_SetAccessor.js @@ -0,0 +1,7 @@ +// Error: :4:9: Unexpected token ... + +var object = { + set x(...rest) { + // rest is not allowed for set accessor + } +}; diff --git a/test/fixtures/traceur/Rest/Simple.js b/test/fixtures/traceur/Rest/Simple.js new file mode 100644 index 0000000000..00350014e1 --- /dev/null +++ b/test/fixtures/traceur/Rest/Simple.js @@ -0,0 +1,16 @@ +function f(...p) { + return p; +} + +function g(a, ...p) { + return p; +} + +assertArrayEquals([], f()); +assertArrayEquals([0], f(0)); +assertArrayEquals([0, 1], f(0, 1)); + +assertArrayEquals([], g()); +assertArrayEquals([], g(0)); +assertArrayEquals([1], g(0, 1)); +assertArrayEquals([1, 2], g(0, 1, 2)); diff --git a/test/fixtures/traceur/Scope/BlockBinding10.js b/test/fixtures/traceur/Scope/BlockBinding10.js new file mode 100644 index 0000000000..d7500efcfd --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding10.js @@ -0,0 +1,15 @@ +// Options: --block-binding + +function f() { + return 'outer'; +} + +{ + var f = function f() { + return 'inner'; + }; + + assert.equal('inner', f()); +} + +assert.equal('inner', f()); diff --git a/test/fixtures/traceur/Scope/BlockBinding11.js b/test/fixtures/traceur/Scope/BlockBinding11.js new file mode 100644 index 0000000000..07ac0a07f1 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding11.js @@ -0,0 +1,18 @@ +// Options: --block-binding + +let result = []; +let obj = {a : 'hello a', b : 'hello b', c : 'hello c' }; +let keys = Object.keys(obj); + +// NOTE: Do not fix the deviation from Google JS coding style. This was done in +// order to check codegen for single statements in the body of 'for' loops. +for (let i = 0; i < keys.length; i++) + result.push( + function() { return obj[keys[i]]; } + ); + +// ---------------------------------------------------------------------------- + +assert.equal('hello a', result[0]()); +assert.equal('hello b', result[1]()); +assert.equal('hello c', result[2]()); diff --git a/test/fixtures/traceur/Scope/BlockBinding2.js b/test/fixtures/traceur/Scope/BlockBinding2.js new file mode 100644 index 0000000000..afb64e1664 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding2.js @@ -0,0 +1,15 @@ +// Options: --block-binding + +let result = []; +let obj = {a : 'hello a', b : 'hello b', c : 'hello c' }; +for (let x in obj) { + result.push( + function() { return obj[x]; } + ); +} + +// ---------------------------------------------------------------------------- + +assert.equal('hello a', result[0]()); +assert.equal('hello b', result[1]()); +assert.equal('hello c', result[2]()); diff --git a/test/fixtures/traceur/Scope/BlockBinding3.js b/test/fixtures/traceur/Scope/BlockBinding3.js new file mode 100644 index 0000000000..4d620100ca --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding3.js @@ -0,0 +1,17 @@ +// Options: --block-binding + +var f1, f2; + +{ + let z = 'z1 value'; + f1 = function() { return z; }; +} +{ + let z = 'z2 value'; + f2 = function() { return z; }; +} + +// ---------------------------------------------------------------------------- + +assert.equal('z1 value', f1()); +assert.equal('z2 value', f2()); diff --git a/test/fixtures/traceur/Scope/BlockBinding4.js b/test/fixtures/traceur/Scope/BlockBinding4.js new file mode 100644 index 0000000000..b22f6af158 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding4.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +let result = []; +for (let a = 1; a < 3; a++) { + result.push( + function() { return 'for ' + a; } + ); +} + +// ---------------------------------------------------------------------------- + +assert.equal('for 1', result[0]()); +assert.equal('for 2', result[1]()); +assert.equal(2, result.length); diff --git a/test/fixtures/traceur/Scope/BlockBinding5.js b/test/fixtures/traceur/Scope/BlockBinding5.js new file mode 100644 index 0000000000..92284dc856 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding5.js @@ -0,0 +1,18 @@ +// Options: --block-binding + +let result = []; +for (let i = 1; i < 3; i ++) { + for (let j = 9; j > 7; j --) { + result.push( + function() { return i + ':' + j; } + ); + } +} + +// ---------------------------------------------------------------------------- + +assert.equal('1:9', result[0]()); +assert.equal('1:8', result[1]()); +assert.equal('2:9', result[2]()); +assert.equal('2:8', result[3]()); +assert.equal(4, result.length); diff --git a/test/fixtures/traceur/Scope/BlockBinding6.js b/test/fixtures/traceur/Scope/BlockBinding6.js new file mode 100644 index 0000000000..abaf0feb5d --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding6.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +function testBlock() { + // Test function expressions. + { + var x = function g() { return 'g'; } || function h() { return 'h'; }; + return x; + } +} + +// ---------------------------------------------------------------------------- + +var result = testBlock(); +assert.equal('g', result()); diff --git a/test/fixtures/traceur/Scope/BlockBinding7.js b/test/fixtures/traceur/Scope/BlockBinding7.js new file mode 100644 index 0000000000..b3fa8ddd15 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding7.js @@ -0,0 +1,15 @@ +// Options: --block-binding + +function blockTest() { + { + let x = 'let x value'; + function g() { + return x; + } + return g; + } +} + +// ---------------------------------------------------------------------------- + +assert.equal('let x value', blockTest()()); diff --git a/test/fixtures/traceur/Scope/BlockBinding8.js b/test/fixtures/traceur/Scope/BlockBinding8.js new file mode 100644 index 0000000000..ed1f6877b0 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding8.js @@ -0,0 +1,15 @@ +// Options: --block-binding + +function f() { + return 'outer'; +} + +{ + function f() { + return 'inner'; + } + + assert.equal('inner', f()); +} + +assert.equal('outer', f()); diff --git a/test/fixtures/traceur/Scope/BlockBinding9.js b/test/fixtures/traceur/Scope/BlockBinding9.js new file mode 100644 index 0000000000..3a88b3b819 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBinding9.js @@ -0,0 +1,15 @@ +// Options: --block-binding + +function f() { + return 'outer'; +} + +{ + (function f() { + return 'inner'; + }); + + assert.equal('outer', f()); +} + +assert.equal('outer', f()); diff --git a/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js b/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js new file mode 100644 index 0000000000..7db18e2948 --- /dev/null +++ b/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js @@ -0,0 +1,6 @@ +assert.throws(() => { + { + let inner = 'inner value'; + } + var x = inner; +}, ReferenceError); diff --git a/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js b/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js new file mode 100644 index 0000000000..3f679a351d --- /dev/null +++ b/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js @@ -0,0 +1,12 @@ +// Options: --block-binding + +if (true) { + let [a,b] = [1,2]; + const [c,d] = [4,5]; +} +if (true) { + let {x: [{e}, f], g} = {x: [{e:4}, 5], g: 6}; + const a = 0, [b, {c, x: [d]}] = [1, {c: 2, x: [3]}]; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLet.js b/test/fixtures/traceur/Scope/DeepNestedLet.js new file mode 100644 index 0000000000..c7433749ca --- /dev/null +++ b/test/fixtures/traceur/Scope/DeepNestedLet.js @@ -0,0 +1,12 @@ +// Options: --block-binding + +var a = 'var a'; +{ + var b = 'var b'; + { + var c = 'var c'; + let d = 'let d'; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetConst.js b/test/fixtures/traceur/Scope/DeepNestedLetConst.js new file mode 100644 index 0000000000..3bf59e93d6 --- /dev/null +++ b/test/fixtures/traceur/Scope/DeepNestedLetConst.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +var a = 'var a'; +{ + var b = 'var b'; + { + let c = 'let c'; + { + const d = 'const d'; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetVar.js b/test/fixtures/traceur/Scope/DeepNestedLetVar.js new file mode 100644 index 0000000000..fb459cb060 --- /dev/null +++ b/test/fixtures/traceur/Scope/DeepNestedLetVar.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +var a = 'var a'; +{ + var b = 'var b'; + { + let c = 'let c'; + { + var d = 'var d'; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js b/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js new file mode 100644 index 0000000000..e70b8eb3fc --- /dev/null +++ b/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +var var_a; +{ + var var_b; + { + let let_c = 'let c'; + { + var var_d; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js b/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js new file mode 100644 index 0000000000..ca13528d06 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js @@ -0,0 +1,4 @@ +// Options: --block-binding +// Error: :4:15: const variables must have an initializer + +const x = 1, y; diff --git a/test/fixtures/traceur/Scope/Error_Disabled.js b/test/fixtures/traceur/Scope/Error_Disabled.js new file mode 100644 index 0000000000..2a4950fa44 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_Disabled.js @@ -0,0 +1,6 @@ +// Options: --block-binding=false +// Error: :5:3: Unexpected token let + +{ + let x = 42; +} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js new file mode 100644 index 0000000000..751de8a5d5 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js @@ -0,0 +1,5 @@ +// Options: --block-binding +// Error: :4:18: Unexpected token in + +for (const i = 0 in {}) { +} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js new file mode 100644 index 0000000000..9f5fb459e6 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js @@ -0,0 +1,5 @@ +// Options: --block-binding +// Error: :4:16: Unexpected token in + +for (let i = 0 in {}) { +} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js new file mode 100644 index 0000000000..f154d2202e --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js @@ -0,0 +1,10 @@ +// Options: --block-binding +// Error: :7:22: Unexpected token in + +var x = 0; + +// ES6 does not allow this. +for (var i = (x = 1) in {}) { +} + +assert.equal(1, x); diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js new file mode 100644 index 0000000000..d6498c8a36 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js @@ -0,0 +1,9 @@ +// Options: --block-binding +// Error: :8:18: Unexpected token of + +function* gen() { + yield 1; +} + +for (const i = 0 of gen()) { +} diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js new file mode 100644 index 0000000000..b7578b9060 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js @@ -0,0 +1,9 @@ +// Options: --block-binding +// Error: :8:16: Unexpected token of + +function* gen() { + yield 1; +} + +for (let i = 0 of gen()) { +} diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js new file mode 100644 index 0000000000..c41cf1aff9 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js @@ -0,0 +1,9 @@ +// Options: --block-binding +// Error: :8:16: Unexpected token of + +function* gen() { + yield 1; +} + +for (var i = 0 of gen()) { +} diff --git a/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js new file mode 100644 index 0000000000..41fe8df2f3 --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js @@ -0,0 +1,7 @@ +// Options: --block-binding +// Error: :5:13: const variables must have an initializer + +var i = 0; +for (const x; i < 3; i++) { + +} diff --git a/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js b/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js new file mode 100644 index 0000000000..58ca667d5c --- /dev/null +++ b/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js @@ -0,0 +1,10 @@ +// Options: --block-binding +// Error: functionExpression is not defined + +{ + (function functionExpression() { + return 'inner'; + }); + + functionExpression; // function expression doesn't add name to the scope. +} diff --git a/test/fixtures/traceur/Scope/LetForInInitializers1.js b/test/fixtures/traceur/Scope/LetForInInitializers1.js new file mode 100644 index 0000000000..c4f02e7790 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetForInInitializers1.js @@ -0,0 +1,22 @@ +// Options: --block-binding + +var result; +{ + let let_result = []; + let let_array = ['one', 'two', 'three']; + for (var index in let_array) { + let let_index = index; + let let_value = let_array[let_index]; + let_result.push( + function() { + return [let_index, let_value]; + }); + } + result = let_result; +} + +// ---------------------------------------------------------------------------- + +assertArrayEquals(['0', 'one'], result[0]()); +assertArrayEquals(['1', 'two'], result[1]()); +assertArrayEquals(['2', 'three'], result[2]()); diff --git a/test/fixtures/traceur/Scope/LetForInitializers1.js b/test/fixtures/traceur/Scope/LetForInitializers1.js new file mode 100644 index 0000000000..19dbcfcab4 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetForInitializers1.js @@ -0,0 +1,14 @@ +// Options: --block-binding + +var result; +{ + let let_x = 'let x'; + let let_l = []; + for (var var_x = 1, var_y = 2, var_z = 3; var_x < 10; var_x ++) { + let l_x = var_x, l_y = var_y, l_z = var_z; + let_l.push( function() { return [ l_x, l_y, l_z ]; } ); + } + result = let_l; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInClass.js b/test/fixtures/traceur/Scope/LetInClass.js new file mode 100644 index 0000000000..fa248e8257 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInClass.js @@ -0,0 +1,19 @@ +// Options: --block-binding + +class LetInClass { + get z() { + let let_z = 10; + return let_z; + } + + set z(v) { + let let_zv = v; + } + + distance() { + let dist = this.y - this.x; + return dist; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-closure/exec.js b/test/fixtures/traceur/Scope/LetInClosure.js similarity index 74% rename from test/fixtures/transformation/es6-let-scoping-traceur/in-closure/exec.js rename to test/fixtures/traceur/Scope/LetInClosure.js index e01538c804..9d2e89dd76 100644 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-closure/exec.js +++ b/test/fixtures/traceur/Scope/LetInClosure.js @@ -1,3 +1,5 @@ +// Options: --block-binding + function letInClosure(n) { var l = []; for (var i = 0; i < n; i ++) { @@ -5,13 +7,15 @@ function letInClosure(n) { if (i % 3 == 0) { continue; } - l.push(function () { + l.push(function() { return let_i; }); } return l; } +// ---------------------------------------------------------------------------- + var result = letInClosure(10); assert.equal(1, result[0]()); assert.equal(2, result[1]()); diff --git a/test/fixtures/traceur/Scope/LetInFor.js b/test/fixtures/traceur/Scope/LetInFor.js new file mode 100644 index 0000000000..c7347c3fea --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInFor.js @@ -0,0 +1,7 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x ++) { + let y = 'let y'; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreak.js b/test/fixtures/traceur/Scope/LetInForBreak.js new file mode 100644 index 0000000000..5ccde528d6 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForBreak.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x ++) { + let y = 'let y'; + if (x % 2 == 0) { + break; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreakInner.js b/test/fixtures/traceur/Scope/LetInForBreakInner.js new file mode 100644 index 0000000000..b0374fecac --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForBreakInner.js @@ -0,0 +1,12 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x ++) { + for (var y = 0; y < 10; y ++) { + let z = 'let z'; + if (x == 7) { + break; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreakNamed.js b/test/fixtures/traceur/Scope/LetInForBreakNamed.js new file mode 100644 index 0000000000..4b72973f4a --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForBreakNamed.js @@ -0,0 +1,13 @@ +// Options: --block-binding + +outer: +for (var x = 0; x < 10; x ++) { + for (var y = 0; y < 10; y ++) { + let z = 'let z'; + if (x == 7) { + break outer; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinue.js b/test/fixtures/traceur/Scope/LetInForContinue.js new file mode 100644 index 0000000000..0d3e0318f7 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForContinue.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x ++) { + let y = 'let y'; + if (x % 2 == 0) { + continue; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinueInner.js b/test/fixtures/traceur/Scope/LetInForContinueInner.js new file mode 100644 index 0000000000..7231db3399 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForContinueInner.js @@ -0,0 +1,12 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x ++) { + for (var y = 0; y < 10; y ++) { + let z = 'let z'; + if (x == 7) { + continue; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinueNamed.js b/test/fixtures/traceur/Scope/LetInForContinueNamed.js new file mode 100644 index 0000000000..5907676016 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInForContinueNamed.js @@ -0,0 +1,13 @@ +// Options: --block-binding + +outer: +for (var x = 0; x < 10; x ++) { + for (var y = 0; y < 10; y ++) { + let z = 'let z'; + if (x == 7) { + continue outer; + } + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-properties/exec.js b/test/fixtures/traceur/Scope/LetInProperties.js similarity index 63% rename from test/fixtures/transformation/es6-let-scoping-traceur/in-properties/exec.js rename to test/fixtures/traceur/Scope/LetInProperties.js index 9cba2236c1..22c2378e9e 100644 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-properties/exec.js +++ b/test/fixtures/traceur/Scope/LetInProperties.js @@ -1,3 +1,5 @@ +// Options: --block-binding + var object = { get x() { while (true) { @@ -12,4 +14,6 @@ var object = { this.v = let_v; } while (false); } -}; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor1.js b/test/fixtures/traceur/Scope/LetInitializerFor1.js new file mode 100644 index 0000000000..dd3ac7cc70 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInitializerFor1.js @@ -0,0 +1,7 @@ +// Options: --block-binding + +for (let x = 1; x < 10; x++) { + x; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor2.js b/test/fixtures/traceur/Scope/LetInitializerFor2.js new file mode 100644 index 0000000000..46f0c97ad5 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInitializerFor2.js @@ -0,0 +1,8 @@ +// Options: --block-binding + +for (let x = 1, y = 2, z = 3; x < 10; x ++) { + y++; + z++; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor3.js b/test/fixtures/traceur/Scope/LetInitializerFor3.js new file mode 100644 index 0000000000..ff742b3cdc --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInitializerFor3.js @@ -0,0 +1,9 @@ +// Options: --block-binding + +for (let x = 1, y = x + 1; x < 10 && y != 0; x ++, y *= 2) { + if (y > 300) { + continue; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerForIn.js b/test/fixtures/traceur/Scope/LetInitializerForIn.js new file mode 100644 index 0000000000..8bab17d1a6 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetInitializerForIn.js @@ -0,0 +1,9 @@ +// Options: --block-binding + +let sum = 0; +let a = [1,2,3]; +for (let x in a) { + sum = sum + a[x]; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/no-initializer/exec.js b/test/fixtures/traceur/Scope/LetNoInitializer.js similarity index 78% rename from test/fixtures/transformation/es6-let-scoping-traceur/no-initializer/exec.js rename to test/fixtures/traceur/Scope/LetNoInitializer.js index f9d28fb681..3018218fc8 100644 --- a/test/fixtures/transformation/es6-let-scoping-traceur/no-initializer/exec.js +++ b/test/fixtures/traceur/Scope/LetNoInitializer.js @@ -1,3 +1,5 @@ +// Options: --block-binding + var x = 1; { let x; diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/no-initializer-global/exec.js b/test/fixtures/traceur/Scope/LetNoInitializerGlobal.js similarity index 69% rename from test/fixtures/transformation/es6-let-scoping-traceur/no-initializer-global/exec.js rename to test/fixtures/traceur/Scope/LetNoInitializerGlobal.js index f01f21783d..58426a151e 100644 --- a/test/fixtures/transformation/es6-let-scoping-traceur/no-initializer-global/exec.js +++ b/test/fixtures/traceur/Scope/LetNoInitializerGlobal.js @@ -1,3 +1,5 @@ +// Options: --block-binding + let x2; assert.equal(undefined, x2); x2 = 2; diff --git a/test/fixtures/traceur/Scope/LetReinitializeInLoop.js b/test/fixtures/traceur/Scope/LetReinitializeInLoop.js new file mode 100644 index 0000000000..c16bd2326d --- /dev/null +++ b/test/fixtures/traceur/Scope/LetReinitializeInLoop.js @@ -0,0 +1,9 @@ +(function() { + var i = 0; + while (i < 3) { + let x; + assert.equal(undefined, x); + x = i; + i++; + } +})(); diff --git a/test/fixtures/traceur/Scope/LetWithFor.js b/test/fixtures/traceur/Scope/LetWithFor.js new file mode 100644 index 0000000000..f6ac1982eb --- /dev/null +++ b/test/fixtures/traceur/Scope/LetWithFor.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +for (var x = 0; x < 10; x++) { + let let_y = 'let y'; + for (var for_z = 0; for_z < 2; for_z ++) { + break; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithForIn.js b/test/fixtures/traceur/Scope/LetWithForIn.js new file mode 100644 index 0000000000..6b75ebf3b9 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetWithForIn.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +for (var x in [1,2,3]) { + let let_y = x; + for (var for_in_z in [4,5,6]) { + continue; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithSwitch.js b/test/fixtures/traceur/Scope/LetWithSwitch.js new file mode 100644 index 0000000000..756d7ecba7 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetWithSwitch.js @@ -0,0 +1,16 @@ +// Options: --block-binding + +for (var i = 0; i < 5; i ++) { + let let_x = 'let x'; + + switch (i) { + case 0: + break; + case 2: + break; + default: + break; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithSwitch2.js b/test/fixtures/traceur/Scope/LetWithSwitch2.js new file mode 100644 index 0000000000..ea92dbf7c8 --- /dev/null +++ b/test/fixtures/traceur/Scope/LetWithSwitch2.js @@ -0,0 +1,16 @@ +// Options: --block-binding + +for (var i = 0; i < 5; i ++) { + let let_x = 'let x'; + + switch (i) { + case 0: + continue; + case 2: + break; + default: + break; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NameBindingInFunction.js b/test/fixtures/traceur/Scope/NameBindingInFunction.js new file mode 100644 index 0000000000..3bc7634018 --- /dev/null +++ b/test/fixtures/traceur/Scope/NameBindingInFunction.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +{ + function f() { + return f; + } + var g = f; + f = 42; + assert.equal(42, g()); +} diff --git a/test/fixtures/traceur/Scope/NestedFunction1.js b/test/fixtures/traceur/Scope/NestedFunction1.js new file mode 100644 index 0000000000..297042dd57 --- /dev/null +++ b/test/fixtures/traceur/Scope/NestedFunction1.js @@ -0,0 +1,9 @@ +// Options: --block-binding + +function nestedFunction1() { + return function() { + let let_x = 'let x'; + } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedFunction2.js b/test/fixtures/traceur/Scope/NestedFunction2.js new file mode 100644 index 0000000000..85238bc29e --- /dev/null +++ b/test/fixtures/traceur/Scope/NestedFunction2.js @@ -0,0 +1,10 @@ +// Options: --block-binding + +function nestedFunction2() { + let let_func = function() { + let let_x = 'let x'; + } + return let_func; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedFunction3.js b/test/fixtures/traceur/Scope/NestedFunction3.js new file mode 100644 index 0000000000..3ffda64978 --- /dev/null +++ b/test/fixtures/traceur/Scope/NestedFunction3.js @@ -0,0 +1,8 @@ +// Options: --block-binding + +function nestedFunction3() { + let let_x = 'let x'; + function function_foo() { } +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedLet.js b/test/fixtures/traceur/Scope/NestedLet.js new file mode 100644 index 0000000000..54b2e91afa --- /dev/null +++ b/test/fixtures/traceur/Scope/NestedLet.js @@ -0,0 +1,11 @@ +// Options: --block-binding + +var x = 'var'; +{ + let y = 'let 1'; +} +{ + let y = 'let 2'; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedLetConflict.js b/test/fixtures/traceur/Scope/NestedLetConflict.js new file mode 100644 index 0000000000..808a556509 --- /dev/null +++ b/test/fixtures/traceur/Scope/NestedLetConflict.js @@ -0,0 +1,12 @@ +(function() { + var x = 1; + function f() { + assert.equal(x, 1); + { + let x = 2; + assert.equal(x, 2); + } + assert.equal(x, 1); + } + f(); +})(); diff --git a/test/fixtures/traceur/Scope/Regress1381.js b/test/fixtures/traceur/Scope/Regress1381.js new file mode 100644 index 0000000000..ab64e59a9b --- /dev/null +++ b/test/fixtures/traceur/Scope/Regress1381.js @@ -0,0 +1,8 @@ +function test() { + let ret = true; + while (false) + for (let i = 0; i < 1; i++) + ret = () => i; + return ret +} +assert.isTrue(test()); diff --git a/test/fixtures/traceur/Scope/SiblingScopes.js b/test/fixtures/traceur/Scope/SiblingScopes.js new file mode 100644 index 0000000000..c3e230e98c --- /dev/null +++ b/test/fixtures/traceur/Scope/SiblingScopes.js @@ -0,0 +1,15 @@ +// Options: --free-variable-checker=false + +assert.throws(() => { + { + let testVariable = 1; + assert.equal(testVariable, 1); + } + + { + let testVariable = 2; + assert.equal(testVariable, 2); + } + + testVariable; +}, ReferenceError); diff --git a/test/fixtures/traceur/Scope/TopLevelLet.js b/test/fixtures/traceur/Scope/TopLevelLet.js new file mode 100644 index 0000000000..0f2db5940b --- /dev/null +++ b/test/fixtures/traceur/Scope/TopLevelLet.js @@ -0,0 +1,7 @@ +// Options: --block-binding + +let x = 'let'; + +// ---------------------------------------------------------------------------- + +assert.equal(x, 'let'); \ No newline at end of file diff --git a/test/fixtures/traceur/Scope/TopLevelLetConst.js b/test/fixtures/traceur/Scope/TopLevelLetConst.js new file mode 100644 index 0000000000..3b3adfbcfc --- /dev/null +++ b/test/fixtures/traceur/Scope/TopLevelLetConst.js @@ -0,0 +1,9 @@ +// Options: --block-binding + +let x = 'let'; +const y = 'const'; + +// ---------------------------------------------------------------------------- + +assert.equal('let', x); +assert.equal('const', y); diff --git a/test/fixtures/traceur/Scope/TopLevelLetVar.js b/test/fixtures/traceur/Scope/TopLevelLetVar.js new file mode 100644 index 0000000000..a90a4d5397 --- /dev/null +++ b/test/fixtures/traceur/Scope/TopLevelLetVar.js @@ -0,0 +1,9 @@ +// Options: --block-binding + +let x = 'let'; +var y = 'var'; + +// ---------------------------------------------------------------------------- + +assert.equal('let', x); +assert.equal('var', y); diff --git a/test/fixtures/traceur/Spread/Array.js b/test/fixtures/traceur/Spread/Array.js new file mode 100644 index 0000000000..0819b914e1 --- /dev/null +++ b/test/fixtures/traceur/Spread/Array.js @@ -0,0 +1,14 @@ +var a = []; +var b = [0, ...a]; +var c = [...b, ...b]; +var d; +var e = [0, ...d = [1, 2], 3]; +var f = [0, ...[[1, 2], [3, 4]], 5]; + +// ---------------------------------------------------------------------------- + +assertArrayEquals([0], b); +assertArrayEquals([0, 0], c); +assertArrayEquals([1, 2], d); +assertArrayEquals([0, 1, 2, 3], e); +assertArrayEquals([0, [1, 2], [3, 4], 5], f); diff --git a/test/fixtures/traceur/Spread/Call.js b/test/fixtures/traceur/Spread/Call.js new file mode 100644 index 0000000000..34ad14fdac --- /dev/null +++ b/test/fixtures/traceur/Spread/Call.js @@ -0,0 +1,14 @@ +function* G() { + yield 'hi'; + yield 'there'; +} + +function f(...args) { + return args; +} + +var result = f(0, ...[1, 2], 3, ...G()); +assertArrayEquals([0, 1, 2, 3, 'hi', 'there'], result); + +result = f(...G()); +assertArrayEquals(['hi', 'there'], result); diff --git a/test/fixtures/traceur/Spread/CallWithUndefined.js b/test/fixtures/traceur/Spread/CallWithUndefined.js new file mode 100644 index 0000000000..1243fa0e79 --- /dev/null +++ b/test/fixtures/traceur/Spread/CallWithUndefined.js @@ -0,0 +1,8 @@ +function f(...args) { + return args; +} + +assert.throw(function() { + // Should throw due to ToObject(undefined) + f(0, ...undefined, 1); +}, TypeError) diff --git a/test/fixtures/traceur/Spread/Class.js b/test/fixtures/traceur/Spread/Class.js new file mode 100644 index 0000000000..7d9bafc2d3 --- /dev/null +++ b/test/fixtures/traceur/Spread/Class.js @@ -0,0 +1,17 @@ +class SpreadTestClass { + constructor(x, y) { + this.SpreadTestClass = SpreadTestClass; + this.self = this; + this.x = x; + this.y = y; + } +} + +var object = new SpreadTestClass(...[0, 1]); + +// ---------------------------------------------------------------------------- + +assert.equal(object.x, 0); +assert.equal(object.y, 1); +assert.equal(object.self, object); +assert.isTrue(object instanceof object.SpreadTestClass); diff --git a/test/fixtures/traceur/Spread/Error_Disabled.js b/test/fixtures/traceur/Spread/Error_Disabled.js new file mode 100644 index 0000000000..75b75b251a --- /dev/null +++ b/test/fixtures/traceur/Spread/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --spread=false +// Error: :4:8: Unexpected token ... + +[0, 1, ...[2, 3]]; diff --git a/test/fixtures/traceur/Spread/Iterators.js b/test/fixtures/traceur/Spread/Iterators.js new file mode 100644 index 0000000000..af5dae5f0b --- /dev/null +++ b/test/fixtures/traceur/Spread/Iterators.js @@ -0,0 +1,17 @@ +function* G() { + yield 1; + yield 2; + yield 3; +} + +var a = [...G()]; +var b = [4, ...G()]; +var c = [...G(), 4]; +var d = [4, ...G(), 5]; + +// ---------------------------------------------------------------------------- + +assertArrayEquals([1, 2, 3], a); +assertArrayEquals([4, 1, 2, 3], b); +assertArrayEquals([1, 2, 3, 4], c); +assertArrayEquals([4, 1, 2, 3, 5], d); diff --git a/test/fixtures/traceur/Spread/MethodCall.js b/test/fixtures/traceur/Spread/MethodCall.js new file mode 100644 index 0000000000..72f08531f7 --- /dev/null +++ b/test/fixtures/traceur/Spread/MethodCall.js @@ -0,0 +1,18 @@ +var obj = { + method: function(...args) { + return { + self: this, + args: args + }; + } +}; + +var result = { + obj: obj, + result: obj.method(0, ...[1, 2], 3) +}; + +// ---------------------------------------------------------------------------- + +assert.equal(result.obj, result.result.self); +assertArrayEquals([0, 1, 2, 3], result.result.args); diff --git a/test/fixtures/traceur/Spread/MethodCallQuotedName.js b/test/fixtures/traceur/Spread/MethodCallQuotedName.js new file mode 100644 index 0000000000..7440fd9b97 --- /dev/null +++ b/test/fixtures/traceur/Spread/MethodCallQuotedName.js @@ -0,0 +1,18 @@ +var obj = { + method: function(...args) { + return { + self: this, + args: args + }; + } +}; + +var result = { + obj: obj, + result: obj['meth' + 'od'](0, ...[1, 2], 3) +}; + +// ---------------------------------------------------------------------------- + +assert.equal(result.obj, result.result.self); +assertArrayEquals([0, 1, 2, 3], result.result.args); diff --git a/test/fixtures/traceur/Spread/New.js b/test/fixtures/traceur/Spread/New.js new file mode 100644 index 0000000000..edd3204077 --- /dev/null +++ b/test/fixtures/traceur/Spread/New.js @@ -0,0 +1,26 @@ +function* G() { + yield 3; + yield 4; +} + +function F(x, y, z, a, b) { + this.x = x; + this.y = y; + this.z = z; + this.a = a; + this.b = b; + this.self = this; + this.F = F; +} + +var object = new F(0, ...[1, 2], ...G()); + +// ---------------------------------------------------------------------------- + +assert.equal(0, object.x); +assert.equal(1, object.y); +assert.equal(2, object.z); +assert.equal(3, object.a); +assert.equal(4, object.b); +assert.equal(object, object.self); +assert.isTrue(object instanceof object.F); diff --git a/test/fixtures/traceur/Spread/New2.js b/test/fixtures/traceur/Spread/New2.js new file mode 100644 index 0000000000..79e9484727 --- /dev/null +++ b/test/fixtures/traceur/Spread/New2.js @@ -0,0 +1,23 @@ +function G() {} + +function F(x, y, z) { + var obj = new G; + obj.x = x; + obj.y = y; + obj.z = z; + obj.f = this; + obj.G = G; + obj.F = F; + return obj; +} + +var object = new F(0, ...[1, 2]); + +// ---------------------------------------------------------------------------- + +assert.equal(0, object.x); +assert.equal(1, object.y); +assert.equal(2, object.z); +assert.isFalse(object instanceof object.F); +assert.isTrue(object instanceof object.G); +assert.isTrue(object.f instanceof object.F); diff --git a/test/fixtures/traceur/Spread/NewBuiltin.js b/test/fixtures/traceur/Spread/NewBuiltin.js new file mode 100644 index 0000000000..c718932b90 --- /dev/null +++ b/test/fixtures/traceur/Spread/NewBuiltin.js @@ -0,0 +1,7 @@ +var d = new Date(...[2011, 4, 3]); + +// ---------------------------------------------------------------------------- + +assert.equal(2011, d.getFullYear()); +assert.equal(4, d.getMonth()); +assert.equal(3, d.getDate()); diff --git a/test/fixtures/traceur/Spread/NoIterator.js b/test/fixtures/traceur/Spread/NoIterator.js new file mode 100644 index 0000000000..d9f757f408 --- /dev/null +++ b/test/fixtures/traceur/Spread/NoIterator.js @@ -0,0 +1 @@ +assert.throw(() => [...{}], TypeError); diff --git a/test/fixtures/traceur/Spread/NotAnObject.js b/test/fixtures/traceur/Spread/NotAnObject.js new file mode 100644 index 0000000000..4b68c2c9e1 --- /dev/null +++ b/test/fixtures/traceur/Spread/NotAnObject.js @@ -0,0 +1 @@ +assert.throw(() => [...null], TypeError); diff --git a/test/fixtures/traceur/Spread/String.js b/test/fixtures/traceur/Spread/String.js new file mode 100644 index 0000000000..fcef0b86f5 --- /dev/null +++ b/test/fixtures/traceur/Spread/String.js @@ -0,0 +1,13 @@ +var a = ''; +var b = ['b', ...a]; +var c = [...b, ...b]; +var d; +var e = [0, ...d = '12', 3]; +var f = [... new String('abc')]; + +// ---------------------------------------------------------------------------- + +assertArrayEquals(['b'], b); +assertArrayEquals(['b', 'b'], c); +assertArrayEquals([0, '1', '2', 3], e); +assertArrayEquals(['a', 'b', 'c'], f); diff --git a/test/fixtures/traceur/Spread/Type.js b/test/fixtures/traceur/Spread/Type.js new file mode 100644 index 0000000000..bd46c4200d --- /dev/null +++ b/test/fixtures/traceur/Spread/Type.js @@ -0,0 +1,29 @@ + +assert.throw(() => { + [0, ...{}, 1]; +}, TypeError); + +assert.throw(() => { + [0, ...{0: 1, 1: 2, length: 2}, 3]; +}, TypeError); + +assert.throw(() => { + [0, ...true, 1]; +}, TypeError); + +assert.throw(() => { + [0, ...1, 1]; +}, TypeError); + +assert.throw(() => { + [0, ...function() {}, 1]; +}, TypeError); + +assert.throw(function() { + [0, ...null, 1]; +}, TypeError); + +assert.throw(function() { + [0, ...undefined, 1]; +}, TypeError); + diff --git a/test/fixtures/traceur/StringExtras/CodePointAt.js b/test/fixtures/traceur/StringExtras/CodePointAt.js new file mode 100644 index 0000000000..54369eb5a8 --- /dev/null +++ b/test/fixtures/traceur/StringExtras/CodePointAt.js @@ -0,0 +1,76 @@ +// Tests taken from https://mths.be/codepointat + +assert.equal(String.prototype.codePointAt.length, 1); + +// String that starts with a BMP symbol +assert.equal('abc\uD834\uDF06def'.codePointAt(''), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt('_'), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(-Infinity), undefined); +assert.equal('abc\uD834\uDF06def'.codePointAt(-1), undefined); +assert.equal('abc\uD834\uDF06def'.codePointAt(-0), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(0), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(3), 0x1D306); +assert.equal('abc\uD834\uDF06def'.codePointAt(4), 0xDF06); +assert.equal('abc\uD834\uDF06def'.codePointAt(5), 0x64); +assert.equal('abc\uD834\uDF06def'.codePointAt(42), undefined); +assert.equal('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assert.equal('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); +assert.equal('abc\uD834\uDF06def'.codePointAt(NaN), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(false), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(null), 0x61); +assert.equal('abc\uD834\uDF06def'.codePointAt(undefined), 0x61); + +// String that starts with an astral symbol +assert.equal('\uD834\uDF06def'.codePointAt(''), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt('1'), 0xDF06); +assert.equal('\uD834\uDF06def'.codePointAt('_'), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(-1), undefined); +assert.equal('\uD834\uDF06def'.codePointAt(-0), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(0), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(1), 0xDF06); +assert.equal('\uD834\uDF06def'.codePointAt(42), undefined); +assert.equal('\uD834\uDF06def'.codePointAt(false), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(null), 0x1D306); +assert.equal('\uD834\uDF06def'.codePointAt(undefined), 0x1D306); + +// Lone high surrogates +assert.equal('\uD834abc'.codePointAt(''), 0xD834); +assert.equal('\uD834abc'.codePointAt('_'), 0xD834); +assert.equal('\uD834abc'.codePointAt(), 0xD834); +assert.equal('\uD834abc'.codePointAt(-1), undefined); +assert.equal('\uD834abc'.codePointAt(-0), 0xD834); +assert.equal('\uD834abc'.codePointAt(0), 0xD834); +assert.equal('\uD834abc'.codePointAt(false), 0xD834); +assert.equal('\uD834abc'.codePointAt(NaN), 0xD834); +assert.equal('\uD834abc'.codePointAt(null), 0xD834); +assert.equal('\uD834abc'.codePointAt(undefined), 0xD834); + +// Lone low surrogates +assert.equal('\uDF06abc'.codePointAt(''), 0xDF06); +assert.equal('\uDF06abc'.codePointAt('_'), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(-1), undefined); +assert.equal('\uDF06abc'.codePointAt(-0), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(0), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(false), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(NaN), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(null), 0xDF06); +assert.equal('\uDF06abc'.codePointAt(undefined), 0xDF06); + +assert.throw(function() { String.prototype.codePointAt.call(undefined); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.call(undefined, 4); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.call(null); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.call(null, 4); }, TypeError); +assert.equal(String.prototype.codePointAt.call(42, 0), 0x34); +assert.equal(String.prototype.codePointAt.call(42, 1), 0x32); +assert.equal(String.prototype.codePointAt.call({ 'toString': function() { return 'abc'; } }, 2), 0x63); + +assert.throw(function() { String.prototype.codePointAt.apply(undefined); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.apply(undefined, [4]); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.apply(null); }, TypeError); +assert.throw(function() { String.prototype.codePointAt.apply(null, [4]); }, TypeError); +assert.equal(String.prototype.codePointAt.apply(42, [0]), 0x34); +assert.equal(String.prototype.codePointAt.apply(42, [1]), 0x32); +assert.equal(String.prototype.codePointAt.apply({ 'toString': function() { return 'abc'; } }, [2]), 0x63); diff --git a/test/fixtures/traceur/StringExtras/EndsWith.js b/test/fixtures/traceur/StringExtras/EndsWith.js new file mode 100644 index 0000000000..b4585b2e8d --- /dev/null +++ b/test/fixtures/traceur/StringExtras/EndsWith.js @@ -0,0 +1,217 @@ +// Tests taken from https://mths.be/endswith + +assert.equal(String.prototype.endsWith.length, 1); + +assert.equal('undefined'.endsWith(), true); +assert.equal('undefined'.endsWith(undefined), true); +assert.equal('undefined'.endsWith(null), false); +assert.equal('null'.endsWith(), false); +assert.equal('null'.endsWith(undefined), false); +assert.equal('null'.endsWith(null), true); + +assert.equal('abc'.endsWith(), false); +assert.equal('abc'.endsWith(''), true); +assert.equal('abc'.endsWith('\0'), false); +assert.equal('abc'.endsWith('c'), true); +assert.equal('abc'.endsWith('b'), false); +assert.equal('abc'.endsWith('ab'), false); +assert.equal('abc'.endsWith('bc'), true); +assert.equal('abc'.endsWith('abc'), true); +assert.equal('abc'.endsWith('bcd'), false); +assert.equal('abc'.endsWith('abcd'), false); +assert.equal('abc'.endsWith('bcde'), false); + +assert.equal('abc'.endsWith('', NaN), true); +assert.equal('abc'.endsWith('\0', NaN), false); +assert.equal('abc'.endsWith('c', NaN), false); +assert.equal('abc'.endsWith('b', NaN), false); +assert.equal('abc'.endsWith('ab', NaN), false); +assert.equal('abc'.endsWith('bc', NaN), false); +assert.equal('abc'.endsWith('abc', NaN), false); +assert.equal('abc'.endsWith('bcd', NaN), false); +assert.equal('abc'.endsWith('abcd', NaN), false); +assert.equal('abc'.endsWith('bcde', NaN), false); + +assert.equal('abc'.endsWith('', false), true); +assert.equal('abc'.endsWith('\0', false), false); +assert.equal('abc'.endsWith('c', false), false); +assert.equal('abc'.endsWith('b', false), false); +assert.equal('abc'.endsWith('ab', false), false); +assert.equal('abc'.endsWith('bc', false), false); +assert.equal('abc'.endsWith('abc', false), false); +assert.equal('abc'.endsWith('bcd', false), false); +assert.equal('abc'.endsWith('abcd', false), false); +assert.equal('abc'.endsWith('bcde', false), false); + +assert.equal('abc'.endsWith('', undefined), true); +assert.equal('abc'.endsWith('\0', undefined), false); +assert.equal('abc'.endsWith('c', undefined), true); +assert.equal('abc'.endsWith('b', undefined), false); +assert.equal('abc'.endsWith('ab', undefined), false); +assert.equal('abc'.endsWith('bc', undefined), true); +assert.equal('abc'.endsWith('abc', undefined), true); +assert.equal('abc'.endsWith('bcd', undefined), false); +assert.equal('abc'.endsWith('abcd', undefined), false); +assert.equal('abc'.endsWith('bcde', undefined), false); + +assert.equal('abc'.endsWith('', null), true); +assert.equal('abc'.endsWith('\0', null), false); +assert.equal('abc'.endsWith('c', null), false); +assert.equal('abc'.endsWith('b', null), false); +assert.equal('abc'.endsWith('ab', null), false); +assert.equal('abc'.endsWith('bc', null), false); +assert.equal('abc'.endsWith('abc', null), false); +assert.equal('abc'.endsWith('bcd', null), false); +assert.equal('abc'.endsWith('abcd', null), false); +assert.equal('abc'.endsWith('bcde', null), false); + +assert.equal('abc'.endsWith('', -Infinity), true); +assert.equal('abc'.endsWith('\0', -Infinity), false); +assert.equal('abc'.endsWith('c', -Infinity), false); +assert.equal('abc'.endsWith('b', -Infinity), false); +assert.equal('abc'.endsWith('ab', -Infinity), false); +assert.equal('abc'.endsWith('bc', -Infinity), false); +assert.equal('abc'.endsWith('abc', -Infinity), false); +assert.equal('abc'.endsWith('bcd', -Infinity), false); +assert.equal('abc'.endsWith('abcd', -Infinity), false); +assert.equal('abc'.endsWith('bcde', -Infinity), false); + +assert.equal('abc'.endsWith('', -1), true); +assert.equal('abc'.endsWith('\0', -1), false); +assert.equal('abc'.endsWith('c', -1), false); +assert.equal('abc'.endsWith('b', -1), false); +assert.equal('abc'.endsWith('ab', -1), false); +assert.equal('abc'.endsWith('bc', -1), false); +assert.equal('abc'.endsWith('abc', -1), false); +assert.equal('abc'.endsWith('bcd', -1), false); +assert.equal('abc'.endsWith('abcd', -1), false); +assert.equal('abc'.endsWith('bcde', -1), false); + +assert.equal('abc'.endsWith('', -0), true); +assert.equal('abc'.endsWith('\0', -0), false); +assert.equal('abc'.endsWith('c', -0), false); +assert.equal('abc'.endsWith('b', -0), false); +assert.equal('abc'.endsWith('ab', -0), false); +assert.equal('abc'.endsWith('bc', -0), false); +assert.equal('abc'.endsWith('abc', -0), false); +assert.equal('abc'.endsWith('bcd', -0), false); +assert.equal('abc'.endsWith('abcd', -0), false); +assert.equal('abc'.endsWith('bcde', -0), false); + +assert.equal('abc'.endsWith('', +0), true); +assert.equal('abc'.endsWith('\0', +0), false); +assert.equal('abc'.endsWith('c', +0), false); +assert.equal('abc'.endsWith('b', +0), false); +assert.equal('abc'.endsWith('ab', +0), false); +assert.equal('abc'.endsWith('bc', +0), false); +assert.equal('abc'.endsWith('abc', +0), false); +assert.equal('abc'.endsWith('bcd', +0), false); +assert.equal('abc'.endsWith('abcd', +0), false); +assert.equal('abc'.endsWith('bcde', +0), false); + +assert.equal('abc'.endsWith('', 1), true); +assert.equal('abc'.endsWith('\0', 1), false); +assert.equal('abc'.endsWith('c', 1), false); +assert.equal('abc'.endsWith('b', 1), false); +assert.equal('abc'.endsWith('ab', 1), false); +assert.equal('abc'.endsWith('bc', 1), false); +assert.equal('abc'.endsWith('abc', 1), false); +assert.equal('abc'.endsWith('bcd', 1), false); +assert.equal('abc'.endsWith('abcd', 1), false); +assert.equal('abc'.endsWith('bcde', 1), false); + +assert.equal('abc'.endsWith('', 2), true); +assert.equal('abc'.endsWith('\0', 2), false); +assert.equal('abc'.endsWith('c', 2), false); +assert.equal('abc'.endsWith('b', 2), true); +assert.equal('abc'.endsWith('ab', 2), true); +assert.equal('abc'.endsWith('bc', 2), false); +assert.equal('abc'.endsWith('abc', 2), false); +assert.equal('abc'.endsWith('bcd', 2), false); +assert.equal('abc'.endsWith('abcd', 2), false); +assert.equal('abc'.endsWith('bcde', 2), false); + +assert.equal('abc'.endsWith('', +Infinity), true); +assert.equal('abc'.endsWith('\0', +Infinity), false); +assert.equal('abc'.endsWith('c', +Infinity), true); +assert.equal('abc'.endsWith('b', +Infinity), false); +assert.equal('abc'.endsWith('ab', +Infinity), false); +assert.equal('abc'.endsWith('bc', +Infinity), true); +assert.equal('abc'.endsWith('abc', +Infinity), true); +assert.equal('abc'.endsWith('bcd', +Infinity), false); +assert.equal('abc'.endsWith('abcd', +Infinity), false); +assert.equal('abc'.endsWith('bcde', +Infinity), false); + +assert.equal('abc'.endsWith('', true), true); +assert.equal('abc'.endsWith('\0', true), false); +assert.equal('abc'.endsWith('c', true), false); +assert.equal('abc'.endsWith('b', true), false); +assert.equal('abc'.endsWith('ab', true), false); +assert.equal('abc'.endsWith('bc', true), false); +assert.equal('abc'.endsWith('abc', true), false); +assert.equal('abc'.endsWith('bcd', true), false); +assert.equal('abc'.endsWith('abcd', true), false); +assert.equal('abc'.endsWith('bcde', true), false); + +assert.equal('abc'.endsWith('', 'x'), true); +assert.equal('abc'.endsWith('\0', 'x'), false); +assert.equal('abc'.endsWith('c', 'x'), false); +assert.equal('abc'.endsWith('b', 'x'), false); +assert.equal('abc'.endsWith('ab', 'x'), false); +assert.equal('abc'.endsWith('bc', 'x'), false); +assert.equal('abc'.endsWith('abc', 'x'), false); +assert.equal('abc'.endsWith('bcd', 'x'), false); +assert.equal('abc'.endsWith('abcd', 'x'), false); +assert.equal('abc'.endsWith('bcde', 'x'), false); + +assert.equal('[a-z]+(bar)?'.endsWith('(bar)?'), true); +assert.throw(function() { '[a-z]+(bar)?'.endsWith(/(bar)?/); }, TypeError); +assert.equal('[a-z]+(bar)?'.endsWith('[a-z]+', 6), true); +assert.throw(function() { '[a-z]+(bar)?'.endsWith(/(bar)?/); }, TypeError); +assert.throw(function() { '[a-z]+/(bar)?/'.endsWith(/(bar)?/); }, TypeError); + +// https://mathiasbynens.be/notes/javascript-unicode#poo-test +var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; +assert.equal(string.endsWith(''), true); +assert.equal(string.endsWith('\xF1t\xEBr'), false); +assert.equal(string.endsWith('\xF1t\xEBr', 5), true); +assert.equal(string.endsWith('\xE0liz\xE6'), false); +assert.equal(string.endsWith('\xE0liz\xE6', 16), true); +assert.equal(string.endsWith('\xF8n\u2603\uD83D\uDCA9'), true); +assert.equal(string.endsWith('\xF8n\u2603\uD83D\uDCA9', 23), true); +assert.equal(string.endsWith('\u2603'), false); +assert.equal(string.endsWith('\u2603', 21), true); +assert.equal(string.endsWith('\uD83D\uDCA9'), true); +assert.equal(string.endsWith('\uD83D\uDCA9', 23), true); + +assert.throw(function() { String.prototype.endsWith.call(undefined); }, TypeError); +assert.throw(function() { String.prototype.endsWith.call(undefined, 'b'); }, TypeError); +assert.throw(function() { String.prototype.endsWith.call(undefined, 'b', 4); }, TypeError); +assert.throw(function() { String.prototype.endsWith.call(null); }, TypeError); +assert.throw(function() { String.prototype.endsWith.call(null, 'b'); }, TypeError); +assert.throw(function() { String.prototype.endsWith.call(null, 'b', 4); }, TypeError); +assert.equal(String.prototype.endsWith.call(42, '2'), true); +assert.equal(String.prototype.endsWith.call(42, '4'), false); +assert.equal(String.prototype.endsWith.call(42, 'b', 4), false); +assert.equal(String.prototype.endsWith.call(42, '2', 1), false); +assert.equal(String.prototype.endsWith.call(42, '2', 4), true); +assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 0), false); +assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 1), false); +assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 2), true); +assert.throw(function() { String.prototype.endsWith.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); + +assert.throw(function() { String.prototype.endsWith.apply(undefined); }, TypeError); +assert.throw(function() { String.prototype.endsWith.apply(undefined, ['b']); }, TypeError); +assert.throw(function() { String.prototype.endsWith.apply(undefined, ['b', 4]); }, TypeError); +assert.throw(function() { String.prototype.endsWith.apply(null); }, TypeError); +assert.throw(function() { String.prototype.endsWith.apply(null, ['b']); }, TypeError); +assert.throw(function() { String.prototype.endsWith.apply(null, ['b', 4]); }, TypeError); +assert.equal(String.prototype.endsWith.apply(42, ['2']), true); +assert.equal(String.prototype.endsWith.apply(42, ['4']), false); +assert.equal(String.prototype.endsWith.apply(42, ['b', 4]), false); +assert.equal(String.prototype.endsWith.apply(42, ['2', 1]), false); +assert.equal(String.prototype.endsWith.apply(42, ['2', 4]), true); +assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), false); +assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), false); +assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), true); +assert.throw(function() { String.prototype.endsWith.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); diff --git a/test/fixtures/traceur/StringExtras/FromCodePoint.js b/test/fixtures/traceur/StringExtras/FromCodePoint.js new file mode 100644 index 0000000000..0a0adffa90 --- /dev/null +++ b/test/fixtures/traceur/StringExtras/FromCodePoint.js @@ -0,0 +1,25 @@ +// Tests taken from https://mths.be/fromcodepoint + +assert.equal(String.fromCodePoint.length, 0); + +assert.equal(String.fromCodePoint(''), '\0'); +assert.equal(String.fromCodePoint(), ''); +assert.equal(String.fromCodePoint(-0), '\0'); +assert.equal(String.fromCodePoint(0), '\0'); +assert.equal(String.fromCodePoint(0x1D306), '\uD834\uDF06'); +assert.equal(String.fromCodePoint(0x1D306, 0x61, 0x1D307), '\uD834\uDF06a\uD834\uDF07'); +assert.equal(String.fromCodePoint(0x61, 0x62, 0x1D307), 'ab\uD834\uDF07'); +assert.equal(String.fromCodePoint(false), '\0'); +assert.equal(String.fromCodePoint(null), '\0'); + +assert.throw(function() { String.fromCodePoint('_'); }, RangeError); +assert.throw(function() { String.fromCodePoint('+Infinity'); }, RangeError); +assert.throw(function() { String.fromCodePoint('-Infinity'); }, RangeError); +assert.throw(function() { String.fromCodePoint(-1); }, RangeError); +assert.throw(function() { String.fromCodePoint(0x10FFFF + 1); }, RangeError); +assert.throw(function() { String.fromCodePoint(3.14); }, RangeError); +assert.throw(function() { String.fromCodePoint(3e-2); }, RangeError); +assert.throw(function() { String.fromCodePoint(Infinity); }, RangeError); +assert.throw(function() { String.fromCodePoint(NaN); }, RangeError); +assert.throw(function() { String.fromCodePoint(undefined); }, RangeError); +assert.throw(function() { String.fromCodePoint({}); }, RangeError); diff --git a/test/fixtures/traceur/StringExtras/Includes.js b/test/fixtures/traceur/StringExtras/Includes.js new file mode 100644 index 0000000000..b5cf58373d --- /dev/null +++ b/test/fixtures/traceur/StringExtras/Includes.js @@ -0,0 +1,114 @@ +// Tests taken from https://mths.be/includes + +assert.equal(String.prototype.includes.length, 1); +assert.equal(String.prototype.propertyIsEnumerable('includes'), false); + +assert.equal('abc'.includes(), false); +assert.equal('aundefinedb'.includes(), true); +assert.equal('abc'.includes(undefined), false); +assert.equal('aundefinedb'.includes(undefined), true); +assert.equal('abc'.includes(null), false); +assert.equal('anullb'.includes(null), true); +assert.equal('abc'.includes(false), false); +assert.equal('afalseb'.includes(false), true); +assert.equal('abc'.includes(NaN), false); +assert.equal('aNaNb'.includes(NaN), true); +assert.equal('abc'.includes('abc'), true); +assert.equal('abc'.includes('def'), false); +assert.equal('abc'.includes(''), true); +assert.equal(''.includes(''), true); + +assert.equal('abc'.includes('b', -Infinity), true); +assert.equal('abc'.includes('b', -1), true); +assert.equal('abc'.includes('b', -0), true); +assert.equal('abc'.includes('b', +0), true); +assert.equal('abc'.includes('b', NaN), true); +assert.equal('abc'.includes('b', 'x'), true); +assert.equal('abc'.includes('b', false), true); +assert.equal('abc'.includes('b', undefined), true); +assert.equal('abc'.includes('b', null), true); +assert.equal('abc'.includes('b', 1), true); +assert.equal('abc'.includes('b', 2), false); +assert.equal('abc'.includes('b', 3), false); +assert.equal('abc'.includes('b', 4), false); +assert.equal('abc'.includes('b', +Infinity), false); +assert.equal('abc'.includes('bc'), true); +assert.equal('abc'.includes('bc\0'), false); + +assert.equal('abc123def'.includes(1, -Infinity), true); +assert.equal('abc123def'.includes(1, -1), true); +assert.equal('abc123def'.includes(1, -0), true); +assert.equal('abc123def'.includes(1, +0), true); +assert.equal('abc123def'.includes(1, NaN), true); +assert.equal('abc123def'.includes(1, 'x'), true); +assert.equal('abc123def'.includes(1, false), true); +assert.equal('abc123def'.includes(1, undefined), true); +assert.equal('abc123def'.includes(1, null), true); +assert.equal('abc123def'.includes(1, 1), true); +assert.equal('abc123def'.includes(1, 2), true); +assert.equal('abc123def'.includes(1, 3), true); +assert.equal('abc123def'.includes(1, 4), false); +assert.equal('abc123def'.includes(1, 5), false); +assert.equal('abc123def'.includes(1, +Infinity), false); + +assert.equal('abc123def'.includes(9, -Infinity), false); +assert.equal('abc123def'.includes(9, -1), false); +assert.equal('abc123def'.includes(9, -0), false); +assert.equal('abc123def'.includes(9, +0), false); +assert.equal('abc123def'.includes(9, NaN), false); +assert.equal('abc123def'.includes(9, 'x'), false); +assert.equal('abc123def'.includes(9, false), false); +assert.equal('abc123def'.includes(9, undefined), false); +assert.equal('abc123def'.includes(9, null), false); +assert.equal('abc123def'.includes(9, 1), false); +assert.equal('abc123def'.includes(9, 2), false); +assert.equal('abc123def'.includes(9, 3), false); +assert.equal('abc123def'.includes(9, 4), false); +assert.equal('abc123def'.includes(9, 5), false); +assert.equal('abc123def'.includes(9, +Infinity), false); + +assert.equal('foo[a-z]+(bar)?'.includes('[a-z]+'), true); +assert.throw(function() { 'foo[a-z]+(bar)?'.includes(/[a-z]+/); }, TypeError); +assert.throw(function() { 'foo/[a-z]+/(bar)?'.includes(/[a-z]+/); }, TypeError); +assert.equal('foo[a-z]+(bar)?'.includes('(bar)?'), true); +assert.throw(function() { 'foo[a-z]+(bar)?'.includes(/(bar)?/); }, TypeError); +assert.throw(function() { 'foo[a-z]+/(bar)?/'.includes(/(bar)?/); }, TypeError); + +// https://mathiasbynens.be/notes/javascript-unicode#poo-test +var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; +assert.equal(string.includes(''), true); +assert.equal(string.includes('\xF1t\xEBr'), true); +assert.equal(string.includes('\xE0liz\xE6'), true); +assert.equal(string.includes('\xF8n\u2603\uD83D\uDCA9'), true); +assert.equal(string.includes('\u2603'), true); +assert.equal(string.includes('\uD83D\uDCA9'), true); + +assert.throw(function() { String.prototype.includes.call(undefined); }, TypeError); +assert.throw(function() { String.prototype.includes.call(undefined, 'b'); }, TypeError); +assert.throw(function() { String.prototype.includes.call(undefined, 'b', 4); }, TypeError); +assert.throw(function() { String.prototype.includes.call(null); }, TypeError); +assert.throw(function() { String.prototype.includes.call(null, 'b'); }, TypeError); +assert.throw(function() { String.prototype.includes.call(null, 'b', 4); }, TypeError); +assert.equal(String.prototype.includes.call(42, '2'), true); +assert.equal(String.prototype.includes.call(42, 'b', 4), false); +assert.equal(String.prototype.includes.call(42, '2', 4), false); +assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 0), true); +assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 1), true); +assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 2), false); +assert.throw(function() { String.prototype.includes.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); +assert.throw(function() { String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, /./); }, TypeError); + +assert.throw(function() { String.prototype.includes.apply(undefined); }, TypeError); +assert.throw(function() { String.prototype.includes.apply(undefined, ['b']); }, TypeError); +assert.throw(function() { String.prototype.includes.apply(undefined, ['b', 4]); }, TypeError); +assert.throw(function() { String.prototype.includes.apply(null); }, TypeError); +assert.throw(function() { String.prototype.includes.apply(null, ['b']); }, TypeError); +assert.throw(function() { String.prototype.includes.apply(null, ['b', 4]); }, TypeError); +assert.equal(String.prototype.includes.apply(42, ['2']), true); +assert.equal(String.prototype.includes.apply(42, ['b', 4]), false); +assert.equal(String.prototype.includes.apply(42, ['2', 4]), false); +assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), true); +assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), true); +assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), false); +assert.throw(function() { String.prototype.includes.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); +assert.throw(function() { String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, [/./]); }, TypeError); diff --git a/test/fixtures/traceur/StringExtras/Repeat.js b/test/fixtures/traceur/StringExtras/Repeat.js new file mode 100644 index 0000000000..08c5d02ae9 --- /dev/null +++ b/test/fixtures/traceur/StringExtras/Repeat.js @@ -0,0 +1,33 @@ +// Tests taken from https://mths.be/repeat + +assert.equal(String.prototype.repeat.length, 1); + +assert.equal('abc'.repeat(), ''); +assert.equal('abc'.repeat(undefined), ''); +assert.equal('abc'.repeat(null), ''); +assert.equal('abc'.repeat(false), ''); +assert.equal('abc'.repeat(NaN), ''); +assert.equal('abc'.repeat('abc'), ''); +assert.throw(function() { 'abc'.repeat(-Infinity); }, RangeError); +assert.throw(function() { 'abc'.repeat(-1); }, RangeError); +assert.equal('abc'.repeat(-0), ''); +assert.equal('abc'.repeat(+0), ''); +assert.equal('abc'.repeat(1), 'abc'); +assert.equal('abc'.repeat(2), 'abcabc'); +assert.equal('abc'.repeat(3), 'abcabcabc'); +assert.equal('abc'.repeat(4), 'abcabcabcabc'); +assert.throw(function() { 'abc'.repeat(+Infinity); }, RangeError); + +assert.throw(function() { String.prototype.repeat.call(undefined); }, TypeError); +assert.throw(function() { String.prototype.repeat.call(undefined, 4); }, TypeError); +assert.throw(function() { String.prototype.repeat.call(null); }, TypeError); +assert.throw(function() { String.prototype.repeat.call(null, 4); }, TypeError); +assert.equal(String.prototype.repeat.call(42, 4), '42424242'); +assert.equal(String.prototype.repeat.call({ 'toString': function() { return 'abc'; } }, 2), 'abcabc'); + +assert.throw(function() { String.prototype.repeat.apply(undefined); }, TypeError); +assert.throw(function() { String.prototype.repeat.apply(undefined, [4]); }, TypeError); +assert.throw(function() { String.prototype.repeat.apply(null); }, TypeError); +assert.throw(function() { String.prototype.repeat.apply(null, [4]); }, TypeError); +assert.equal(String.prototype.repeat.apply(42, [4]), '42424242'); +assert.equal(String.prototype.repeat.apply({ 'toString': function() { return 'abc'; } }, [2]), 'abcabc'); diff --git a/test/fixtures/traceur/StringExtras/StartsWith.js b/test/fixtures/traceur/StringExtras/StartsWith.js new file mode 100644 index 0000000000..4128e27345 --- /dev/null +++ b/test/fixtures/traceur/StringExtras/StartsWith.js @@ -0,0 +1,210 @@ +// Tests taken from https://mths.be/startswith + +//Object.prototype[1] = 2; // try to break `arguments[1]` + +//assert.equal(String.prototype.startsWith.length, 1); + +assert.equal('undefined'.startsWith(), true); +assert.equal('undefined'.startsWith(undefined), true); +assert.equal('undefined'.startsWith(null), false); +assert.equal('null'.startsWith(), false); +assert.equal('null'.startsWith(undefined), false); +assert.equal('null'.startsWith(null), true); + +assert.equal('abc'.startsWith(), false); +assert.equal('abc'.startsWith(''), true); +assert.equal('abc'.startsWith('\0'), false); +assert.equal('abc'.startsWith('a'), true); +assert.equal('abc'.startsWith('b'), false); +assert.equal('abc'.startsWith('ab'), true); +assert.equal('abc'.startsWith('bc'), false); +assert.equal('abc'.startsWith('abc'), true); +assert.equal('abc'.startsWith('bcd'), false); +assert.equal('abc'.startsWith('abcd'), false); +assert.equal('abc'.startsWith('bcde'), false); + +assert.equal('abc'.startsWith('', NaN), true); +assert.equal('abc'.startsWith('\0', NaN), false); +assert.equal('abc'.startsWith('a', NaN), true); +assert.equal('abc'.startsWith('b', NaN), false); +assert.equal('abc'.startsWith('ab', NaN), true); +assert.equal('abc'.startsWith('bc', NaN), false); +assert.equal('abc'.startsWith('abc', NaN), true); +assert.equal('abc'.startsWith('bcd', NaN), false); +assert.equal('abc'.startsWith('abcd', NaN), false); +assert.equal('abc'.startsWith('bcde', NaN), false); + +assert.equal('abc'.startsWith('', false), true); +assert.equal('abc'.startsWith('\0', false), false); +assert.equal('abc'.startsWith('a', false), true); +assert.equal('abc'.startsWith('b', false), false); +assert.equal('abc'.startsWith('ab', false), true); +assert.equal('abc'.startsWith('bc', false), false); +assert.equal('abc'.startsWith('abc', false), true); +assert.equal('abc'.startsWith('bcd', false), false); +assert.equal('abc'.startsWith('abcd', false), false); +assert.equal('abc'.startsWith('bcde', false), false); + +assert.equal('abc'.startsWith('', undefined), true); +assert.equal('abc'.startsWith('\0', undefined), false); +assert.equal('abc'.startsWith('a', undefined), true); +assert.equal('abc'.startsWith('b', undefined), false); +assert.equal('abc'.startsWith('ab', undefined), true); +assert.equal('abc'.startsWith('bc', undefined), false); +assert.equal('abc'.startsWith('abc', undefined), true); +assert.equal('abc'.startsWith('bcd', undefined), false); +assert.equal('abc'.startsWith('abcd', undefined), false); +assert.equal('abc'.startsWith('bcde', undefined), false); + +assert.equal('abc'.startsWith('', null), true); +assert.equal('abc'.startsWith('\0', null), false); +assert.equal('abc'.startsWith('a', null), true); +assert.equal('abc'.startsWith('b', null), false); +assert.equal('abc'.startsWith('ab', null), true); +assert.equal('abc'.startsWith('bc', null), false); +assert.equal('abc'.startsWith('abc', null), true); +assert.equal('abc'.startsWith('bcd', null), false); +assert.equal('abc'.startsWith('abcd', null), false); +assert.equal('abc'.startsWith('bcde', null), false); + +assert.equal('abc'.startsWith('', -Infinity), true); +assert.equal('abc'.startsWith('\0', -Infinity), false); +assert.equal('abc'.startsWith('a', -Infinity), true); +assert.equal('abc'.startsWith('b', -Infinity), false); +assert.equal('abc'.startsWith('ab', -Infinity), true); +assert.equal('abc'.startsWith('bc', -Infinity), false); +assert.equal('abc'.startsWith('abc', -Infinity), true); +assert.equal('abc'.startsWith('bcd', -Infinity), false); +assert.equal('abc'.startsWith('abcd', -Infinity), false); +assert.equal('abc'.startsWith('bcde', -Infinity), false); + +assert.equal('abc'.startsWith('', -1), true); +assert.equal('abc'.startsWith('\0', -1), false); +assert.equal('abc'.startsWith('a', -1), true); +assert.equal('abc'.startsWith('b', -1), false); +assert.equal('abc'.startsWith('ab', -1), true); +assert.equal('abc'.startsWith('bc', -1), false); +assert.equal('abc'.startsWith('abc', -1), true); +assert.equal('abc'.startsWith('bcd', -1), false); +assert.equal('abc'.startsWith('abcd', -1), false); +assert.equal('abc'.startsWith('bcde', -1), false); + +assert.equal('abc'.startsWith('', -0), true); +assert.equal('abc'.startsWith('\0', -0), false); +assert.equal('abc'.startsWith('a', -0), true); +assert.equal('abc'.startsWith('b', -0), false); +assert.equal('abc'.startsWith('ab', -0), true); +assert.equal('abc'.startsWith('bc', -0), false); +assert.equal('abc'.startsWith('abc', -0), true); +assert.equal('abc'.startsWith('bcd', -0), false); +assert.equal('abc'.startsWith('abcd', -0), false); +assert.equal('abc'.startsWith('bcde', -0), false); + +assert.equal('abc'.startsWith('', +0), true); +assert.equal('abc'.startsWith('\0', +0), false); +assert.equal('abc'.startsWith('a', +0), true); +assert.equal('abc'.startsWith('b', +0), false); +assert.equal('abc'.startsWith('ab', +0), true); +assert.equal('abc'.startsWith('bc', +0), false); +assert.equal('abc'.startsWith('abc', +0), true); +assert.equal('abc'.startsWith('bcd', +0), false); +assert.equal('abc'.startsWith('abcd', +0), false); +assert.equal('abc'.startsWith('bcde', +0), false); + +assert.equal('abc'.startsWith('', 1), true); +assert.equal('abc'.startsWith('\0', 1), false); +assert.equal('abc'.startsWith('a', 1), false); +assert.equal('abc'.startsWith('b', 1), true); +assert.equal('abc'.startsWith('ab', 1), false); +assert.equal('abc'.startsWith('bc', 1), true); +assert.equal('abc'.startsWith('abc', 1), false); +assert.equal('abc'.startsWith('bcd', 1), false); +assert.equal('abc'.startsWith('abcd', 1), false); +assert.equal('abc'.startsWith('bcde', 1), false); + +assert.equal('abc'.startsWith('', +Infinity), true); +assert.equal('abc'.startsWith('\0', +Infinity), false); +assert.equal('abc'.startsWith('a', +Infinity), false); +assert.equal('abc'.startsWith('b', +Infinity), false); +assert.equal('abc'.startsWith('ab', +Infinity), false); +assert.equal('abc'.startsWith('bc', +Infinity), false); +assert.equal('abc'.startsWith('abc', +Infinity), false); +assert.equal('abc'.startsWith('bcd', +Infinity), false); +assert.equal('abc'.startsWith('abcd', +Infinity), false); +assert.equal('abc'.startsWith('bcde', +Infinity), false); + +assert.equal('abc'.startsWith('', true), true); +assert.equal('abc'.startsWith('\0', true), false); +assert.equal('abc'.startsWith('a', true), false); +assert.equal('abc'.startsWith('b', true), true); +assert.equal('abc'.startsWith('ab', true), false); +assert.equal('abc'.startsWith('bc', true), true); +assert.equal('abc'.startsWith('abc', true), false); +assert.equal('abc'.startsWith('bcd', true), false); +assert.equal('abc'.startsWith('abcd', true), false); +assert.equal('abc'.startsWith('bcde', true), false); + +assert.equal('abc'.startsWith('', 'x'), true); +assert.equal('abc'.startsWith('\0', 'x'), false); +assert.equal('abc'.startsWith('a', 'x'), true); +assert.equal('abc'.startsWith('b', 'x'), false); +assert.equal('abc'.startsWith('ab', 'x'), true); +assert.equal('abc'.startsWith('bc', 'x'), false); +assert.equal('abc'.startsWith('abc', 'x'), true); +assert.equal('abc'.startsWith('bcd', 'x'), false); +assert.equal('abc'.startsWith('abcd', 'x'), false); +assert.equal('abc'.startsWith('bcde', 'x'), false); + +assert.equal('[a-z]+(bar)?'.startsWith('[a-z]+'), true); +assert.throw(function() { '[a-z]+(bar)?'.startsWith(/[a-z]+/); }, TypeError); +assert.equal('[a-z]+(bar)?'.startsWith('(bar)?', 6), true); +assert.throw(function() { '[a-z]+(bar)?'.startsWith(/(bar)?/); }, TypeError); +assert.throw(function() { '[a-z]+/(bar)?/'.startsWith(/(bar)?/); }, TypeError); + +// https://mathiasbynens.be/notes/javascript-unicode#poo-test +var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; +assert.equal(string.startsWith(''), true); +assert.equal(string.startsWith('\xF1t\xEBr'), false); +assert.equal(string.startsWith('\xF1t\xEBr', 1), true); +assert.equal(string.startsWith('\xE0liz\xE6'), false); +assert.equal(string.startsWith('\xE0liz\xE6', 11), true); +assert.equal(string.startsWith('\xF8n\u2603\uD83D\uDCA9'), false); +assert.equal(string.startsWith('\xF8n\u2603\uD83D\uDCA9', 18), true); +assert.equal(string.startsWith('\u2603'), false); +assert.equal(string.startsWith('\u2603', 20), true); +assert.equal(string.startsWith('\uD83D\uDCA9'), false); +assert.equal(string.startsWith('\uD83D\uDCA9', 21), true); + +assert.throw(function() { String.prototype.startsWith.call(undefined); }, TypeError); +assert.throw(function() { String.prototype.startsWith.call(undefined, 'b'); }, TypeError); +assert.throw(function() { String.prototype.startsWith.call(undefined, 'b', 4); }, TypeError); +assert.throw(function() { String.prototype.startsWith.call(null); }, TypeError); +assert.throw(function() { String.prototype.startsWith.call(null, 'b'); }, TypeError); +assert.throw(function() { String.prototype.startsWith.call(null, 'b', 4); }, TypeError); +assert.equal(String.prototype.startsWith.call(42, '2'), false); +assert.equal(String.prototype.startsWith.call(42, '4'), true); +assert.equal(String.prototype.startsWith.call(42, 'b', 4), false); +assert.equal(String.prototype.startsWith.call(42, '2', 1), true); +assert.equal(String.prototype.startsWith.call(42, '2', 4), false); +assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 0), false); +assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 1), true); +assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 2), false); +assert.throw(function() { String.prototype.startsWith.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); + +assert.throw(function() { String.prototype.startsWith.apply(undefined); }, TypeError); +assert.throw(function() { String.prototype.startsWith.apply(undefined, ['b']); }, TypeError); +assert.throw(function() { String.prototype.startsWith.apply(undefined, ['b', 4]); }, TypeError); +assert.throw(function() { String.prototype.startsWith.apply(null); }, TypeError); +assert.throw(function() { String.prototype.startsWith.apply(null, ['b']); }, TypeError); +assert.throw(function() { String.prototype.startsWith.apply(null, ['b', 4]); }, TypeError); +assert.equal(String.prototype.startsWith.apply(42, ['2']), false); +assert.equal(String.prototype.startsWith.apply(42, ['4']), true); +assert.equal(String.prototype.startsWith.apply(42, ['b', 4]), false); +assert.equal(String.prototype.startsWith.apply(42, ['2', 1]), true); +assert.equal(String.prototype.startsWith.apply(42, ['2', 4]), false); +assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), false); +assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), true); +assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), false); +assert.throw(function() { String.prototype.startsWith.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); + +delete Object.prototype[1]; diff --git a/test/fixtures/traceur/StringIterator.js b/test/fixtures/traceur/StringIterator.js new file mode 100644 index 0000000000..8b5dc5ccfa --- /dev/null +++ b/test/fixtures/traceur/StringIterator.js @@ -0,0 +1,15 @@ +var s = 'abc 💩 def'; + +var expected = ['a', 'b', 'c', ' ', '💩', ' ', 'd', 'e', 'f']; +var actual = []; +for (var x of s) { + actual.push(x); +} +assert.deepEqual(actual, expected); + +var newS = new String('abc'); +var res = []; +for (var x of newS) { + res.push(x); +} +assert.deepEqual(res, ['a', 'b', 'c']); diff --git a/test/fixtures/traceur/Symbol/Inherited.js b/test/fixtures/traceur/Symbol/Inherited.js new file mode 100644 index 0000000000..98d3841e3d --- /dev/null +++ b/test/fixtures/traceur/Symbol/Inherited.js @@ -0,0 +1,28 @@ +// Options: --symbols +'use strict'; + +var s = Symbol(); +var p = {}; +Object.defineProperty(p, s, { + get: function() { + return 42; + }, + configurable: true +}); + +var o = Object.create(p); +assert.equal(42, o[s]); +assert.throws(function() { + o[s] = 1; +}, TypeError); + +var val; +Object.defineProperty(p, s, { + set: function(v) { + val = v; + }, + configurable: true +}); + +o[s] = 33; +assert.equal(33, val); diff --git a/test/fixtures/traceur/Symbol/Object.js b/test/fixtures/traceur/Symbol/Object.js new file mode 100644 index 0000000000..903f9871de --- /dev/null +++ b/test/fixtures/traceur/Symbol/Object.js @@ -0,0 +1,31 @@ +// Options: --symbols + +var s = Symbol(); +var object = {}; +object[s] = 42; +assert.equal(42, object[s]); +// Native Symbol throws for ToString. +// assert.isUndefined(object[s + '']); +assertArrayEquals([], Object.getOwnPropertyNames(object)); +assert.isTrue(object.hasOwnProperty(s)); + +assert.equal(32, object[s] -= 10); +assert.equal(16, object[s] /= 2); +assert.equal(16, object[s]); + +var n = Symbol(); +assert.equal(object[n] = 1, 1); +assert.equal(object[n] += 2, 3); + +assert.isTrue(Object.getOwnPropertyDescriptor(object, n).enumerable); + +assert.isTrue(n in object); +assert.isTrue(delete object[n]); +assert.isFalse(n in object); + +var keys = []; +for (var k in object) { + keys.push(k); +} +assert.equal(0, keys.length, keys + ''); +assert.equal(0, Object.keys(object).length); diff --git a/test/fixtures/traceur/Symbol/ObjectModel.js b/test/fixtures/traceur/Symbol/ObjectModel.js new file mode 100644 index 0000000000..5a2fd4dbf6 --- /dev/null +++ b/test/fixtures/traceur/Symbol/ObjectModel.js @@ -0,0 +1,13 @@ +// Options: --symbols + +var s = Symbol('s'); +assert.equal(typeof s, 'symbol'); +assert.equal(s.constructor, Symbol); +assert.isFalse(s instanceof Symbol); + +assert.throws(() => { + new Symbol; +}); + +assert.equal(s.toString(), 'Symbol(s)'); +assert.equal(s.valueOf(), s); diff --git a/test/fixtures/traceur/Symbol/TransformationOff.js b/test/fixtures/traceur/Symbol/TransformationOff.js new file mode 100644 index 0000000000..81d3bb64cc --- /dev/null +++ b/test/fixtures/traceur/Symbol/TransformationOff.js @@ -0,0 +1,10 @@ +// Options: --symbols=false + +var s = Symbol(); +var s2 = Symbol(); +var object = {}; +object[s] = 1; +object[s2] = 2; + +assert.equal(object[s], 1); +assert.equal(object[s2], 2); diff --git a/test/fixtures/traceur/Syntax/ArrayWithHoles.js b/test/fixtures/traceur/Syntax/ArrayWithHoles.js new file mode 100644 index 0000000000..47477ebe94 --- /dev/null +++ b/test/fixtures/traceur/Syntax/ArrayWithHoles.js @@ -0,0 +1,10 @@ +var arr = [,1, ,3,]; +assert.equal(4, arr.length); + +var arr2 = [,1, ,...[3],]; +assert.equal(4, arr.length); + +var x, y; +[x, , y] = [0, 1, 2]; +assert.equal(0, x); +assert.equal(2, y); diff --git a/test/fixtures/traceur/Syntax/Empty.js b/test/fixtures/traceur/Syntax/Empty.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/fixtures/traceur/Syntax/Error_Arguments.js b/test/fixtures/traceur/Syntax/Error_Arguments.js new file mode 100644 index 0000000000..bb2d410758 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_Arguments.js @@ -0,0 +1,6 @@ +// Error: :6:6: Unexpected token ) + +function f(x) { +} + +f(x, ); diff --git a/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js b/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js new file mode 100644 index 0000000000..39072eeec4 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js @@ -0,0 +1,3 @@ +// Error: :3:15: Unexpected token in + +for (var i, j in {}) {} diff --git a/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js b/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js new file mode 100644 index 0000000000..47300cbe20 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js @@ -0,0 +1,3 @@ +// Error: :3:15: Unexpected token of + +for (var i, j of []) {} diff --git a/test/fixtures/traceur/Syntax/Error_FunctionParam.js b/test/fixtures/traceur/Syntax/Error_FunctionParam.js new file mode 100644 index 0000000000..4f7b7741e5 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_FunctionParam.js @@ -0,0 +1,5 @@ +// Error: :3:14: Unexpected token ) + +function f(x,) { + return x; +} diff --git a/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js b/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js new file mode 100644 index 0000000000..da9ad46a47 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js @@ -0,0 +1,7 @@ +// Error: 6:7: Unexpected token ; + +function f(x) { + var x = 0; + x + ++; +} diff --git a/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js b/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js new file mode 100644 index 0000000000..04c19e18b1 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js @@ -0,0 +1,3 @@ +// Error: :3:2: Expected '/' in regular expression literal + +/ \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js b/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js new file mode 100644 index 0000000000..3e35a4d5cc --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js @@ -0,0 +1,3 @@ +// Error: :3:5: Character code '48' is not a valid identifier start char + +var \u0030ab = 42; // 0ab diff --git a/test/fixtures/traceur/Syntax/Error_WithInClass.js b/test/fixtures/traceur/Syntax/Error_WithInClass.js new file mode 100644 index 0000000000..3015ee964f --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_WithInClass.js @@ -0,0 +1,7 @@ +// Error: :5:5: Strict mode code may not include a with statement + +class C { + method() { + with ({}) {} + } +} \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/Error_WithInModule.module.js b/test/fixtures/traceur/Syntax/Error_WithInModule.module.js new file mode 100644 index 0000000000..31172a46bc --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_WithInModule.module.js @@ -0,0 +1,3 @@ +// Error: :3:1: Strict mode code may not include a with statement + +with ({}) {} diff --git a/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js b/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js new file mode 100644 index 0000000000..9c7ddee6f1 --- /dev/null +++ b/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js @@ -0,0 +1,6 @@ +// Error: :5:7: Unexpected token * + +function* yieldStarNewLine() { + yield + *42; +} diff --git a/test/fixtures/traceur/Syntax/ExpressionValidation.js b/test/fixtures/traceur/Syntax/ExpressionValidation.js new file mode 100644 index 0000000000..37548d8231 --- /dev/null +++ b/test/fixtures/traceur/Syntax/ExpressionValidation.js @@ -0,0 +1,25 @@ +'use strict'; + +// test MemberLookupExpression +function f(a) { + var b = [42]; + return (a||b)[0]; +} + +assert.equal(42, f(null)); +assert.equal(43, f([43])); + +// test NewExpression +var a, b = function() { this.ans = 42; }; +assert.equal(new (a||b)().ans, 42); + +a = function() { this.ans = 43; }; +assert.equal(new (a||b)().ans, 43); + +// test CallExpression +a = undefined; +b = function() { return 42; } +assert.equal((a||b)(), 42); + +a = function() { return 43; } +assert.equal((a||b)(), 43); diff --git a/test/fixtures/traceur/Syntax/ImplicitSemiColon.js b/test/fixtures/traceur/Syntax/ImplicitSemiColon.js new file mode 100644 index 0000000000..af00da62c4 --- /dev/null +++ b/test/fixtures/traceur/Syntax/ImplicitSemiColon.js @@ -0,0 +1,6 @@ +function f() { + return + 42; +} + +assert.isUndefined(f()); \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/ImportFromTypo.module.js b/test/fixtures/traceur/Syntax/ImportFromTypo.module.js new file mode 100644 index 0000000000..4ae054a80e --- /dev/null +++ b/test/fixtures/traceur/Syntax/ImportFromTypo.module.js @@ -0,0 +1,3 @@ +// Error: :3:11: Unexpected token FROM + +import {} FROM 'abc'; diff --git a/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js b/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js new file mode 100644 index 0000000000..43b6ab7fdf --- /dev/null +++ b/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js @@ -0,0 +1,4 @@ +assert.equal(1 .toString(), '1'); +assert.equal(1.1.toString(), '1.1'); +assert.equal(1e1.toString(), '10'); +assert.equal(1E1.toString(), '10'); diff --git a/test/fixtures/traceur/Syntax/RegularExpression.js b/test/fixtures/traceur/Syntax/RegularExpression.js new file mode 100644 index 0000000000..527ece6961 --- /dev/null +++ b/test/fixtures/traceur/Syntax/RegularExpression.js @@ -0,0 +1,8 @@ +var re1 = /a*b/; +var re2 = /=a+/; +var re3 = /\//; +var re4 = /=/; +var re5 = /a*b/g; +var re6 = /=a+/g; +var re7 = /\//g; +var re8 = /=/g; diff --git a/test/fixtures/traceur/Syntax/StringEscapes.js b/test/fixtures/traceur/Syntax/StringEscapes.js new file mode 100644 index 0000000000..335c142dbe --- /dev/null +++ b/test/fixtures/traceur/Syntax/StringEscapes.js @@ -0,0 +1,13 @@ +var o1 = { + '\\\'': 42, + '\0\b\f\n\r\t\v\x42\u1234': 1234 +}; +var o2 = { + '\\\'\ +': 42, + '\0\b\f\n\r\t\v\x42\u1234': 1234 +}; + +assertArrayEquals(Object.keys(o1), Object.keys(o2)); +assert.equal(42, o1['\\\'']); +assert.equal(42, o2['\\\'']); diff --git a/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js b/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js new file mode 100644 index 0000000000..9f2dd2d23a --- /dev/null +++ b/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js @@ -0,0 +1,5 @@ +var a\u0062c = 1; +assert.equal(1, abc); + +var λ = 2; +assert.equal(2, \u03bb); diff --git a/test/fixtures/traceur/Syntax/null.js b/test/fixtures/traceur/Syntax/null.js new file mode 100644 index 0000000000..ec747fa47d --- /dev/null +++ b/test/fixtures/traceur/Syntax/null.js @@ -0,0 +1 @@ +null \ No newline at end of file diff --git a/test/fixtures/traceur/TemplateLiterals/CallExpression.js b/test/fixtures/traceur/TemplateLiterals/CallExpression.js new file mode 100644 index 0000000000..69ab401dba --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/CallExpression.js @@ -0,0 +1,18 @@ +// Options: --block-binding + +{ + let i = 0, called = 0; + function f() { + called++; + return function() { + return ++i; + }; + } + + assert.equal(1, f() `whatevs`); + assert.equal(1, called); + assert.equal(2, f `abc` `def`); + assert.equal(2, called); + assert.equal(3, f `ghi` ()); + assert.equal(3, called); +} diff --git a/test/fixtures/traceur/TemplateLiterals/CommaExpression.js b/test/fixtures/traceur/TemplateLiterals/CommaExpression.js new file mode 100644 index 0000000000..c6749db6db --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/CommaExpression.js @@ -0,0 +1,10 @@ +assert.equal('24', `${ 1, 2 }${ 3, 4 }`); +assert.equal('6', `${ 5, 6 }`); + +function templateLiteralCommaTest(callsite, x, y) { + assert.equal(2, x); + assert.equal(4, y); + return x + y; +} + +assert.equal(6, templateLiteralCommaTest`${ 1, 2 }${ 3, 4 }`); diff --git a/test/fixtures/traceur/TemplateLiterals/Default.js b/test/fixtures/traceur/TemplateLiterals/Default.js new file mode 100644 index 0000000000..7b9326f29e --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Default.js @@ -0,0 +1,95 @@ +// Options: --block-binding + +assert.equal('', ``); +assert.equal('a', `a`); +assert.equal('"', `"`); +assert.equal("'", `'`); +assert.equal("`", `\``); +assert.equal('"', `\"`); + +assert.equal('\\"', `\\"`); +assert.equal('"\\', `"\\`); + +assert.equal('\n', `\n`); +assert.equal('\r', `\r`); +assert.equal('\r\n', `\r\n`); +assert.equal('\t', `\t`); +assert.equal('\u2028', `\u2028`); +assert.equal('\u2029', `\u2029`); + +assert.equal('$', `$`); +assert.equal('$ a', `$ a`); +assert.equal('$ {a}', `$ {a}`); + +assert.equal('undefined', `${ undefined }`); +assert.equal('null', `${ null }`); + +{ + let $ = 'DOLLAR'; + let $$ = 'DD' + assert.equal('$$', `$$`); + assert.equal('DOLLAR', `${$}`); + assert.equal('$$$', `$$$`); + assert.equal('DOLLARDOLLAR', `${$}${$}`); + assert.equal('DOLLAR$$', `${$}$$`); + assert.equal('$$DOLLAR', `$$${$}`); + assert.equal('$$$', `\$$$`); + + let a = 'A'; + let b = 'B'; + assert.equal('aAbB', `a${a}b${b}`); + assert.equal('aAb$b', `a${a}b$b`); + assert.equal('$a.$b', `$a.$b`); + + let x = 3; + let y = 5; + + assert.equal('3 + 5 = 8', `${x} + ${y} = ${ x + y}`); + + // nested + assert.equal('3 + 5 = 8', `${x} + ${ `${y} = ${ `${x + y}` }` }`); + + assert.equal('3', `${x}`); + assert.equal(' 3', ` ${x}`); + assert.equal('3 ', `${x} `); + assert.equal('35', `${x}${y}`); + assert.equal(' 35', ` ${x}${y}`); + assert.equal('3 5', `${x} ${y}`); + assert.equal('35 ', `${x}${y} `); + assert.equal(' 3 5 ', ` ${x} ${y} `); + + // def s(x): + // return ' ' if x else '' + // for i in range(16): + // v = (s(i&8), s(i&4), s(i&2), s(i&1)) + // print "assert.equal('%s3%s5%s8%s', `%s${x}%s${y}%s${x+y}%s`);" % (v+v) + assert.equal('358', `${x}${y}${x+y}`); + assert.equal('358 ', `${x}${y}${x+y} `); + assert.equal('35 8', `${x}${y} ${x+y}`); + assert.equal('35 8 ', `${x}${y} ${x+y} `); + assert.equal('3 58', `${x} ${y}${x+y}`); + assert.equal('3 58 ', `${x} ${y}${x+y} `); + assert.equal('3 5 8', `${x} ${y} ${x+y}`); + assert.equal('3 5 8 ', `${x} ${y} ${x+y} `); + assert.equal(' 358', ` ${x}${y}${x+y}`); + assert.equal(' 358 ', ` ${x}${y}${x+y} `); + assert.equal(' 35 8', ` ${x}${y} ${x+y}`); + assert.equal(' 35 8 ', ` ${x}${y} ${x+y} `); + assert.equal(' 3 58', ` ${x} ${y}${x+y}`); + assert.equal(' 3 58 ', ` ${x} ${y}${x+y} `); + assert.equal(' 3 5 8', ` ${x} ${y} ${x+y}`); + assert.equal(' 3 5 8 ', ` ${x} ${y} ${x+y} `); +} + +// Line continuations +assert.equal('ab', `a\ +b`); +assert.equal('ab', `a\ +\ +b`); + +assert.equal('\n', ` +`); +assert.equal('\n\n', ` + +`); diff --git a/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js b/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js new file mode 100644 index 0000000000..75f41d16f3 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --template-literals=false +// Error: :4:1: Unexpected token ` + +`abc`; diff --git a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js new file mode 100644 index 0000000000..781d8d0298 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js @@ -0,0 +1,5 @@ +// Error: :6:1: Unterminated template literal + +function f() {} + +f`a${ ` diff --git a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js new file mode 100644 index 0000000000..89df2eb6d3 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js @@ -0,0 +1,5 @@ +// Error: :5:7: Unexpected token } + +function f() {} + +f`a${ }` diff --git a/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js b/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js new file mode 100644 index 0000000000..00acb1154a --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js @@ -0,0 +1,5 @@ +// Error: :6:1: Unterminated template literal + +function f() {} + +f`not closed \` diff --git a/test/fixtures/traceur/TemplateLiterals/InBlock.js b/test/fixtures/traceur/TemplateLiterals/InBlock.js new file mode 100644 index 0000000000..61e8073ac3 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/InBlock.js @@ -0,0 +1,9 @@ +// This just tests that we do not get any compile errors. + +{ + `abc` +} + +(function() { + `def` +}); \ No newline at end of file diff --git a/test/fixtures/traceur/TemplateLiterals/MemberExpression.js b/test/fixtures/traceur/TemplateLiterals/MemberExpression.js new file mode 100644 index 0000000000..dfa14f4661 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/MemberExpression.js @@ -0,0 +1,25 @@ +// Options: --block-binding + +{ + let a = [function() { + return 1; + }]; + + assert.equal(1, a[0] `whatevs`); + + function f() { + return [function() { + return 2; + }]; + } + + assert.equal(2, f `abc` [0] `def`); + + let o = { + g: function() { + return 3; + } + }; + + assert.equal(3, o.g `ghi`); +} diff --git a/test/fixtures/traceur/TemplateLiterals/StringRaw.js b/test/fixtures/traceur/TemplateLiterals/StringRaw.js new file mode 100644 index 0000000000..29a55675df --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/StringRaw.js @@ -0,0 +1,10 @@ +assert.equal('', String.raw ``); +assert.equal('\n', String.raw ` +`); +assert.equal('\\n', String.raw `\n`); +assert.equal('\\n42\\t', String.raw `\n${ 40 + 2 }\t`); +assert.equal('\n42\t', String.raw ` +${42} `); +assert.equal('\\\n42\\\n', String.raw `\ +${42}\ +`); diff --git a/test/fixtures/traceur/TemplateLiterals/Tag.js b/test/fixtures/traceur/TemplateLiterals/Tag.js new file mode 100644 index 0000000000..727b8a8977 --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/Tag.js @@ -0,0 +1,87 @@ +// Options: --block-binding + +{ + function expose(callSite, var_args) { + assert.isTrue(Array.isArray(callSite)); + assert.isTrue(Object.isFrozen(callSite)); + var rawDescr = Object.getOwnPropertyDescriptor(callSite, 'raw'); + assert.isTrue(rawDescr !== undefined); + assert.isTrue('value' in rawDescr); + assert.isFalse(rawDescr.enumerable); + assert.isFalse(rawDescr.writable); + assert.isFalse(rawDescr.configurable); + assert.isTrue(Object.isFrozen(callSite.raw)); + assert.isTrue(Array.isArray(callSite.raw)); + assert.isTrue(Object.isFrozen(callSite.raw)); + assert.equal(callSite.raw.length, callSite.length); + + // The number of the literal portions is always same or one greater than the + // number of substitutions + var literalPortionCount = callSite.raw.length; + var substitutionCount = arguments.length - 1; + assert.isTrue(literalPortionCount == substitutionCount || + literalPortionCount == substitutionCount + 1); + + return arguments; + } + + let x = 3; + let y = 5; + + assert.equal(1, expose``.length); + assert.equal(1, expose`a`.length); + assert.equal(2, expose`a${x}`.length); + assert.equal(2, expose`a${x} b`.length); + assert.equal(3, expose`a${x} ${y}`.length); + assert.equal(3, expose`${x}${y}`.length); + assert.equal(2, expose`${x}a`.length); + + assert.equal(1, expose``[0].length); + assert.equal(1, expose``[0].raw.length); + + assertArrayEquals(['a'], expose`a`[0].raw); + assertArrayEquals(['a'], expose`a`[0]); + + assertArrayEquals(['\\n'], expose`\n`[0].raw); + assertArrayEquals(['\n'], expose`\n`[0]); + + assertArrayEquals(['\\r'], expose`\r`[0].raw); + assertArrayEquals(['\r'], expose`\r`[0]); + + assertArrayEquals(['\\f'], expose`\f`[0].raw); + assertArrayEquals(['\f'], expose`\f`[0]); + + assertArrayEquals(['\\b'], expose`\b`[0].raw); + assertArrayEquals(['\b'], expose`\b`[0]); + + assertArrayEquals(['\\u2028'], expose`\u2028`[0].raw); + assertArrayEquals(['\u2028'], expose`\u2028`[0]); + + assertArrayEquals(['\\u2029'], expose`\u2029`[0].raw); + assertArrayEquals(['\u2029'], expose`\u2029`[0]); + + assertArrayEquals(['a', 'b'], expose`a${x}b`[0].raw); + assertArrayEquals(['a', 'b'], expose`a${x}b`[0]); + + // These have tab characters in them. + assertArrayEquals(['\t', '\\t'], expose` ${x}\t`[0].raw); + assertArrayEquals(['\t', '\t'], expose` ${x}\t`[0]); + + assertArrayEquals(['\n', '\\n'], expose` +${x}\n`[0].raw); + assertArrayEquals(['\n', '\n'], expose` +${x}\n`[0]); + + // These contains the ES new line chars \u2028 and \u2029 + assertArrayEquals(['\u2028', '\\u2028'], expose`
${x}\u2028`[0].raw); + assertArrayEquals(['\u2028', '\u2028'], expose`
${x}\u2028`[0]); + + assertArrayEquals(['\u2029', '\\u2029'], expose`
${x}\u2029`[0].raw); + assertArrayEquals(['\u2029', '\u2029'], expose`
${x}\u2029`[0]); + + assertArrayEquals(['a/*b*/c'], expose`a/*b*/c`[0].raw); + assertArrayEquals(['a/*b*/c'], expose`a/*b*/c`[0]); + + assertArrayEquals(['a'], expose/* comment */`a`[0].raw); + assertArrayEquals(['a'], expose/* comment */`a`[0]); +} diff --git a/test/fixtures/traceur/TemplateLiterals/resources/f.js b/test/fixtures/traceur/TemplateLiterals/resources/f.js new file mode 100644 index 0000000000..f78d33206e --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/resources/f.js @@ -0,0 +1,3 @@ +export function f(...args) { + return args; +} diff --git a/test/fixtures/traceur/TemplateLiterals/resources/m.js b/test/fixtures/traceur/TemplateLiterals/resources/m.js new file mode 100644 index 0000000000..364751373a --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/resources/m.js @@ -0,0 +1,3 @@ +import {f} from './f.js'; + +assert.equal('a', (f `a`)[0][0]); diff --git a/test/fixtures/traceur/TemplateLiterals/resources/n.js b/test/fixtures/traceur/TemplateLiterals/resources/n.js new file mode 100644 index 0000000000..108fed14bf --- /dev/null +++ b/test/fixtures/traceur/TemplateLiterals/resources/n.js @@ -0,0 +1,3 @@ +import {f} from './f.js'; + +assert.equal('b', (f `b`)[0][0]); diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js new file mode 100644 index 0000000000..13c5e86850 --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences +// Error: :4:12: The code point in a Unicode escape sequence cannot exceed 10FFFF + +"\u{1000000}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js new file mode 100644 index 0000000000..1a36396b2a --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences=false +// Error: :4:4: Hex digit expected + +"\u{0}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js new file mode 100644 index 0000000000..ccffc71d37 --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences +// Error: :4:5: Hex digit expected + +"\u{"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js new file mode 100644 index 0000000000..aae0133dcf --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences +// Error: :4:6: Hex digit expected + +"\u{1"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js new file mode 100644 index 0000000000..29efadfc29 --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences +// Error: :4:5: Hex digit expected + +"\u{ diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js new file mode 100644 index 0000000000..1ac1390cf4 --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js @@ -0,0 +1,4 @@ +// Options: --unicode-escape-sequences +// Error: :4:5: Hex digit expected + +"\u{}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js b/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js new file mode 100644 index 0000000000..fbc1c788a7 --- /dev/null +++ b/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js @@ -0,0 +1,15 @@ +// Options: --unicode-escape-sequences + +(function() { + assert.equal("\u{0}", "\u0000"); + assert.equal("\u{000000001}", "\u0001"); + assert.equal("\u{FFFF}", "\uFFFF"); + + assert.equal("\u{10000}", "\uD800\uDC00"); + assert.equal("\u{10FFFF}", "\uDBFF\uDFFF"); + + assert.equal("\\u{1}", "\\u{1}"); + assert.equal("\\\u{1}", "\\\u0001"); + + assert.equal("\U{1}", "\U{1}"); +})(); diff --git a/test/fixtures/traceur/Yield/Arguments.js b/test/fixtures/traceur/Yield/Arguments.js new file mode 100644 index 0000000000..6e02361a44 --- /dev/null +++ b/test/fixtures/traceur/Yield/Arguments.js @@ -0,0 +1,8 @@ +function* f() { + yield [arguments[0], arguments[1]]; +} + +for (var arr of f(1, 2)) { + assert.equal(1, arr[0]); + assert.equal(2, arr[1]); +} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/BinaryOperator.js b/test/fixtures/traceur/Yield/BinaryOperator.js new file mode 100644 index 0000000000..49a63ff271 --- /dev/null +++ b/test/fixtures/traceur/Yield/BinaryOperator.js @@ -0,0 +1,9 @@ +function* f(x) { + var a = (yield x) + (yield x + 1); + return a; +} + +var g = f(1); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(1), {value: 2, done: false}); +assert.deepEqual(g.next(2), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/Break.js b/test/fixtures/traceur/Yield/Break.js new file mode 100644 index 0000000000..1fd1b2c46d --- /dev/null +++ b/test/fixtures/traceur/Yield/Break.js @@ -0,0 +1,48 @@ +var x = ':'; + +function* f() { + label1: { + x += 'a'; + yield 1; + x += 'b' + while (true && true) { + break label1; + } + x += 'c'; + } + x += 'd' +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assert.equal(x, ':abd'); + + +x = ':'; + +function* f2() { + label1: { + x += 'a'; + while(true) { + x += 'b'; + label2: { + x += 'c'; + yield 3; + x += 'd'; + while (true) { + break label1; + } + x += 'e'; + } + x += 'f'; + } + x += 'g'; + } + x += 'h'; +} + +g = f2(); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assert.equal(x, ':abcdh'); diff --git a/test/fixtures/traceur/Yield/CommaOperator.js b/test/fixtures/traceur/Yield/CommaOperator.js new file mode 100644 index 0000000000..1747a62dff --- /dev/null +++ b/test/fixtures/traceur/Yield/CommaOperator.js @@ -0,0 +1,9 @@ +function* f(x, y) { + yield x, yield y; + return x + y; +} + +var g = f(1, 2); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(1), {value: 2, done: false}); +assert.deepEqual(g.next(2), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/Continue.js b/test/fixtures/traceur/Yield/Continue.js new file mode 100644 index 0000000000..61d392e093 --- /dev/null +++ b/test/fixtures/traceur/Yield/Continue.js @@ -0,0 +1,18 @@ +var x = ':'; + +function* f() { + yield 1; + var j = 0; + label1: for (var i = 0; i < 3; i++) { + x += 'i:' + i; + x += 'j:' + j; + if (j++ > 4) return; + continue label1; + x += 'x'; + } +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assert.equal(x, ':i:0j:0i:1j:1i:2j:2'); diff --git a/test/fixtures/traceur/Yield/DefaultArguments.js b/test/fixtures/traceur/Yield/DefaultArguments.js new file mode 100644 index 0000000000..9a009aa806 --- /dev/null +++ b/test/fixtures/traceur/Yield/DefaultArguments.js @@ -0,0 +1,7 @@ +function* f(x = 1) { + yield x; +} + +for (var x of f(42)) { + assert.equal(42, x); +} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/DoGenerator.js b/test/fixtures/traceur/Yield/DoGenerator.js new file mode 100644 index 0000000000..42f901fc00 --- /dev/null +++ b/test/fixtures/traceur/Yield/DoGenerator.js @@ -0,0 +1,19 @@ +function* doGenerator() { + var i = 0; + do { + if (++i % 2 == 0) continue; + yield i; + } while (i < 6); +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('135', accumulate(doGenerator())); diff --git a/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js b/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js new file mode 100644 index 0000000000..967aba4264 --- /dev/null +++ b/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js @@ -0,0 +1,33 @@ +function* f() { + var x = 0; + do { + yield x++; + } while (yield 'test'); +} + +var g = f(); +assert.deepEqual(g.next(), {value: 0, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(true), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(true), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(false), {value: undefined, done: true}); + +function* f2() { + var x = 0; + do { + yield x++; + } while ((yield 'a') || (yield 'b')); +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 0, done: false}); +assert.deepEqual(g2.next(), {value: 'a', done: false}); +assert.deepEqual(g2.next(true), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 'a', done: false}); +assert.deepEqual(g2.next(false), {value: 'b', done: false}); +assert.deepEqual(g2.next(true), {value: 2, done: false}); +assert.deepEqual(g2.next(false), {value: 'a', done: false}); +assert.deepEqual(g2.next(false), {value: 'b', done: false}); +assert.deepEqual(g2.next(), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/EmptyGenerator.js b/test/fixtures/traceur/Yield/EmptyGenerator.js new file mode 100644 index 0000000000..0fd11a4e7a --- /dev/null +++ b/test/fixtures/traceur/Yield/EmptyGenerator.js @@ -0,0 +1,5 @@ +function* f() { +} + +var g = f(); +assert.deepEqual(g.next(), {done: true, value: undefined}); diff --git a/test/fixtures/traceur/Yield/Error_Disabled.js b/test/fixtures/traceur/Yield/Error_Disabled.js new file mode 100644 index 0000000000..6add24ed19 --- /dev/null +++ b/test/fixtures/traceur/Yield/Error_Disabled.js @@ -0,0 +1,8 @@ +// Options: --generators=false +// Error: :4:9: Unexpected token * + +function* range(start, end) { + for (var i = start; i < end; i++) { + yield i; + } +} diff --git a/test/fixtures/traceur/Yield/Error_Disabled2.js b/test/fixtures/traceur/Yield/Error_Disabled2.js new file mode 100644 index 0000000000..303c0eb057 --- /dev/null +++ b/test/fixtures/traceur/Yield/Error_Disabled2.js @@ -0,0 +1,7 @@ +// Options: --forOf=false +// Error: :5:12: Unexpected token of + +var s = []; +for (var i of yieldFor()) { + s.push(i); +} diff --git a/test/fixtures/traceur/Yield/Error_MissingStar.js b/test/fixtures/traceur/Yield/Error_MissingStar.js new file mode 100644 index 0000000000..4023645a9e --- /dev/null +++ b/test/fixtures/traceur/Yield/Error_MissingStar.js @@ -0,0 +1,5 @@ +// Error: :4:9: Semi-colon expected + +function simpleGenerator() { + yield 1; +} diff --git a/test/fixtures/traceur/Yield/Finally.js b/test/fixtures/traceur/Yield/Finally.js new file mode 100644 index 0000000000..e4519b74f4 --- /dev/null +++ b/test/fixtures/traceur/Yield/Finally.js @@ -0,0 +1,22 @@ +var finallyVisited = false; + +function* test() { + try { + yield 42; + } finally { + finallyVisited = true; + } +} + +var it = test(); +assert.deepEqual({value: 42, done: false}, it.next()); +assert.isFalse(finallyVisited); + +assert.deepEqual({value: undefined, done: true}, it.next()); +assert.isTrue(finallyVisited); + +finallyVisited = false; +for (var i of test()) { + assert.equal(42, i); +} +assert.isTrue(finallyVisited); diff --git a/test/fixtures/traceur/Yield/ForEmptyGenerator.js b/test/fixtures/traceur/Yield/ForEmptyGenerator.js new file mode 100644 index 0000000000..760f40ad6a --- /dev/null +++ b/test/fixtures/traceur/Yield/ForEmptyGenerator.js @@ -0,0 +1,15 @@ +function* forEmptyGenerator() { + yield* []; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('', accumulate(forEmptyGenerator())); diff --git a/test/fixtures/traceur/Yield/ForGenerator.js b/test/fixtures/traceur/Yield/ForGenerator.js new file mode 100644 index 0000000000..526e9e5e06 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForGenerator.js @@ -0,0 +1,25 @@ +function* forGenerator() { + var a = 1, b = 1; + for (var i = 0; i < 4; i++) { + // TODO(jmesserly): this was changed until we get destructing + //[a, b] = [b, a + b]; + var t0 = b; + var t1 = a + b; + a = t0; + b = t1; + + yield a; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('1235', accumulate(forGenerator())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator.js b/test/fixtures/traceur/Yield/ForInGenerator.js new file mode 100644 index 0000000000..09b6a0f9c7 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForInGenerator.js @@ -0,0 +1,27 @@ +function* forInGenerator() { + var object = { + a: 0, + b: 1, + c: 2 + }; + for (var key in object) { + if (key == 'a') { + delete object.b; + object.d = 3; + } + yield key; + yield object[key]; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('a0c2',accumulate(forInGenerator())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator2.js b/test/fixtures/traceur/Yield/ForInGenerator2.js new file mode 100644 index 0000000000..47c3f9bcfd --- /dev/null +++ b/test/fixtures/traceur/Yield/ForInGenerator2.js @@ -0,0 +1,28 @@ +function* forInGenerator2() { + var object = { + a: 0, + b: 1, + c: 2 + }; + var key; + for (key in object) { + if (key == 'a') { + delete object.b; + object.d = 3; + } + yield key; + yield object[key]; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('a0c2',accumulate(forInGenerator2())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator3.js b/test/fixtures/traceur/Yield/ForInGenerator3.js new file mode 100644 index 0000000000..093158bc11 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForInGenerator3.js @@ -0,0 +1,27 @@ +function* forInGenerator3() { + var object = { + a: 0, + b: { + c: 1, + }, + d: 2 + }; + for (var key in object) { + yield key; + for (var key2 in object[key]) { + yield key2; + } + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('abcd',accumulate(forInGenerator3())); diff --git a/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js b/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js new file mode 100644 index 0000000000..ec389c977c --- /dev/null +++ b/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js @@ -0,0 +1,15 @@ +function* forLexicallyNestedGenerator() { + yield* (function*() { yield [1,2,3]; yield* [4,5,6]; })(); +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('1,2,3456', accumulate(forLexicallyNestedGenerator())); diff --git a/test/fixtures/traceur/Yield/ForMissingParts.js b/test/fixtures/traceur/Yield/ForMissingParts.js new file mode 100644 index 0000000000..6ea2941738 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForMissingParts.js @@ -0,0 +1,95 @@ +function* f0() { + var x = 0; + for (;;) { + yield x++; + } +} + +function* f1() { + var x = 0; + for (; ; 1) { + yield x++; + } +} + +function* f2() { + var x = 0; + for (; 1; ) { + yield x++; + } +} + +function* f3() { + var x = 0; + for (; 1; 1) { + yield x++; + } +} + +function* f4() { + var x = 0; + for (1; ; ) { + yield x++; + } +} + +function* f5() { + var x = 0; + for (1; ; 1) { + yield x++; + } +} + +function* f6() { + var x = 0; + for (1; 1; ) { + yield x++; + } +} + +function* f7() { + var x = 0; + for (1; 1; 1) { + yield x++; + } +} + +var g0 = f0(); +assert.deepEqual(g0.next(), {value: 0, done: false}); +assert.deepEqual(g0.next(), {value: 1, done: false}); +assert.deepEqual(g0.next(), {value: 2, done: false}); + +var g1 = f1(); +assert.deepEqual(g1.next(), {value: 0, done: false}); +assert.deepEqual(g1.next(), {value: 1, done: false}); +assert.deepEqual(g1.next(), {value: 2, done: false}); + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 0, done: false}); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 2, done: false}); + +var g3 = f3(); +assert.deepEqual(g3.next(), {value: 0, done: false}); +assert.deepEqual(g3.next(), {value: 1, done: false}); +assert.deepEqual(g3.next(), {value: 2, done: false}); + +var g4 = f4(); +assert.deepEqual(g4.next(), {value: 0, done: false}); +assert.deepEqual(g4.next(), {value: 1, done: false}); +assert.deepEqual(g4.next(), {value: 2, done: false}); + +var g5 = f5(); +assert.deepEqual(g5.next(), {value: 0, done: false}); +assert.deepEqual(g5.next(), {value: 1, done: false}); +assert.deepEqual(g5.next(), {value: 2, done: false}); + +var g6 = f6(); +assert.deepEqual(g6.next(), {value: 0, done: false}); +assert.deepEqual(g6.next(), {value: 1, done: false}); +assert.deepEqual(g6.next(), {value: 2, done: false}); + +var g7 = f7(); +assert.deepEqual(g7.next(), {value: 0, done: false}); +assert.deepEqual(g7.next(), {value: 1, done: false}); +assert.deepEqual(g7.next(), {value: 2, done: false}); diff --git a/test/fixtures/traceur/Yield/ForOfGenerator.js b/test/fixtures/traceur/Yield/ForOfGenerator.js new file mode 100644 index 0000000000..94def9e357 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForOfGenerator.js @@ -0,0 +1,49 @@ +function* forEachGenerator() { + yield* forInGenerator3(); + yield* forInGenerator2(); +} + +function* forInGenerator3() { + var object = { + a: 0, + b: { + c: 1, + }, + d: 2 + }; + for (var key in object) { + yield key; + for (var key2 in object[key]) { + yield key2; + } + } +} + +function* forInGenerator2() { + var object = { + a: 0, + b: 1, + c: 2 + }; + var key; + for (key in object) { + if (key == 'a') { + delete object.b; + object.d = 3; + } + yield key; + yield object[key]; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('abcda0c2', accumulate(forEachGenerator())); diff --git a/test/fixtures/traceur/Yield/ForStatement.js b/test/fixtures/traceur/Yield/ForStatement.js new file mode 100644 index 0000000000..08e2b1dbf5 --- /dev/null +++ b/test/fixtures/traceur/Yield/ForStatement.js @@ -0,0 +1,46 @@ +function* f() { + var x = 0; + for (yield 'init'; x < 3; x++) { + yield x; + } +} + +var g = f(); +assert.deepEqual(g.next(), {value: 'init', done: false}); +assert.deepEqual(g.next(), {value: 0, done: false}); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + +function* f2() { + for (var x = 0; yield 'test'; x++) { + yield x; + } +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 'test', done: false}); +assert.deepEqual(g2.next(true), {value: 0, done: false}); +assert.deepEqual(g2.next(), {value: 'test', done: false}); +assert.deepEqual(g2.next(true), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 'test', done: false}); +assert.deepEqual(g2.next(true), {value: 2, done: false}); +assert.deepEqual(g2.next(), {value: 'test', done: false}); +assert.deepEqual(g2.next(false), {value: undefined, done: true}); + +function* f3() { + for (var x = 0; x < 5; x = yield 'inc') { + yield x; + } +} + +var g3 = f3(); +assert.deepEqual(g3.next(), {value: 0, done: false}); +assert.deepEqual(g3.next(), {value: 'inc', done: false}); +assert.deepEqual(g3.next(2), {value: 2, done: false}); +assert.deepEqual(g3.next(), {value: 'inc', done: false}); +assert.deepEqual(g3.next(4), {value: 4, done: false}); +assert.deepEqual(g3.next(), {value: 'inc', done: false}); +assert.deepEqual(g3.next(1), {value: 1, done: false}); +assert.deepEqual(g3.next(), {value: 'inc', done: false}); +assert.deepEqual(g3.next(5), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/FunctionDeclaration.js b/test/fixtures/traceur/Yield/FunctionDeclaration.js new file mode 100644 index 0000000000..2d0893d277 --- /dev/null +++ b/test/fixtures/traceur/Yield/FunctionDeclaration.js @@ -0,0 +1,12 @@ +(function() { + + function* f() { + function g() { + return 42; + } + yield g; + } + + assert.equal(42, f().next().value()); + +})(); diff --git a/test/fixtures/traceur/Yield/GeneratorReturn.js b/test/fixtures/traceur/Yield/GeneratorReturn.js new file mode 100644 index 0000000000..b26d35f08e --- /dev/null +++ b/test/fixtures/traceur/Yield/GeneratorReturn.js @@ -0,0 +1,86 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +//----------------------------------------------------------------------------- + +var g; + +function* G1() { + return 42; +} + +function* G2() { + return; +} + +function* G3() { + return undefined; +} + +function* G4() { + return 42; + yield 1000; +} + +function* G5() { + yield 1000; + return 42; +} + +function* G6() { + try { + yield 1000; + return 42; + yield 2000; + } catch(e) { + return 43; + } finally { + // TODO: Is 'return' allowed inside 'finally'? + // return 44; + } +} + +//---- + +function id(G) { + return G; +} + +function wrap(G) { + return function*() { + var r = yield* G(); + return r; + }; +} + +//---- + +var tests = [ + [G1, [], 42], + [G2, [], undefined], + [G3, [], undefined], + [G4, [], 42], + [G5, [1000], 42], + [G6, [1000], 42] +]; + +//----------------------------------------------------------------------------- + +[id, wrap].forEach((W) => { + + tests.forEach(([G, y, r]) => { + var g = W(G)(); + y.forEach((x) => assert.deepEqual({value: x, done: false}, g.next())); + + assert.deepEqual({value: r, done: true}, g.next()); + assertClosed(g); + }); + + //---- + + g = W(G6)(); + assert.deepEqual({value: 1000, done: false}, g.next()); + assert.deepEqual({value: 43, done: true}, g.throw()); + +}); diff --git a/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js b/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js new file mode 100644 index 0000000000..ebfaf68da9 --- /dev/null +++ b/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js @@ -0,0 +1,10 @@ +var x = 0; + +function* f() { + x++; +} + +var g = f(); +assert.equal(x, 0); +assert.deepEqual(g.next(), {done: true, value: undefined}); +assert.equal(x, 1); diff --git a/test/fixtures/traceur/Yield/Hoisting.js b/test/fixtures/traceur/Yield/Hoisting.js new file mode 100644 index 0000000000..5ccad05058 --- /dev/null +++ b/test/fixtures/traceur/Yield/Hoisting.js @@ -0,0 +1,13 @@ +// f is declared at the end to test hoisting. + +var g = f(); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + +function* f() { + yield 1; +} + +function* f() { + yield 2; +} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/HoistingBlockbinding.js b/test/fixtures/traceur/Yield/HoistingBlockbinding.js new file mode 100644 index 0000000000..ffe0ac320c --- /dev/null +++ b/test/fixtures/traceur/Yield/HoistingBlockbinding.js @@ -0,0 +1,21 @@ +// Options: --block-binding + +{ + function* f() { + yield 1; + } + + let g = f(); + assert.deepEqual(g.next(), {value: 1, done: false}); + assert.deepEqual(g.next(), {value: undefined, done: true}); +} + +{ + function* f() { + yield 1; + } + + let g = f(); + assert.deepEqual(g.next(), {value: 1, done: false}); + assert.deepEqual(g.next(), {value: undefined, done: true}); +} diff --git a/test/fixtures/traceur/Yield/IfGenerator.js b/test/fixtures/traceur/Yield/IfGenerator.js new file mode 100644 index 0000000000..43758965b3 --- /dev/null +++ b/test/fixtures/traceur/Yield/IfGenerator.js @@ -0,0 +1,26 @@ +function* ifGenerator(condition) { + if (condition) { + yield 1; + } + if (!condition) { + yield 2; + } + if (condition) { + yield 3; + } else { + yield 4; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('13', accumulate(ifGenerator(true))); +assert.equal('24', accumulate(ifGenerator(false))); diff --git a/test/fixtures/traceur/Yield/IfStatementWithYield.js b/test/fixtures/traceur/Yield/IfStatementWithYield.js new file mode 100644 index 0000000000..f5b5a8a192 --- /dev/null +++ b/test/fixtures/traceur/Yield/IfStatementWithYield.js @@ -0,0 +1,14 @@ +function* f(x) { + if (yield x) { + return 2; + } + return 3; +} + +var g = f(1); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(true), {value: 2, done: true}); + +g = f(4); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(false), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/LabelledBlockGenerator.js b/test/fixtures/traceur/Yield/LabelledBlockGenerator.js new file mode 100644 index 0000000000..c79897f816 --- /dev/null +++ b/test/fixtures/traceur/Yield/LabelledBlockGenerator.js @@ -0,0 +1,20 @@ +var i = 0; +var s = ''; + +function* f() { + s += 'a'; + while(i++ < 3) { + s += 'b'; + label1: { + s += 'c'; + break label1; + s += 'd'; + } + s += 'e'; + } + s += 'f'; +} + +var g = f(); +g.next(); +assert.equal(s, 'abcebcebcef'); diff --git a/test/fixtures/traceur/Yield/LabelledBreakGenerator.js b/test/fixtures/traceur/Yield/LabelledBreakGenerator.js new file mode 100644 index 0000000000..c656461fb4 --- /dev/null +++ b/test/fixtures/traceur/Yield/LabelledBreakGenerator.js @@ -0,0 +1,34 @@ +function* labelledBreakGenerator() { + var x = 1; + var y = 2; +label: + while (true) { + x++; + while (true) { + yield x * y; + y++; + if (y == 3) { + continue label; + } + yield x * y * 5; + if (y == 4) { + break label; + } + yield x * y * 13; + } + yield x * y * 11; + } + yield x * y * 7; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result += String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('496084', accumulate(labelledBreakGenerator())); diff --git a/test/fixtures/traceur/Yield/MapFilterGenerator.js b/test/fixtures/traceur/Yield/MapFilterGenerator.js new file mode 100644 index 0000000000..5ae3d9bb52 --- /dev/null +++ b/test/fixtures/traceur/Yield/MapFilterGenerator.js @@ -0,0 +1,31 @@ +function mapFilterGenerator() { + function* map(list, fun) { + for (var item of list) { + yield fun(item); + } + } + function* filter(list, fun) { + for (var item of list) { + if (fun(item)) { + yield item; + } + } + } + // squares even numbers. no intermediate array is created. + var numbers = [1,2,3,4,5,6,7,8,9,10]; + return map( + filter(numbers, function(x) { return x % 2 == 0; }), + function(x) { return (x * x) + ','; }); +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('4,16,36,64,100,', accumulate(mapFilterGenerator())); diff --git a/test/fixtures/traceur/Yield/ObjectModel.js b/test/fixtures/traceur/Yield/ObjectModel.js new file mode 100644 index 0000000000..60638f6bf4 --- /dev/null +++ b/test/fixtures/traceur/Yield/ObjectModel.js @@ -0,0 +1,41 @@ +// f is declared at the end to test hoisting. + +var GeneratorFunctionPrototype = f.__proto__; +var GeneratorFunction = GeneratorFunctionPrototype.constructor; + +assert.equal(GeneratorFunction.name, 'GeneratorFunction'); +assert.equal(GeneratorFunction.prototype, GeneratorFunctionPrototype); +assert.equal(GeneratorFunctionPrototype.prototype.constructor, + GeneratorFunctionPrototype); +assert.equal(GeneratorFunctionPrototype.prototype, f.prototype.__proto__); +assert.equal(GeneratorFunctionPrototype.__proto__, Function.prototype); + +var g = f(); +assert.instanceOf(g, f); + +assert.equal(g.__proto__, f.prototype); + +assert.deepEqual([], Object.getOwnPropertyNames(f.prototype)); +assert.deepEqual([], Object.getOwnPropertyNames(g)); + +f.prototype.x = 42; + +var g2 = f(); +assert.equal(g2.x, 42); + +var g3 = new f(); +assert.equal(g3.x, 42); + +function* f2() { + yield 1; +} + +assert.equal(f.__proto__, f2.__proto__); + +assert.isFalse(f.hasOwnProperty('constructor')); +assert.equal(f.__proto__.constructor.name, 'GeneratorFunction'); + +// Intentionally at the end to test hoisting. +function* f() { + yield this; +} diff --git a/test/fixtures/traceur/Yield/OverrideGenerator.js b/test/fixtures/traceur/Yield/OverrideGenerator.js new file mode 100644 index 0000000000..a897f02322 --- /dev/null +++ b/test/fixtures/traceur/Yield/OverrideGenerator.js @@ -0,0 +1,14 @@ +function* f() { + yield 1; +} + +var f2 = f; + +f = 42; + +var g = f2(); + +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + +assert.instanceOf(g, f2); diff --git a/test/fixtures/traceur/Yield/ReturnInFinally.js b/test/fixtures/traceur/Yield/ReturnInFinally.js new file mode 100644 index 0000000000..fac9cb49db --- /dev/null +++ b/test/fixtures/traceur/Yield/ReturnInFinally.js @@ -0,0 +1,33 @@ +function* f() { + try { + yield 1; + } finally { + return 2; + } + yield 3; + return 4; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: true}); + +function* f2() { + try { + yield 1 + } catch (ex) { + yield ex; + } finally { + return 2; + } + yield 3; +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 2, done: true}); + +g2 = f2(); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.throw(42), {value: 42, done: false}); +assert.deepEqual(g2.next(), {value: 2, done: true}); diff --git a/test/fixtures/traceur/Yield/ReturnYield.js b/test/fixtures/traceur/Yield/ReturnYield.js new file mode 100644 index 0000000000..a349833743 --- /dev/null +++ b/test/fixtures/traceur/Yield/ReturnYield.js @@ -0,0 +1,55 @@ +function* f() { + return yield 1; +} + +var g = f(); + +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(2), {value: 2, done: true}); +function* f2() { + return (yield 3) + (yield 4); +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 3, done: false}); +assert.deepEqual(g2.next(5), {value: 4, done: false}); +assert.deepEqual(g2.next(6), {value: 11, done: true}); + + +function* f3() { + return (yield 7) || (yield 8); +} + +var g3 = f3(); +assert.deepEqual(g3.next(), {value: 7, done: false}); +assert.deepEqual(g3.next(9), {value: 9, done: true}); + +g3 = f3(); +assert.deepEqual(g3.next(), {value: 7, done: false}); +assert.deepEqual(g3.next(0), {value: 8, done: false}); +assert.deepEqual(g3.next(10), {value: 10, done: true}); + +function* f4() { + return (yield 11) && (yield 12); +} + +var g4 = f4(); +assert.deepEqual(g4.next(), {value: 11, done: false}); +assert.deepEqual(g4.next(0), {value: 0, done: true}); +g4 = f4(); +assert.deepEqual(g4.next(), {value: 11, done: false}); +assert.deepEqual(g4.next(13), {value: 12, done: false}); +assert.deepEqual(g4.next(14), {value: 14, done: true}); + +function* f5() { + return (yield 15) ? (yield 16) : (yield 17); +} + +var g5 = f5(); +assert.deepEqual(g5.next(), {value: 15, done: false}); +assert.deepEqual(g5.next(true), {value: 16, done: false}); +assert.deepEqual(g5.next(18), {value: 18, done: true}); +g5 = f5(); +assert.deepEqual(g5.next(), {value: 15, done: false}); +assert.deepEqual(g5.next(false), {value: 17, done: false}); +assert.deepEqual(g5.next(19), {value: 19, done: true}); diff --git a/test/fixtures/traceur/Yield/ReturnYieldFor.js b/test/fixtures/traceur/Yield/ReturnYieldFor.js new file mode 100644 index 0000000000..1448be3e23 --- /dev/null +++ b/test/fixtures/traceur/Yield/ReturnYieldFor.js @@ -0,0 +1,15 @@ +function* f() { + return yield* h(); +} + +function* h() { + yield 111; + yield 222; + return 333; +} + +var g = f(); + +assert.deepEqual({value: 111, done: false}, g.next()); +assert.deepEqual({value: 222, done: false}, g.next()); +assert.deepEqual({value: 333, done: true}, g.next()); diff --git a/test/fixtures/traceur/Yield/SequenceGenerator.js b/test/fixtures/traceur/Yield/SequenceGenerator.js new file mode 100644 index 0000000000..d895985767 --- /dev/null +++ b/test/fixtures/traceur/Yield/SequenceGenerator.js @@ -0,0 +1,23 @@ +function* sequenceGenerator() { + var i = 1; + yield i; + i = 3; + yield i + 1; + { + var x = 3; + yield i + x; + yield x; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('1463', accumulate(sequenceGenerator())); diff --git a/test/fixtures/traceur/Yield/SimpleGenerator.js b/test/fixtures/traceur/Yield/SimpleGenerator.js new file mode 100644 index 0000000000..b865e12f0c --- /dev/null +++ b/test/fixtures/traceur/Yield/SimpleGenerator.js @@ -0,0 +1,15 @@ +function* simpleGenerator() { + yield 1; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('1', accumulate(simpleGenerator())); diff --git a/test/fixtures/traceur/Yield/StatementTestGenerator.js b/test/fixtures/traceur/Yield/StatementTestGenerator.js new file mode 100644 index 0000000000..74105b412c --- /dev/null +++ b/test/fixtures/traceur/Yield/StatementTestGenerator.js @@ -0,0 +1,37 @@ +// Options: --block-binding + +function* statementTestGenerator() { + // all of these statement constructs should be allowed + // provided that they contain no yield statements + switch (1) { + case 2: break; + default: break; + } + try { + } catch (e) {} + try { + } finally {} + do {} while (false); + for (;false;) {} + + //TODO(jmesserly): this had to be changed to "var" until we get BlockBindingTransformer + //for (let x in {}) {} + //for (let x of simpleGenerator()) {} + for (var x in {}) {} + for (var x of simpleGenerator()) {} + + if (false) {} else {} + //TODO(jmesserly): this had to be changed to "var" until we get BlockBindingTransformer + //{ let x = 1; } + { var x = 1; } + { const y = 2; } + + yield 1; +} + + +function* simpleGenerator() { + yield 1; +} + +// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Yield/SwitchGenerator.js b/test/fixtures/traceur/Yield/SwitchGenerator.js new file mode 100644 index 0000000000..c516ec0131 --- /dev/null +++ b/test/fixtures/traceur/Yield/SwitchGenerator.js @@ -0,0 +1,37 @@ +function* switchGenerator(val) { + switch (val) { + case 1: + yield val; + case 2: + yield val * 2; + break; + case 3: + break; + default: + yield val * 10; + } + + // switch without a default + switch (val) { + case 1000: + yield val; + break; + } + yield val * 5; +} + + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('125', accumulate(switchGenerator(1))); +assert.equal('410', accumulate(switchGenerator(2))); +assert.equal('15', accumulate(switchGenerator(3))); +assert.equal('4020', accumulate(switchGenerator(4))); diff --git a/test/fixtures/traceur/Yield/SwitchStatementWithYield.js b/test/fixtures/traceur/Yield/SwitchStatementWithYield.js new file mode 100644 index 0000000000..12affe930e --- /dev/null +++ b/test/fixtures/traceur/Yield/SwitchStatementWithYield.js @@ -0,0 +1,23 @@ +function* f(x) { + switch (yield x) { + case 1: + return 1; + case 2: + return 2; + default: + return 3; + } + throw new Error('Unreachable'); +} + +var g = f(1); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(2), {value: 2, done: true}); + +g = f(3); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(1), {value: 1, done: true}); + +var g = f(4); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(55), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/This.js b/test/fixtures/traceur/Yield/This.js new file mode 100644 index 0000000000..b17bea2b69 --- /dev/null +++ b/test/fixtures/traceur/Yield/This.js @@ -0,0 +1,8 @@ +function* f() { + yield this; +} + +var o = {}; +for (var x of f.call(o)) { + assert.equal(o, x); +} diff --git a/test/fixtures/traceur/Yield/Tree.js b/test/fixtures/traceur/Yield/Tree.js new file mode 100644 index 0000000000..ac6a5187c4 --- /dev/null +++ b/test/fixtures/traceur/Yield/Tree.js @@ -0,0 +1,75 @@ +// Options: --symbols + +// A binary tree class. +class Tree { + constructor(label, left, right) { + this.label = label; + this.left = left; + this.right = right; + } + *[Symbol.iterator]() { + if (this.left) { + yield* this.left; + } + yield this.label; + if (this.right) { + yield* this.right; + } + } +} + +// Create a Tree from a list. +function tree(list) { + var n = list.length; + if (n == 0) { + return null; + } + var i = Math.floor(n / 2); + return new Tree(list[i], tree(list.slice(0, i)), tree(list.slice(i + 1))); +} + +// A recursive generator that generates Tree labels in in-order. +function* inorder1(t) { + if (t) { + for (var x of inorder1(t.left)) { + yield x; + } + yield t.label; + for (var x of inorder1(t.right)) { + yield x; + } + } +} + +// A non-recursive generator. +function* inorder2(node) { + var stack = []; + while (node) { + while (node.left) { + stack.push(node); + node = node.left; + } + yield node.label; + while (!node.right && stack.length) { + node = stack.pop(); + yield node.label; + } + node = node.right; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; +var root = tree(alphabet); +assert.equal(alphabet, accumulate(inorder1(root))); +assert.equal(alphabet, accumulate(inorder2(root))); +assert.equal(alphabet, accumulate(root)); diff --git a/test/fixtures/traceur/Yield/Try.js b/test/fixtures/traceur/Yield/Try.js new file mode 100644 index 0000000000..bad1941f1f --- /dev/null +++ b/test/fixtures/traceur/Yield/Try.js @@ -0,0 +1,52 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +function* f() { + yield 1; + try { + yield 2; + yield 3; + } catch (ex) { + yield ex; + } + yield 4; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); diff --git a/test/fixtures/traceur/Yield/Try10.js b/test/fixtures/traceur/Yield/Try10.js new file mode 100644 index 0000000000..d289a199d4 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try10.js @@ -0,0 +1,90 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex; + } + yield 5; + } catch (ex) { + yield 6 + ex; + } finally { + x = 7 + } + yield x; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.throw('b'), {value: '6b', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 7); diff --git a/test/fixtures/traceur/Yield/Try11.js b/test/fixtures/traceur/Yield/Try11.js new file mode 100644 index 0000000000..3b131f46b6 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try11.js @@ -0,0 +1,106 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x, y; + +function* f() { + x = 0; + y = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } finally { + x = 4; + } + yield x; + } catch (ex) { + yield 5 + ex; + } finally { + y = 6 + } + yield y; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 6); diff --git a/test/fixtures/traceur/Yield/Try12.js b/test/fixtures/traceur/Yield/Try12.js new file mode 100644 index 0000000000..edcb5e3506 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try12.js @@ -0,0 +1,111 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x, y; + +function* f() { + x = 0; + y = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex; + } finally { + x = 5; + } + yield x; + } catch (ex) { + yield 6 + ex; + } finally { + y = 7 + } + yield y; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.throw('b'), {value: '6b', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 7); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 7); diff --git a/test/fixtures/traceur/Yield/Try2.js b/test/fixtures/traceur/Yield/Try2.js new file mode 100644 index 0000000000..f6ec973710 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try2.js @@ -0,0 +1,57 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + yield 3; + } finally { + x = 4; + } + yield x; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try3.js b/test/fixtures/traceur/Yield/Try3.js new file mode 100644 index 0000000000..ead1617dfd --- /dev/null +++ b/test/fixtures/traceur/Yield/Try3.js @@ -0,0 +1,56 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + yield 3; + } catch (ex) { + yield ex; + } finally { + x = 4; + } + yield x; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try4.js b/test/fixtures/traceur/Yield/Try4.js new file mode 100644 index 0000000000..72692a4f9c --- /dev/null +++ b/test/fixtures/traceur/Yield/Try4.js @@ -0,0 +1,80 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +function* f() { + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex; + } + yield 5; + } catch (ex) { + yield 6 + ex; + } + yield 7; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.throw('b'), {value: '6b', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); diff --git a/test/fixtures/traceur/Yield/Try5.js b/test/fixtures/traceur/Yield/Try5.js new file mode 100644 index 0000000000..31ba02b0b8 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try5.js @@ -0,0 +1,95 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } finally { + x = 4 + } + yield x; + } catch (ex) { + yield 5 + ex; + } + yield 6; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try6.js b/test/fixtures/traceur/Yield/Try6.js new file mode 100644 index 0000000000..b5fa2e2b7c --- /dev/null +++ b/test/fixtures/traceur/Yield/Try6.js @@ -0,0 +1,74 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex + } + yield 5; + } finally { + x = 6; + } + yield x; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 6); diff --git a/test/fixtures/traceur/Yield/Try7.js b/test/fixtures/traceur/Yield/Try7.js new file mode 100644 index 0000000000..43bc6db414 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try7.js @@ -0,0 +1,78 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x, y; + +function* f() { + x = 0; + y = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } finally { + x = 4; + } + yield x; + } finally { + y = 5; + } + yield y; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assert.equal(x, 0); +assert.equal(y, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 4, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 4); +assert.equal(y, 5); diff --git a/test/fixtures/traceur/Yield/Try8.js b/test/fixtures/traceur/Yield/Try8.js new file mode 100644 index 0000000000..19f9e621e3 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try8.js @@ -0,0 +1,83 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x, y; + +function* f() { + x = 0; + y = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex; + } finally { + x = 5; + } + yield x; + } finally { + y = 6; + } + yield y; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 6, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 6); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 5); +assert.equal(y, 6); diff --git a/test/fixtures/traceur/Yield/Try9.js b/test/fixtures/traceur/Yield/Try9.js new file mode 100644 index 0000000000..90677decc6 --- /dev/null +++ b/test/fixtures/traceur/Yield/Try9.js @@ -0,0 +1,90 @@ +function assertClosed(g) { + assert.deepEqual({value: undefined, done: true}, g.next()); +} + +var x; + +function* f() { + x = 0; + yield 1; + try { + yield 2; + try { + yield 3; + } catch (ex) { + yield 4 + ex; + } finally { + x = 5; + } + yield x; + } catch (ex) { + yield 6 + ex; + } + yield 7; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.throws(() => g.throw('ex')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.throws(() => g.throw('b')); +assertClosed(g); +assert.equal(x, 0); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); +assert.deepEqual(g.throw('b'), {value: '6b', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 5, done: false}); +assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); +assert.deepEqual(g.next(), {value: 7, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); +assertClosed(g); +assert.equal(x, 5); diff --git a/test/fixtures/traceur/Yield/TryCatchGenerator.js b/test/fixtures/traceur/Yield/TryCatchGenerator.js new file mode 100644 index 0000000000..2efd6c7076 --- /dev/null +++ b/test/fixtures/traceur/Yield/TryCatchGenerator.js @@ -0,0 +1,153 @@ +function* tryCatchGenerator() { + var x; + try { + yield 1; + throw 2; + yield 3; + } catch (e) { + x = e; + } + yield x; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result += value; + } + return result; +} + +//----------------------------------------------------------------------------- + +function id(G) { + return G; +} + +function wrap(G) { + return function* () { + yield* G(); + }; +} + + +[id, wrap].forEach((W) => { // wrap_forEach + +// ---------------------------------------------------------------------------- + +assert.equal('12', accumulate(tryCatchGenerator())); + +// ---------------------------------------------------------------------------- + +function* throwGenerator() { + yield 1; + throw 2; + yield 3; +} + +function* throwFromCatchGenerator() { + try { + throw 1; + } catch(e) { + yield e; + throw 2; + yield 3; + } +} + +function* throwFromFinallyGenerator() { + try { + yield 1; + } finally { + throw 2; + } + yield 3; +} + +function accumulateCatch(iterator) { + var result = ''; + var i; + for (i = 0; i < 4; i++) { + try { + for (var value of iterator) { + result += value; + } + } catch(e) { + result += ' [' + e + ']'; + } + } + return result; +} + +function repeat(s, n) { + return Array(n + 1).join(s); +} + +// ---------------------------------------------------------------------------- + +assert.equal('1 [2]', accumulateCatch(W(throwGenerator)())); +assert.equal('1 [2]', accumulateCatch(W(throwFromCatchGenerator)())); +assert.equal('1 [2]', accumulateCatch(W(throwFromFinallyGenerator)())); + +// ---------------------------------------------------------------------------- + +// out-of-band info +var oob; + +function* throwOOBGen() { + try { + yield 1; + throw 2; + oob += 3; + } finally { + oob += 4; + } + oob += 5; + yield 6; +} + +function* throwOOB2xGen() { + try { + try { + yield 1; + throw 2; + oob += 3; + } finally { + oob += 4; + } + oob += 5; + yield 6; + } catch(e) { + yield 7 + '(' + e + ')'; + throw 8; + } finally { + oob += 9; + } +} + +function accumulateCatchOOB(iterator) { + var result = ''; + var i; + + for (i = 0; i < 4; i++) { + oob = ''; + try { + for (var value of iterator) { + result += value; + } + } catch(e) { + result += ' [' + e + ']'; + } finally { + result += ' <' + oob + '>'; + } + } + return result; +} + +// ---------------------------------------------------------------------------- + +var emptyResult = repeat(' <>', 3); +assert.equal('1 [2] <4>' + emptyResult, accumulateCatchOOB(W(throwOOBGen)())); +assert.equal('17(2) [8] <49>' + emptyResult, accumulateCatchOOB(W(throwOOB2xGen)())); + +}); // end wrap_forEach diff --git a/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js b/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js new file mode 100644 index 0000000000..ce631b33ca --- /dev/null +++ b/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js @@ -0,0 +1,21 @@ +// yield form within a catch block +function* tryCatchYieldGenerator() { + var x = 3; + try { + throw 5; + } catch (e) { + yield e * x; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('15', accumulate(tryCatchYieldGenerator())); diff --git a/test/fixtures/traceur/Yield/TryFinallyGenerator.js b/test/fixtures/traceur/Yield/TryFinallyGenerator.js new file mode 100644 index 0000000000..b21b9bdacb --- /dev/null +++ b/test/fixtures/traceur/Yield/TryFinallyGenerator.js @@ -0,0 +1,39 @@ +function* tryFinallyGenerator() { + var x = 1; + var y; + + // finally inside a catch + try { + try { + yield x; + throw 7; + x = 2; + } finally { + x = 3; + } + } catch (e) { + y = e; + } + yield x * y; + + // finally with no enclosing try + try { + y = 11; + yield y; + } finally { + y = 3; + } + yield y; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('121113', accumulate(tryFinallyGenerator())); diff --git a/test/fixtures/traceur/Yield/WhileGenerator.js b/test/fixtures/traceur/Yield/WhileGenerator.js new file mode 100644 index 0000000000..c35e852381 --- /dev/null +++ b/test/fixtures/traceur/Yield/WhileGenerator.js @@ -0,0 +1,25 @@ +function* whileGenerator(max, continueValue, breakValue) { + var i = 0; + while (i < max) { + i++; + if (i == continueValue) { + continue; + } + if (i == breakValue) { + break; + } + yield i; + } +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('13', accumulate(whileGenerator(10, 2, 4))); diff --git a/test/fixtures/traceur/Yield/WhileStatementWithYield.js b/test/fixtures/traceur/Yield/WhileStatementWithYield.js new file mode 100644 index 0000000000..a79c3127f0 --- /dev/null +++ b/test/fixtures/traceur/Yield/WhileStatementWithYield.js @@ -0,0 +1,33 @@ +function* f() { + var x = 0; + while (yield 'test') { + yield x++; + } +} + +var g = f(); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(true), {value: 0, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(true), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(true), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: 'test', done: false}); +assert.deepEqual(g.next(false), {value: undefined, done: true}); + +function* f2() { + var x = 0; + while ((yield 'a') || (yield 'b')) { + yield x++; + } +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 'a', done: false}); +assert.deepEqual(g2.next(true), {value: 0, done: false}); +assert.deepEqual(g2.next(), {value: 'a', done: false}); +assert.deepEqual(g2.next(false), {value: 'b', done: false}); +assert.deepEqual(g2.next(true), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 'a', done: false}); +assert.deepEqual(g2.next(false), {value: 'b', done: false}); +assert.deepEqual(g2.next(false), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/YieldAssignThrow.js b/test/fixtures/traceur/Yield/YieldAssignThrow.js new file mode 100644 index 0000000000..c9247d7619 --- /dev/null +++ b/test/fixtures/traceur/Yield/YieldAssignThrow.js @@ -0,0 +1,18 @@ +function* f() { + var x; + try { + x = yield 1; + } catch (ex) { + yield ex; + } + return 2; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: true}); + +g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.throw(3), {value: 3, done: false}); +assert.deepEqual(g.next(), {value: 2, done: true}); diff --git a/test/fixtures/traceur/Yield/YieldIdentifier.js b/test/fixtures/traceur/Yield/YieldIdentifier.js new file mode 100644 index 0000000000..51143e7b71 --- /dev/null +++ b/test/fixtures/traceur/Yield/YieldIdentifier.js @@ -0,0 +1,29 @@ +(function() { + + // ensure non strict mode. + function f() { return this; } + assert(f.call(undefined) !== undefined); + + var yield = 1; + assert.equal(yield, 1); + + function g(yield) { + return yield; + } + assert.equal(g(2), 2); + + var o = { + yield: yield + }; + assert.equal(o.yield, 1); + + var o2 = { + yield + }; + assert.equal(o.yield, 1); + + function h(yield) { + return yield * yield; + } + assert.equal(h(3), 9); +})(); diff --git a/test/fixtures/traceur/Yield/YieldInFinally.js b/test/fixtures/traceur/Yield/YieldInFinally.js new file mode 100644 index 0000000000..772a1fc630 --- /dev/null +++ b/test/fixtures/traceur/Yield/YieldInFinally.js @@ -0,0 +1,41 @@ +var x; + +function* f() { + x = 0; + try { + x++; + } finally { + yield x++; + } + yield x++; +} + +var g = f(); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(), {value: 2, done: false}); +assert.deepEqual(g.next(), {value: undefined, done: true}); + +function* f2() { + try { + yield 1 + } catch (ex) { + yield ex; + } finally { + yield 2; + } + yield 3; +} + +var g2 = f2(); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.next(), {value: 2, done: false}); +assert.deepEqual(g2.next(), {value: 3, done: false}); +assert.deepEqual(g2.next(), {value: undefined, done: true}); + +g2 = f2(); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.throw(42), {value: 42, done: false}); +assert.deepEqual(g2.next(), {value: 2, done: false}); +assert.deepEqual(g2.next(), {value: 3, done: false}); +assert.deepEqual(g2.next(), {value: undefined, done: true}); + diff --git a/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js b/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js new file mode 100644 index 0000000000..ce398ce020 --- /dev/null +++ b/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js @@ -0,0 +1,24 @@ +function* yieldUndefinedGenerator1() { + yield 1; + yield; + yield 2; +} + +function* yieldUndefinedGenerator2() { + yield 1; + yield undefined; + yield 2; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('1undefined2', accumulate(yieldUndefinedGenerator1())); +assert.equal('1undefined2', accumulate(yieldUndefinedGenerator2())); diff --git a/test/fixtures/traceur/Yield/YieldYield.js b/test/fixtures/traceur/Yield/YieldYield.js new file mode 100644 index 0000000000..1bddfe81a6 --- /dev/null +++ b/test/fixtures/traceur/Yield/YieldYield.js @@ -0,0 +1,19 @@ +function* f(x) { + yield (yield x); +} + +var g = f(1); +assert.deepEqual(g.next(), {value: 1, done: false}); +assert.deepEqual(g.next(2), {value: 2, done: false}); +assert.deepEqual(g.next(3), {value: undefined, done: true}); + +function* f2(x) { + yield* (yield x); +} + +g = f(1); +var g2 = f2(1); +assert.deepEqual(g2.next(), {value: 1, done: false}); +assert.deepEqual(g2.next(g), {value: 1, done: false}); +assert.deepEqual(g2.next(2), {value: 2, done: false}); +assert.deepEqual(g2.next(3), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js b/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js new file mode 100644 index 0000000000..d9dc2d096b --- /dev/null +++ b/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js @@ -0,0 +1,29 @@ +// finally inside a try finally +function* tryFinallyFinallyGenerator() { + var y; + + try { + y = 13; + try { + yield y; + } finally { + y = 17; + } + yield y; + } finally { + y = 23; + } + yield y; +} + +function accumulate(iterator) { + var result = ''; + for (var value of iterator) { + result = result + String(value); + } + return result; +} + +// ---------------------------------------------------------------------------- + +assert.equal('131723', accumulate(tryFinallyFinallyGenerator())); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/closure/actual.js b/test/fixtures/transformation/es6-let-scoping-traceur/closure/actual.js deleted file mode 100644 index e443b2633f..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/closure/actual.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - let foo = 'bar'; - - [true].forEach(function() { - foo = 'baz'; - }); - - console.log(foo); -}); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/closure/expected.js b/test/fixtures/transformation/es6-let-scoping-traceur/closure/expected.js deleted file mode 100644 index ae5ea97d75..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/closure/expected.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -(function () { - var foo = "bar"; - - [true].forEach(function () { - foo = "baz"; - }); - - console.log(foo); -}); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/deep-nested/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/deep-nested/exec.js deleted file mode 100644 index 6880f64525..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/deep-nested/exec.js +++ /dev/null @@ -1,9 +0,0 @@ -var a = 'var a'; -{ - var b = 'var b'; - { - var c = 'var c'; - let d = 'let d'; - assert.equal(d, 'let d'); - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/for-in-initializers/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/for-in-initializers/exec.js deleted file mode 100644 index 3228d3680e..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/for-in-initializers/exec.js +++ /dev/null @@ -1,17 +0,0 @@ -var result; -{ - let let_result = []; - let let_array = ['one', 'two', 'three']; - for (var index in let_array) { - let let_index = index; - let let_value = let_array[let_index]; - let_result.push(function () { - return [let_index, let_value]; - }); - } - result = let_result; -} - -assert.deepEqual(['0', 'one'], result[0]()); -assert.deepEqual(['1', 'two'], result[1]()); -assert.deepEqual(['2', 'three'], result[2]()); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/for-initializers/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/for-initializers/exec.js deleted file mode 100644 index 89892cb5c3..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/for-initializers/exec.js +++ /dev/null @@ -1,26 +0,0 @@ -var result; -{ - let let_x = 'let x'; - let let_l = []; - for (var var_x = 1, var_y = 2, var_z = 3; var_x < 10; var_x ++) { - let l_x = var_x, l_y = var_y, l_z = var_z; - let_l.push(function () { - return [l_x, l_y, l_z]; - }); - } - result = let_l; -} - -assert.deepEqual(result.map(function (fn) { - return fn(); -}), [ - [ 1, 2, 3 ], - [ 2, 2, 3 ], - [ 3, 2, 3 ], - [ 4, 2, 3 ], - [ 5, 2, 3 ], - [ 6, 2, 3 ], - [ 7, 2, 3 ], - [ 8, 2, 3 ], - [ 9, 2, 3 ] -]); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/actual.js b/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/actual.js deleted file mode 100644 index fdd92c1221..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/actual.js +++ /dev/null @@ -1,9 +0,0 @@ -domready(function () { - let a = 1; - const b = 1; - runIt(); - - function runIt() { - console.log(a + b); - } -}); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/expected.js b/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/expected.js deleted file mode 100644 index 3e681cb35b..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/function-declaration/expected.js +++ /dev/null @@ -1,11 +0,0 @@ -"use strict"; - -domready(function () { - var a = 1; - var b = 1; - runIt(); - - function runIt() { - console.log(a + b); - } -}); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-class/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-class/exec.js deleted file mode 100644 index d410cf0ccb..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-class/exec.js +++ /dev/null @@ -1,15 +0,0 @@ -class LetInClass { - get z() { - let let_z = 10; - return let_z; - } - - set z(v) { - let let_zv = v; - } - - distance() { - let dist = this.y - this.x; - return dist; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-inner/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-inner/exec.js deleted file mode 100644 index 802fed4059..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-inner/exec.js +++ /dev/null @@ -1,8 +0,0 @@ -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - break; - } - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-named/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-named/exec.js deleted file mode 100644 index 973ea8e35f..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break-named/exec.js +++ /dev/null @@ -1,9 +0,0 @@ -outer: -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - break outer; - } - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break/exec.js deleted file mode 100644 index 1fbe54486d..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-break/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -for (var x = 0; x < 10; x ++) { - let y = 'let y'; - if (x % 2 == 0) { - break; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-inner/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-inner/exec.js deleted file mode 100644 index 539d540e3a..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-inner/exec.js +++ /dev/null @@ -1,8 +0,0 @@ -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - continue; - } - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-named/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-named/exec.js deleted file mode 100644 index 85efb6541d..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue-named/exec.js +++ /dev/null @@ -1,9 +0,0 @@ -outer: -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - continue outer; - } - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue/exec.js deleted file mode 100644 index 4458457d71..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for-continue/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -for (var x = 0; x < 10; x ++) { - let y = 'let y'; - if (x % 2 == 0) { - continue; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/in-for/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/in-for/exec.js deleted file mode 100644 index de1630e09e..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/in-for/exec.js +++ /dev/null @@ -1,3 +0,0 @@ -for (var x = 0; x < 10; x ++) { - let y = 'let y'; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-1/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-1/exec.js deleted file mode 100644 index dd2909dea2..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-1/exec.js +++ /dev/null @@ -1,3 +0,0 @@ -for (let x = 1; x < 10; x++) { - x; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-2/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-2/exec.js deleted file mode 100644 index a2bd89dbac..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-2/exec.js +++ /dev/null @@ -1,4 +0,0 @@ -for (let x = 1, y = 2, z = 3; x < 10; x ++) { - y++; - z++; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-3/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-3/exec.js deleted file mode 100644 index 73f4794698..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-3/exec.js +++ /dev/null @@ -1,5 +0,0 @@ -for (let x = 1, y = x + 1; x < 10 && y != 0; x ++, y *= 2) { - if (y > 300) { - continue; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-in/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-in/exec.js deleted file mode 100644 index b80574713d..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/initializer-for-in/exec.js +++ /dev/null @@ -1,5 +0,0 @@ -let sum = 0; -let a = [1,2,3]; -for (let x in a) { - sum = sum + a[x]; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/nested-conflict/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/nested-conflict/exec.js deleted file mode 100644 index 4243019c5f..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/nested-conflict/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -(function () { - var x = 1; - function f() { - assert.equal(x, 1); - { - let x = 2; - assert.equal(x, 2); - } - assert.equal(x, 1); - } - f(); -})(); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-1/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-1/exec.js deleted file mode 100644 index 617db23c44..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-1/exec.js +++ /dev/null @@ -1,5 +0,0 @@ -function nestedFunction1() { - return function () { - let let_x = 'let x'; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-2/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-2/exec.js deleted file mode 100644 index f993f344c2..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-2/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -function nestedFunction2() { - let let_func = function () { - let let_x = 'let x'; - } - return let_func; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-3/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-3/exec.js deleted file mode 100644 index 3e45d93ff5..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/nested-function-3/exec.js +++ /dev/null @@ -1,4 +0,0 @@ -function nestedFunction3() { - let let_x = 'let x'; - function function_foo() { } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/nested/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/nested/exec.js deleted file mode 100644 index bf9b8f57d0..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/nested/exec.js +++ /dev/null @@ -1,7 +0,0 @@ -var x = 'var'; -{ - let y = 'let 1'; -} -{ - let y = 'let 2'; -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/actual.js b/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/actual.js deleted file mode 100644 index c26fd3ff99..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/actual.js +++ /dev/null @@ -1,6 +0,0 @@ -function foo (n) { - let bar = n; - eval('console.log(bar)'); -} - -foo(42); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/expected.js b/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/expected.js deleted file mode 100644 index 5499842172..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/no-renaming/expected.js +++ /dev/null @@ -1,8 +0,0 @@ -"use strict"; - -function foo(n) { - var bar = n; - eval("console.log(bar)"); -} - -foo(42); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/regress-1381/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/regress-1381/exec.js deleted file mode 100644 index 26c224809a..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/regress-1381/exec.js +++ /dev/null @@ -1,8 +0,0 @@ -function test() { - let ret = true; - while (false) - for (let i = 0; i < 1; i++) - ret = () => i; - return ret -} -assert.ok(test()); diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/with-for-in/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/with-for-in/exec.js deleted file mode 100644 index 7f6fbf1740..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/with-for-in/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -for (var x in [1,2,3]) { - let let_y = x; - for (var for_in_z in [4,5,6]) { - continue; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/with-for/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/with-for/exec.js deleted file mode 100644 index 07912563f8..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/with-for/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -for (var x = 0; x < 10; x++) { - let let_y = 'let y'; - for (var for_z = 0; for_z < 2; for_z ++) { - break; - } -} diff --git a/test/fixtures/transformation/es6-let-scoping-traceur/with-switch/exec.js b/test/fixtures/transformation/es6-let-scoping-traceur/with-switch/exec.js deleted file mode 100644 index 5100a8032e..0000000000 --- a/test/fixtures/transformation/es6-let-scoping-traceur/with-switch/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -for (var i = 0; i < 5; i ++) { - let let_x = 'let x'; - - switch (i) { - case 0: - break; - case 2: - break; - default: - break; - } -} diff --git a/test/traceur.js b/test/traceur.js new file mode 100644 index 0000000000..b836f00b99 --- /dev/null +++ b/test/traceur.js @@ -0,0 +1,5 @@ +require("./_transformation-helper")("traceur", { + blacklist: ["useStrict"], + emulateNodeModule: true, + experimental: true +}); diff --git a/test/transformation.js b/test/transformation.js index 8bed3f56c1..8fa8d298ad 100644 --- a/test/transformation.js +++ b/test/transformation.js @@ -1,100 +1 @@ -var genHelpers = require("./_generator-helpers"); -var transform = require("../lib/6to5/transformation/transform"); -var sourceMap = require("source-map"); -var helper = require("./_helper"); -var assert = require("assert"); -var chai = require("chai"); -var util = require("../lib/6to5/util"); -var _ = require("lodash"); - -require("../lib/6to5/polyfill"); - -var run = function (task, done) { - var actual = task.actual; - var expect = task.expect; - var exec = task.exec; - var opts = task.options; - - var getOpts = function (self) { - return _.merge({ - filename: self.loc - }, opts); - }; - - var execCode = exec.code; - var result; - - if (execCode) { - result = transform(execCode, getOpts(exec)); - execCode = result.code; - - try { - var fn = new Function("assert", "done", "genHelpers", execCode); - fn(assert, done, genHelpers); - } catch (err) { - err.message = exec.loc + ": " + err.message; - err.message += util.codeFrame(execCode); - throw err; - } - } - - var actualCode = actual.code; - var expectCode = expect.code; - if (!execCode || actualCode) { - result = transform(actualCode, getOpts(actual)); - actualCode = result.code; - - chai.expect(actualCode).to.be.equal(expectCode, actual.loc + " !== " + expect.loc); - } - - if (task.sourceMap) { - chai.expect(result.map).to.deep.equal(task.sourceMap); - } - - if (task.sourceMappings) { - var consumer = new sourceMap.SourceMapConsumer(result.map); - - _.each(task.sourceMappings, function (mapping, i) { - var expect = mapping.original; - - var actual = consumer.originalPositionFor(mapping.generated); - chai.expect({ line: actual.line, column: actual.column }).to.deep.equal(expect); - }); - } -}; - -_.each(helper.get("transformation"), function (testSuite) { - suite("transformation/" + testSuite.title, function () { - _.each(testSuite.tests, function (task) { - var runTest = function (done) { - var runTask = function () { - run(task, done); - }; - - var throwMsg = task.options.throws; - if (throwMsg) { - // internal api doesn't have this option but it's best not to pollute - // the options object with useless options - delete task.options.throws; - - assert.throws(runTask, function (err) { - return err.message.indexOf(throwMsg) >= 0; - }); - } else { - runTask(); - } - }; - - var callback; - if (task.options.asyncExec) { - callback = runTest; - } else { - callback = function () { - return runTest(); - }; - } - - test(task.title, !task.disabled && callback); - }); - }); -}); +require("./_transformation-helper")("transformation"); From cc6678361a1e0e1970e068891f5a2053347b25c1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 4 Jan 2015 20:20:03 +1100 Subject: [PATCH 02/39] comment out arity check --- test/fixtures/traceur/ArrayExtras/FindIndex.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/traceur/ArrayExtras/FindIndex.js b/test/fixtures/traceur/ArrayExtras/FindIndex.js index f572f7b1e9..642bc71fed 100644 --- a/test/fixtures/traceur/ArrayExtras/FindIndex.js +++ b/test/fixtures/traceur/ArrayExtras/FindIndex.js @@ -1,5 +1,5 @@ // should have a length of 1 -assert.equal(Array.prototype.findIndex.length, 1); +//assert.equal(Array.prototype.findIndex.length, 1); // should handle basic case assert.equal([1, 2, 3].findIndex(function(v) { From 103b619364c12db06d1dda26d028d92d0f4c53ef Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Sun, 4 Jan 2015 20:36:35 +1100 Subject: [PATCH 03/39] remove arity traceur test check --- test/fixtures/traceur/ArrayExtras/Find.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixtures/traceur/ArrayExtras/Find.js b/test/fixtures/traceur/ArrayExtras/Find.js index 123da41810..0bbefe1bbf 100644 --- a/test/fixtures/traceur/ArrayExtras/Find.js +++ b/test/fixtures/traceur/ArrayExtras/Find.js @@ -1,5 +1,5 @@ // should have a length of 1 -assert.equal(Array.prototype.find.length, 1); +//assert.equal(Array.prototype.find.length, 1); // should handle basic case assert.equal([1, 2, 3].find(function(v) { From 9bfb8c440aa357f761ff5d89978b5e1c1716941f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 00:06:57 +1100 Subject: [PATCH 04/39] add optional typeof symbol transformer --- lib/6to5/transformation/templates/typeof.js | 3 +++ lib/6to5/transformation/transform.js | 1 + .../transformation/transformers/optional-typeof-symbol.js | 7 +++++++ .../transformation/optional-typeof-symbol/basic/actual.js | 2 ++ .../transformation/optional-typeof-symbol/basic/exec.js | 2 ++ .../optional-typeof-symbol/basic/expected.js | 8 ++++++++ 6 files changed, 23 insertions(+) create mode 100644 lib/6to5/transformation/templates/typeof.js create mode 100644 lib/6to5/transformation/transformers/optional-typeof-symbol.js create mode 100644 test/fixtures/transformation/optional-typeof-symbol/basic/actual.js create mode 100644 test/fixtures/transformation/optional-typeof-symbol/basic/exec.js create mode 100644 test/fixtures/transformation/optional-typeof-symbol/basic/expected.js diff --git a/lib/6to5/transformation/templates/typeof.js b/lib/6to5/transformation/templates/typeof.js new file mode 100644 index 0000000000..8efdeefe3d --- /dev/null +++ b/lib/6to5/transformation/templates/typeof.js @@ -0,0 +1,3 @@ +(function (obj) { + return obj && obj.constructor === Symbol ? "symbol" : typeof obj; +}); diff --git a/lib/6to5/transformation/transform.js b/lib/6to5/transformation/transform.js index bf647e1f69..e1ad5833d1 100644 --- a/lib/6to5/transformation/transform.js +++ b/lib/6to5/transformation/transform.js @@ -89,6 +89,7 @@ _.each({ _moduleFormatter: require("./transformers/_module-formatter"), useStrict: require("./transformers/use-strict"), + typeofSymbol: require("./transformers/optional-typeof-symbol"), coreAliasing: require("./transformers/optional-core-aliasing"), undefinedToVoid: require("./transformers/optional-undefined-to-void"), diff --git a/lib/6to5/transformation/transformers/optional-typeof-symbol.js b/lib/6to5/transformation/transformers/optional-typeof-symbol.js new file mode 100644 index 0000000000..6847d6c0f4 --- /dev/null +++ b/lib/6to5/transformation/transformers/optional-typeof-symbol.js @@ -0,0 +1,7 @@ +var t = require("../../types"); + +exports.UnaryExpression = function (node, parent, file, scope) { + if (node.operator === "typeof") { + return t.callExpression(file.addHelper("typeof"), [node.argument]); + } +}; diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js b/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js new file mode 100644 index 0000000000..20422ebc64 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/actual.js @@ -0,0 +1,2 @@ +var s = Symbol("s"); +assert.equal(typeof s, "symbol"); diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js b/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js new file mode 100644 index 0000000000..20422ebc64 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/exec.js @@ -0,0 +1,2 @@ +var s = Symbol("s"); +assert.equal(typeof s, "symbol"); diff --git a/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js b/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js new file mode 100644 index 0000000000..c33ed64571 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/basic/expected.js @@ -0,0 +1,8 @@ +"use strict"; + +var _typeof = function (obj) { + return obj && obj.constructor === Symbol ? "symbol" : typeof obj; +}; + +var s = Symbol("s"); +assert.equal(_typeof(s), "symbol"); From b81f824b7e8f9471db7730f4302cf06ed9e6c163 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 00:07:22 +1100 Subject: [PATCH 05/39] normalise wildcard import into a default object --- lib/6to5/transformation/modules/_default.js | 9 +++++- lib/6to5/transformation/modules/common.js | 30 +++++++++++-------- .../templates/interop-require-wildcard.js | 3 ++ .../templates/require-assign.js | 1 - 4 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 lib/6to5/transformation/templates/interop-require-wildcard.js delete mode 100644 lib/6to5/transformation/templates/require-assign.js diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js index 95b7a97b85..8d175db9cd 100644 --- a/lib/6to5/transformation/modules/_default.js +++ b/lib/6to5/transformation/modules/_default.js @@ -141,10 +141,17 @@ DefaultFormatter.prototype._exportSpecifier = function (getRef, specifier, node, // export * from "foo"; nodes.push(this._exportsWildcard(getRef(), node)); } else { + var ref; + if (t.isSpecifierDefault(specifier.id)) { + ref = t.memberExpression(getRef(), specifier.id); + } else { + ref = t.callExpression(this.file.addHelper("interop-require"), [getRef()]); + } + // export { foo } from "test"; nodes.push(this._exportsAssign( t.getSpecifierName(specifier), - t.memberExpression(getRef(), specifier.id), + ref, node )); } diff --git a/lib/6to5/transformation/modules/common.js b/lib/6to5/transformation/modules/common.js index d527e49e73..c577052740 100644 --- a/lib/6to5/transformation/modules/common.js +++ b/lib/6to5/transformation/modules/common.js @@ -32,18 +32,24 @@ CommonJSFormatter.prototype.importSpecifier = function (specifier, node, nodes) ) ])); } else { - // import foo from "foo"; - - var templateName = "require-assign"; - - // import * as bar from "foo"; - if (specifier.type !== "ImportBatchSpecifier") templateName += "-key"; - - nodes.push(util.template(templateName, { - VARIABLE_NAME: variableName, - MODULE_NAME: node.source, - KEY: specifier.id - })); + if (specifier.type === "ImportBatchSpecifier") { + // import * as bar from "foo"; + nodes.push(t.variableDeclaration("var", [ + t.variableDeclarator( + variableName, + t.callExpression(this.file.addHelper("interop-require-wildcard"), [ + t.callExpression(t.identifier("require"), [node.source]) + ]) + ) + ])); + } else { + // import foo from "foo"; + nodes.push(util.template("require-assign-key", { + VARIABLE_NAME: variableName, + MODULE_NAME: node.source, + KEY: specifier.id + })); + } } }; diff --git a/lib/6to5/transformation/templates/interop-require-wildcard.js b/lib/6to5/transformation/templates/interop-require-wildcard.js new file mode 100644 index 0000000000..89287917c8 --- /dev/null +++ b/lib/6to5/transformation/templates/interop-require-wildcard.js @@ -0,0 +1,3 @@ +(function (obj) { + return obj && obj.constructor === Object ? obj : { default: obj }; +}) diff --git a/lib/6to5/transformation/templates/require-assign.js b/lib/6to5/transformation/templates/require-assign.js deleted file mode 100644 index 2b389fbfdf..0000000000 --- a/lib/6to5/transformation/templates/require-assign.js +++ /dev/null @@ -1 +0,0 @@ -var VARIABLE_NAME = require(MODULE_NAME); From 2b333de81fb1e132630203597cfa249938da191f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 00:07:50 +1100 Subject: [PATCH 06/39] add basic support for assignment patterns --- lib/6to5/generation/generators/expressions.js | 1 + lib/6to5/patch.js | 6 ++++++ lib/6to5/transformation/transformers/es6-destructuring.js | 4 ++++ lib/6to5/types/alias-keys.json | 5 +++-- lib/6to5/types/visitor-keys.json | 1 + 5 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/6to5/generation/generators/expressions.js b/lib/6to5/generation/generators/expressions.js index 17f5dbda68..7bd7a22bc5 100644 --- a/lib/6to5/generation/generators/expressions.js +++ b/lib/6to5/generation/generators/expressions.js @@ -86,6 +86,7 @@ exports.ExpressionStatement = function (node, print) { exports.BinaryExpression = exports.LogicalExpression = +exports.AssignmentPattern = exports.AssignmentExpression = function (node, print) { print(node.left); this.push(" " + node.operator + " "); diff --git a/lib/6to5/patch.js b/lib/6to5/patch.js index 836538b2f8..76e65bd38f 100644 --- a/lib/6to5/patch.js +++ b/lib/6to5/patch.js @@ -12,6 +12,12 @@ var types = require("ast-types"); var def = types.Type.def; var or = types.Type.or; +def("AssignmentPattern") + .bases("Pattern") + .build("left", "right") + .field("left", def("Pattern")) + .field("right", def("Expression")); + // Acorn - Same as ImportNamespaceSpecifier but `id` is `name` def("ImportBatchSpecifier") .bases("Specifier") diff --git a/lib/6to5/transformation/transformers/es6-destructuring.js b/lib/6to5/transformation/transformers/es6-destructuring.js index c8b7bffb36..90746a2029 100644 --- a/lib/6to5/transformation/transformers/es6-destructuring.js +++ b/lib/6to5/transformation/transformers/es6-destructuring.js @@ -20,6 +20,8 @@ var push = function (opts, nodes, elem, parentId) { pushObjectPattern(opts, nodes, elem, parentId); } else if (t.isArrayPattern(elem)) { pushArrayPattern(opts, nodes, elem, parentId); + } else if (t.isAssignmentPattern(elem)) { + return; } else { nodes.push(buildVariableAssign(opts, elem, parentId)); } @@ -48,6 +50,8 @@ var pushObjectPattern = function (opts, nodes, pattern, parentId) { var value = t.callExpression(opts.file.addHelper("object-without-properties"), [parentId, keys]); nodes.push(buildVariableAssign(opts, prop.argument, value)); } else { + if (t.isLiteral(prop.key)) prop.computed = true; + var pattern2 = prop.value; var patternId2 = t.memberExpression(parentId, prop.key, prop.computed); diff --git a/lib/6to5/types/alias-keys.json b/lib/6to5/types/alias-keys.json index 56ad154225..e07ecc429d 100644 --- a/lib/6to5/types/alias-keys.json +++ b/lib/6to5/types/alias-keys.json @@ -39,8 +39,9 @@ "ForInStatement": ["Statement", "For", "Scope", "Loop"], "ForStatement": ["Statement", "For", "Scope", "Loop"], - "ObjectPattern": ["Pattern"], - "ArrayPattern": ["Pattern"], + "ObjectPattern": ["Pattern"], + "ArrayPattern": ["Pattern"], + "AssignmentPattern": ["Pattern"], "Property": ["UserWhitespacable"], "XJSElement": ["UserWhitespacable", "Expression"], diff --git a/lib/6to5/types/visitor-keys.json b/lib/6to5/types/visitor-keys.json index 32292aa669..aac62dd391 100644 --- a/lib/6to5/types/visitor-keys.json +++ b/lib/6to5/types/visitor-keys.json @@ -3,6 +3,7 @@ "ArrayPattern": ["elements"], "ArrowFunctionExpression": ["params", "defaults", "rest", "body"], "AssignmentExpression": ["left", "right"], + "AssignmentPattern": ["left", "right"], "AwaitExpression": ["argument"], "BinaryExpression": ["left", "right"], "BindFunctionExpression": ["callee", "arguments"], From 6420954c5318863a6573679b0621263acd48e0f0 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 01:06:07 +1100 Subject: [PATCH 07/39] remove traceur tests --- .../ArgumentsInComprehension.js | 12 - .../traceur/ArrayComprehension/Closure.js | 11 - .../ArrayComprehension/Error_Disabled.js | 4 - .../ArrayComprehension/Error_NotDefined.js | 5 - .../traceur/ArrayComprehension/Simple.js | 32 --- .../ArrayComprehension/ThisInComprehension.js | 14 -- test/fixtures/traceur/ArrayExtras/Fill.js | 47 ---- test/fixtures/traceur/ArrayExtras/Find.js | 88 ------- .../fixtures/traceur/ArrayExtras/FindIndex.js | 47 ---- test/fixtures/traceur/ArrayExtras/From.js | 155 ------------ test/fixtures/traceur/ArrayExtras/Of.js | 37 --- test/fixtures/traceur/ArrayIterator.js | 27 -- .../traceur/ArrowFunctions/AlphaRename.js | 22 -- .../traceur/ArrowFunctions/Arguments.js | 6 - .../traceur/ArrowFunctions/ArrowFunctions.js | 52 ---- .../ArrowFunctions/CoverInitializer.js | 5 - .../ArrowFunctions/Error_CoverInitializer.js | 5 - .../ArrowFunctions/Error_CoverInitializer2.js | 3 - .../ArrowFunctions/Error_CoverInitializer3.js | 3 - .../traceur/ArrowFunctions/Error_Disabled.js | 4 - .../Error_FreeVariableChecker.js | 3 - .../Error_InvalidFormalParameters.js | 3 - .../ArrowFunctions/Error_Precedence.js | 3 - .../ArrowFunctions/Error_Precedence2.js | 4 - .../ArrowFunctions/Error_Precedence3.js | 4 - .../ArrowFunctions/Error_SpreadNotLast.js | 6 - .../Error_SpreadOutsideFormals.js | 3 - .../ArrowFunctions/FreeVariableChecker.js | 2 - .../traceur/ArrowFunctions/Skip_Frozen.js | 39 --- .../Skip_InitializerShorthand.js | 19 -- .../traceur/ArrowFunctions/Skip_SoftBind.js | 14 -- .../traceur/ArrowFunctions/ThisBindings.js | 18 -- .../traceur/AsyncFunctions/AlphaRenaming.js | 21 -- .../traceur/AsyncFunctions/AsyncArrow.js | 9 - .../AsyncFunctions/AsyncArrowArguments.js | 16 -- .../traceur/AsyncFunctions/AsyncArrowThis.js | 15 -- .../traceur/AsyncFunctions/AsyncMethod.js | 31 --- .../AsyncMethodObjectLiteral.js | 21 -- .../traceur/AsyncFunctions/AsyncSyntax.js | 18 -- .../fixtures/traceur/AsyncFunctions/Basics.js | 46 ---- .../traceur/AsyncFunctions/Complete.js | 16 -- test/fixtures/traceur/AsyncFunctions/Empty.js | 10 - .../AsyncFunctions/Error_AsyncArrow.js | 7 - .../AsyncFunctions/Error_AsyncArrow2.js | 6 - .../traceur/AsyncFunctions/Error_Disabled.js | 15 -- .../traceur/AsyncFunctions/Export.module.js | 18 -- .../traceur/AsyncFunctions/Finally.js | 25 -- .../traceur/AsyncFunctions/Finally2.js | 21 -- .../traceur/AsyncFunctions/PromiseCast.js | 12 - .../traceur/AsyncFunctions/Prototype.js | 7 - .../traceur/AsyncFunctions/Rethrow.js | 13 - .../fixtures/traceur/AsyncFunctions/Return.js | 16 -- test/fixtures/traceur/AsyncFunctions/Throw.js | 30 --- .../traceur/AsyncFunctions/Timeout.js | 21 -- test/fixtures/traceur/AsyncFunctions/Value.js | 24 -- test/fixtures/traceur/AsyncFunctions/Yield.js | 17 -- .../resources/async-function.js | 7 - .../traceur/Classes/ClassMethodInheritance.js | 23 -- .../traceur/Classes/ClassNameBinding.js | 41 --- .../traceur/Classes/ClassNameInStack.js | 29 --- test/fixtures/traceur/Classes/Constructor.js | 34 --- .../traceur/Classes/ConstructorChaining.js | 22 -- .../traceur/Classes/ConstructorMember.js | 25 -- .../traceur/Classes/DefaultConstructor.js | 31 --- .../traceur/Classes/DeriveFromObject.js | 6 - test/fixtures/traceur/Classes/EmptyClass.js | 29 --- .../traceur/Classes/Error_Disabled.js | 4 - test/fixtures/traceur/Classes/Error_GH1556.js | 5 - test/fixtures/traceur/Classes/Error_Super.js | 10 - .../Classes/Error_SuperAsTemplateTag.js | 10 - .../Classes/ExtendNonConstructableFunction.js | 11 - test/fixtures/traceur/Classes/ExtendObject.js | 4 - .../fixtures/traceur/Classes/ExtendStrange.js | 54 ---- .../traceur/Classes/FieldInheritance.js | 26 -- .../traceur/Classes/FieldInitializers.js | 23 -- test/fixtures/traceur/Classes/FieldLookup.js | 47 ---- test/fixtures/traceur/Classes/Fields.js | 19 -- test/fixtures/traceur/Classes/Getters.js | 20 -- test/fixtures/traceur/Classes/Inheritance.js | 9 - .../InheritanceFromMemberExpression.js | 31 --- .../Classes/InheritanceFromNonclass.js | 17 -- .../traceur/Classes/InheritanceNameBinding.js | 11 - test/fixtures/traceur/Classes/Method.js | 21 -- .../traceur/Classes/MethodInheritance.js | 32 --- test/fixtures/traceur/Classes/MethodLookup.js | 34 --- test/fixtures/traceur/Classes/NameBinding.js | 36 --- .../traceur/Classes/NestedClassSuper.js | 104 -------- .../traceur/Classes/NestedClassSuperAnimal.js | 45 ---- .../traceur/Classes/NestedFunctionSuper.js | 76 ------ .../traceur/Classes/NewClassExpression.js | 18 -- .../traceur/Classes/OptionalParams.js | 18 -- .../traceur/Classes/PropertyAccessors.js | 59 ----- .../traceur/Classes/PrototypeDescriptor.js | 7 - test/fixtures/traceur/Classes/RestParams.js | 15 -- test/fixtures/traceur/Classes/SemiColon.js | 3 - test/fixtures/traceur/Classes/SimpleSuper.js | 31 --- .../traceur/Classes/Skip_DerivedButton.js | 39 --- .../Classes/Skip_HTMLBlockquoteElement.js | 16 -- test/fixtures/traceur/Classes/Static.js | 70 ------ test/fixtures/traceur/Classes/StaticSuper.js | 35 --- .../traceur/Classes/StaticSuperNoExtends.js | 47 ---- test/fixtures/traceur/Classes/StaticSymbol.js | 8 - .../fixtures/traceur/Classes/SuperChaining.js | 28 --- .../traceur/Classes/SuperChangeProto.js | 20 -- test/fixtures/traceur/Classes/SuperMissing.js | 40 --- test/fixtures/traceur/Classes/SuperPostfix.js | 23 -- test/fixtures/traceur/Classes/SuperSet.js | 56 ----- test/fixtures/traceur/Classes/SuperUnary.js | 26 -- .../traceur/Classes/SuperWithoutExtends.js | 15 -- test/fixtures/traceur/Classes/Types.js | 26 -- test/fixtures/traceur/Collections/Map.js | 234 ------------------ test/fixtures/traceur/Collections/Set.js | 142 ----------- .../traceur/Collections/SetWithSymbols.js | 4 - .../traceur/ComputedPropertyNames/Class.js | 48 ---- .../ComputedPropertyNames.js | 35 --- .../ComputedPropertyNames/Error_Disabled.js | 6 - .../traceur/ComputedPropertyNames/Symbol.js | 9 - .../DefaultParameters/Error_SetAccessor.js | 6 - .../traceur/DefaultParameters/Simple.js | 45 ---- .../traceur/Destructuring/Arguments.js | 8 - test/fixtures/traceur/Destructuring/Array.js | 25 -- .../ArrayPatternWithCoverInitializedName.js | 5 - .../ArrayPatternWithInitializer.js | 5 - .../traceur/Destructuring/ArrowFunction.js | 17 -- test/fixtures/traceur/Destructuring/Catch.js | 30 --- test/fixtures/traceur/Destructuring/Class.js | 28 --- .../Destructuring/CoverInitializedName.js | 4 - .../traceur/Destructuring/CoverInitializer.js | 9 - .../Destructuring/CoverInitializerInForOf.js | 9 - .../traceur/Destructuring/DefaultParams.js | 5 - test/fixtures/traceur/Destructuring/Empty.js | 32 --- .../traceur/Destructuring/Error_Disabled.js | 4 - .../Error_ForInWithInitializer.js | 4 - .../Error_ForOfWithInitializer.js | 4 - .../Destructuring/Error_InvalidArrowRest.js | 3 - .../Error_InvalidCoverInitializedName.js | 3 - .../Destructuring/EvaluatesToRvalue.js | 9 - .../traceur/Destructuring/EvaluationOrder.js | 10 - .../traceur/Destructuring/ForInLoop.js | 28 --- .../traceur/Destructuring/ForOfLoop.js | 28 --- .../Destructuring/FunctionArrayPattern.js | 14 -- .../Destructuring/FunctionObjectPattern.js | 5 - .../traceur/Destructuring/Initializer.js | 74 ------ .../Destructuring/InitializerObject.js | 12 - test/fixtures/traceur/Destructuring/Method.js | 14 -- ...ultipleCoverInitializersInArrowFunction.js | 4 - .../Destructuring/NestedScopeArguments.js | 11 - test/fixtures/traceur/Destructuring/Object.js | 42 ---- test/fixtures/traceur/Destructuring/Rest.js | 19 -- .../traceur/Destructuring/RestIterator.js | 45 ---- .../traceur/Destructuring/ScopeThis.js | 19 -- .../traceur/Destructuring/SetAccessor.js | 14 -- .../traceur/Destructuring/Simplify.js | 168 ------------- .../Destructuring/StrangeProperties.js | 17 -- .../traceur/Destructuring/TopLevel.js | 9 - .../traceur/Destructuring/ValueTypes.js | 58 ----- .../fixtures/traceur/Destructuring/VarDecl.js | 27 -- .../fixtures/traceur/Exponentiation/Basics.js | 25 -- .../GeneratorComprehension/Error_Disabled.js | 4 - .../Error_NotDefined.js | 5 - .../traceur/GeneratorComprehension/Simple.js | 40 --- .../GeneratorComprehension/Skip_Closure.js | 23 -- test/fixtures/traceur/Math/acosh.module.js | 8 - test/fixtures/traceur/Math/asinh.module.js | 8 - test/fixtures/traceur/Math/atanh.module.js | 8 - test/fixtures/traceur/Math/cbrt.module.js | 8 - test/fixtures/traceur/Math/clz32.module.js | 9 - test/fixtures/traceur/Math/cosh.module.js | 11 - test/fixtures/traceur/Math/expm1.module.js | 9 - test/fixtures/traceur/Math/fround.module.js | 8 - test/fixtures/traceur/Math/hypot.module.js | 9 - test/fixtures/traceur/Math/imul.module.js | 8 - test/fixtures/traceur/Math/log10.module.js | 9 - test/fixtures/traceur/Math/log1p.module.js | 8 - test/fixtures/traceur/Math/log2.module.js | 9 - test/fixtures/traceur/Math/sign.module.js | 11 - test/fixtures/traceur/Math/sinh.module.js | 11 - test/fixtures/traceur/Math/tanh.module.js | 11 - test/fixtures/traceur/Math/trunc.module.js | 14 -- .../MemberVariables/Assertions.module.js | 25 -- .../MemberVariables/ClassExpression.module.js | 14 -- .../traceur/MemberVariables/Error_Disabled.js | 5 - .../MemberVariables/Inheritance.module.js | 24 -- .../MemberVariables/NestedClass.module.js | 17 -- .../Modules/EmptyNamedImport.module.js | 1 - .../Modules/Error_DuplicateImport.module.js | 10 - .../Modules/Error_ExportKeyword.module.js | 3 - .../Modules/Error_ExportKeyword2.module.js | 3 - .../Error_ExportStarConflict.module.js | 3 - .../Error_ExportStarDuplicateExport.module.js | 6 - .../Modules/Error_ImportDefault.module.js | 3 - .../Modules/Error_ImportStar.module.js | 4 - .../Modules/Error_InvalidExport.module.js | 3 - .../Modules/Error_InvalidExport2.module.js | 3 - .../Modules/Error_InvalidExport3.module.js | 3 - .../Error_InvalidModuleDeclaration.module.js | 7 - .../Error_InvalidModuleDeclaration2.module.js | 3 - .../Modules/Error_MissingExport.module.js | 7 - .../traceur/Modules/ExportStar.module.js | 6 - .../traceur/Modules/Exports.module.js | 17 -- .../Modules/ImportAsExportAs.module.js | 2 - .../traceur/Modules/ImportCircular.module.js | 6 - .../traceur/Modules/ImportDefault.module.js | 17 -- .../Modules/ImportEmptyImportClause.module.js | 4 - .../Modules/ImportFromModule.module.js | 17 -- .../Modules/ImportNoImportClause.module.js | 4 - .../Modules/ImportReExportDefault.module.js | 2 - .../Modules/ImportReExportDefaultAs.module.js | 2 - .../traceur/Modules/ModuleDefault.module.js | 3 - .../traceur/Modules/StaticMethod.module.js | 2 - .../traceur/Modules/ThisInModules.module.js | 4 - .../traceur/Modules/resources/TestClass.js | 5 - test/fixtures/traceur/Modules/resources/a.js | 1 - test/fixtures/traceur/Modules/resources/a2.js | 1 - test/fixtures/traceur/Modules/resources/b.js | 1 - test/fixtures/traceur/Modules/resources/c.js | 1 - .../traceur/Modules/resources/clockwise.js | 4 - test/fixtures/traceur/Modules/resources/d.js | 1 - .../resources/default-class-expression.js | 5 - .../Modules/resources/default-class.js | 7 - .../resources/default-function-expression.js | 3 - .../Modules/resources/default-function.js | 5 - .../traceur/Modules/resources/default-name.js | 2 - .../traceur/Modules/resources/default.js | 1 - .../Modules/resources/export-conflict.js | 2 - test/fixtures/traceur/Modules/resources/f.js | 1 - test/fixtures/traceur/Modules/resources/i.js | 4 - test/fixtures/traceur/Modules/resources/m.js | 2 - test/fixtures/traceur/Modules/resources/m2.js | 2 - test/fixtures/traceur/Modules/resources/m3.js | 2 - test/fixtures/traceur/Modules/resources/n.js | 2 - test/fixtures/traceur/Modules/resources/o.js | 2 - .../Modules/resources/re-export-default-as.js | 1 - .../Modules/resources/re-export-default.js | 1 - .../traceur/Modules/resources/side-effect.js | 1 - .../traceur/Modules/resources/side-effect2.js | 3 - test/fixtures/traceur/Modules/resources/x.js | 1 - .../fixtures/traceur/Number/EPSILON.module.js | 10 - .../traceur/Number/MAX_SAFE_INTEGER.module.js | 4 - .../traceur/Number/MIN_SAFE_INTEGER.module.js | 4 - .../traceur/Number/isFinite.module.js | 30 --- .../traceur/Number/isInteger.module.js | 30 --- test/fixtures/traceur/Number/isNaN.module.js | 30 --- .../traceur/Number/isSafeInteger.module.js | 33 --- .../traceur/NumericLiteral/Error_Disabled.js | 4 - .../NumericLiteral/Error_NoBinaryDigits.js | 4 - .../NumericLiteral/Error_NoOctalDigits.js | 4 - .../fixtures/traceur/NumericLiteral/Simple.js | 88 ------- test/fixtures/traceur/ObjectAssign.js | 11 - .../Error_Disabled.js | 5 - .../Error_Keyword.js | 3 - .../Error_MissingVar.js | 3 - .../traceur/ObjectInitializerShorthand/Ok.js | 8 - test/fixtures/traceur/ObjectIs.js | 34 --- test/fixtures/traceur/ObjectMixin.js | 11 - test/fixtures/traceur/Promise.js | 9 - test/fixtures/traceur/PromiseAll.js | 13 - test/fixtures/traceur/PromiseResolve.js | 3 - .../fixtures/traceur/PromiseThrowInResolve.js | 15 -- .../Error_Disabled.js | 8 - .../Error_NotNamed.js | 8 - .../PropertyMethodAssignment.js | 71 ------ test/fixtures/traceur/README | 23 -- .../traceur/RegularExpression/Simple.js | 9 - test/fixtures/traceur/Rest/Error_NotLast.js | 6 - .../traceur/Rest/Error_SetAccessor.js | 7 - test/fixtures/traceur/Rest/Simple.js | 16 -- test/fixtures/traceur/Scope/BlockBinding10.js | 15 -- test/fixtures/traceur/Scope/BlockBinding11.js | 18 -- test/fixtures/traceur/Scope/BlockBinding2.js | 15 -- test/fixtures/traceur/Scope/BlockBinding3.js | 17 -- test/fixtures/traceur/Scope/BlockBinding4.js | 14 -- test/fixtures/traceur/Scope/BlockBinding5.js | 18 -- test/fixtures/traceur/Scope/BlockBinding6.js | 14 -- test/fixtures/traceur/Scope/BlockBinding7.js | 15 -- test/fixtures/traceur/Scope/BlockBinding8.js | 15 -- test/fixtures/traceur/Scope/BlockBinding9.js | 15 -- .../Scope/BlockBindingSiblingRefenceError.js | 6 - .../Scope/DeconstructingBlockBinding.js | 12 - test/fixtures/traceur/Scope/DeepNestedLet.js | 12 - .../traceur/Scope/DeepNestedLetConst.js | 14 -- .../traceur/Scope/DeepNestedLetVar.js | 14 -- .../traceur/Scope/DeepNestedLetVarNoInit.js | 14 -- .../Scope/Error_ConstMissingInitializer.js | 4 - test/fixtures/traceur/Scope/Error_Disabled.js | 6 - .../Scope/Error_ForInWithInitializerConst.js | 5 - .../Scope/Error_ForInWithInitializerLet.js | 5 - .../Scope/Error_ForInWithInitializerVar.js | 10 - .../Scope/Error_ForOfWithInitializerConst.js | 9 - .../Scope/Error_ForOfWithInitializerLet.js | 9 - .../Scope/Error_ForOfWithInitializerVar.js | 9 - .../Scope/Error_ForWithoutInitializerConst.js | 7 - .../Scope/Error_FunctionExpressionInBlock.js | 10 - .../traceur/Scope/LetForInInitializers1.js | 22 -- .../traceur/Scope/LetForInitializers1.js | 14 -- test/fixtures/traceur/Scope/LetInClass.js | 19 -- test/fixtures/traceur/Scope/LetInClosure.js | 25 -- test/fixtures/traceur/Scope/LetInFor.js | 7 - test/fixtures/traceur/Scope/LetInForBreak.js | 10 - .../traceur/Scope/LetInForBreakInner.js | 12 - .../traceur/Scope/LetInForBreakNamed.js | 13 - .../traceur/Scope/LetInForContinue.js | 10 - .../traceur/Scope/LetInForContinueInner.js | 12 - .../traceur/Scope/LetInForContinueNamed.js | 13 - .../fixtures/traceur/Scope/LetInProperties.js | 19 -- .../traceur/Scope/LetInitializerFor1.js | 7 - .../traceur/Scope/LetInitializerFor2.js | 8 - .../traceur/Scope/LetInitializerFor3.js | 9 - .../traceur/Scope/LetInitializerForIn.js | 9 - .../traceur/Scope/LetNoInitializer.js | 10 - .../traceur/Scope/LetNoInitializerGlobal.js | 6 - .../traceur/Scope/LetReinitializeInLoop.js | 9 - test/fixtures/traceur/Scope/LetWithFor.js | 10 - test/fixtures/traceur/Scope/LetWithForIn.js | 10 - test/fixtures/traceur/Scope/LetWithSwitch.js | 16 -- test/fixtures/traceur/Scope/LetWithSwitch2.js | 16 -- .../traceur/Scope/NameBindingInFunction.js | 10 - .../fixtures/traceur/Scope/NestedFunction1.js | 9 - .../fixtures/traceur/Scope/NestedFunction2.js | 10 - .../fixtures/traceur/Scope/NestedFunction3.js | 8 - test/fixtures/traceur/Scope/NestedLet.js | 11 - .../traceur/Scope/NestedLetConflict.js | 12 - test/fixtures/traceur/Scope/Regress1381.js | 8 - test/fixtures/traceur/Scope/SiblingScopes.js | 15 -- test/fixtures/traceur/Scope/TopLevelLet.js | 7 - .../traceur/Scope/TopLevelLetConst.js | 9 - test/fixtures/traceur/Scope/TopLevelLetVar.js | 9 - test/fixtures/traceur/Spread/Array.js | 14 -- test/fixtures/traceur/Spread/Call.js | 14 -- .../traceur/Spread/CallWithUndefined.js | 8 - test/fixtures/traceur/Spread/Class.js | 17 -- .../fixtures/traceur/Spread/Error_Disabled.js | 4 - test/fixtures/traceur/Spread/Iterators.js | 17 -- test/fixtures/traceur/Spread/MethodCall.js | 18 -- .../traceur/Spread/MethodCallQuotedName.js | 18 -- test/fixtures/traceur/Spread/New.js | 26 -- test/fixtures/traceur/Spread/New2.js | 23 -- test/fixtures/traceur/Spread/NewBuiltin.js | 7 - test/fixtures/traceur/Spread/NoIterator.js | 1 - test/fixtures/traceur/Spread/NotAnObject.js | 1 - test/fixtures/traceur/Spread/String.js | 13 - test/fixtures/traceur/Spread/Type.js | 29 --- .../traceur/StringExtras/CodePointAt.js | 76 ------ .../fixtures/traceur/StringExtras/EndsWith.js | 217 ---------------- .../traceur/StringExtras/FromCodePoint.js | 25 -- .../fixtures/traceur/StringExtras/Includes.js | 114 --------- test/fixtures/traceur/StringExtras/Repeat.js | 33 --- .../traceur/StringExtras/StartsWith.js | 210 ---------------- test/fixtures/traceur/StringIterator.js | 15 -- test/fixtures/traceur/Symbol/Inherited.js | 28 --- test/fixtures/traceur/Symbol/Object.js | 31 --- test/fixtures/traceur/Symbol/ObjectModel.js | 13 - .../traceur/Symbol/TransformationOff.js | 10 - .../fixtures/traceur/Syntax/ArrayWithHoles.js | 10 - test/fixtures/traceur/Syntax/Empty.js | 0 .../traceur/Syntax/Error_Arguments.js | 6 - ...or_ForInLoopTooManyVariableDeclarations.js | 3 - ...or_ForOfLoopTooManyVariableDeclarations.js | 3 - .../traceur/Syntax/Error_FunctionParam.js | 5 - .../Syntax/Error_NoLineTerminatorPostfix.js | 7 - .../traceur/Syntax/Error_RegExpNotClosed.js | 3 - .../Error_UnicodeEscapeSequenceInName.js | 3 - .../traceur/Syntax/Error_WithInClass.js | 7 - .../Syntax/Error_WithInModule.module.js | 3 - .../traceur/Syntax/Error_YieldStarNewLine.js | 6 - .../traceur/Syntax/ExpressionValidation.js | 25 -- .../traceur/Syntax/ImplicitSemiColon.js | 6 - .../traceur/Syntax/ImportFromTypo.module.js | 3 - .../Syntax/NumberLiteralMemberExpression.js | 4 - .../traceur/Syntax/RegularExpression.js | 8 - test/fixtures/traceur/Syntax/StringEscapes.js | 13 - .../Syntax/UnicodeEscapeSequenceInName.js | 5 - test/fixtures/traceur/Syntax/null.js | 1 - .../TemplateLiterals/CallExpression.js | 18 -- .../TemplateLiterals/CommaExpression.js | 10 - .../traceur/TemplateLiterals/Default.js | 95 ------- .../TemplateLiterals/Error_Disabled.js | 4 - .../Error_InvalidSubstitution.js | 5 - .../Error_InvalidSubstitution2.js | 5 - .../TemplateLiterals/Error_NotClosed.js | 5 - .../traceur/TemplateLiterals/InBlock.js | 9 - .../TemplateLiterals/MemberExpression.js | 25 -- .../traceur/TemplateLiterals/StringRaw.js | 10 - test/fixtures/traceur/TemplateLiterals/Tag.js | 87 ------- .../traceur/TemplateLiterals/resources/f.js | 3 - .../traceur/TemplateLiterals/resources/m.js | 3 - .../traceur/TemplateLiterals/resources/n.js | 3 - .../Error_CodePointTooHigh.js | 4 - .../UnicodeEscapeSequence/Error_Disabled.js | 4 - .../Error_HexDigitExpected.js | 4 - .../Error_HexDigitExpected2.js | 4 - .../Error_HexDigitExpected3.js | 4 - .../Error_HexDigitExpected4.js | 4 - .../traceur/UnicodeEscapeSequence/Simple.js | 15 -- test/fixtures/traceur/Yield/Arguments.js | 8 - test/fixtures/traceur/Yield/BinaryOperator.js | 9 - test/fixtures/traceur/Yield/Break.js | 48 ---- test/fixtures/traceur/Yield/CommaOperator.js | 9 - test/fixtures/traceur/Yield/Continue.js | 18 -- .../traceur/Yield/DefaultArguments.js | 7 - test/fixtures/traceur/Yield/DoGenerator.js | 19 -- .../Yield/DoWhileStatementWithYield.js | 33 --- test/fixtures/traceur/Yield/EmptyGenerator.js | 5 - test/fixtures/traceur/Yield/Error_Disabled.js | 8 - .../fixtures/traceur/Yield/Error_Disabled2.js | 7 - .../traceur/Yield/Error_MissingStar.js | 5 - test/fixtures/traceur/Yield/Finally.js | 22 -- .../traceur/Yield/ForEmptyGenerator.js | 15 -- test/fixtures/traceur/Yield/ForGenerator.js | 25 -- test/fixtures/traceur/Yield/ForInGenerator.js | 27 -- .../fixtures/traceur/Yield/ForInGenerator2.js | 28 --- .../fixtures/traceur/Yield/ForInGenerator3.js | 27 -- .../Yield/ForLexicallyNestedGenerator.js | 15 -- .../fixtures/traceur/Yield/ForMissingParts.js | 95 ------- test/fixtures/traceur/Yield/ForOfGenerator.js | 49 ---- test/fixtures/traceur/Yield/ForStatement.js | 46 ---- .../traceur/Yield/FunctionDeclaration.js | 12 - .../fixtures/traceur/Yield/GeneratorReturn.js | 86 ------- .../Yield/GeneratorWithoutYieldOrReturn.js | 10 - test/fixtures/traceur/Yield/Hoisting.js | 13 - .../traceur/Yield/HoistingBlockbinding.js | 21 -- test/fixtures/traceur/Yield/IfGenerator.js | 26 -- .../traceur/Yield/IfStatementWithYield.js | 14 -- .../traceur/Yield/LabelledBlockGenerator.js | 20 -- .../traceur/Yield/LabelledBreakGenerator.js | 34 --- .../traceur/Yield/MapFilterGenerator.js | 31 --- test/fixtures/traceur/Yield/ObjectModel.js | 41 --- .../traceur/Yield/OverrideGenerator.js | 14 -- .../fixtures/traceur/Yield/ReturnInFinally.js | 33 --- test/fixtures/traceur/Yield/ReturnYield.js | 55 ---- test/fixtures/traceur/Yield/ReturnYieldFor.js | 15 -- .../traceur/Yield/SequenceGenerator.js | 23 -- .../fixtures/traceur/Yield/SimpleGenerator.js | 15 -- .../traceur/Yield/StatementTestGenerator.js | 37 --- .../fixtures/traceur/Yield/SwitchGenerator.js | 37 --- .../traceur/Yield/SwitchStatementWithYield.js | 23 -- test/fixtures/traceur/Yield/This.js | 8 - test/fixtures/traceur/Yield/Tree.js | 75 ------ test/fixtures/traceur/Yield/Try.js | 52 ---- test/fixtures/traceur/Yield/Try10.js | 90 ------- test/fixtures/traceur/Yield/Try11.js | 106 -------- test/fixtures/traceur/Yield/Try12.js | 111 --------- test/fixtures/traceur/Yield/Try2.js | 57 ----- test/fixtures/traceur/Yield/Try3.js | 56 ----- test/fixtures/traceur/Yield/Try4.js | 80 ------ test/fixtures/traceur/Yield/Try5.js | 95 ------- test/fixtures/traceur/Yield/Try6.js | 74 ------ test/fixtures/traceur/Yield/Try7.js | 78 ------ test/fixtures/traceur/Yield/Try8.js | 83 ------- test/fixtures/traceur/Yield/Try9.js | 90 ------- .../traceur/Yield/TryCatchGenerator.js | 153 ------------ .../traceur/Yield/TryCatchYieldGenerator.js | 21 -- .../traceur/Yield/TryFinallyGenerator.js | 39 --- test/fixtures/traceur/Yield/WhileGenerator.js | 25 -- .../traceur/Yield/WhileStatementWithYield.js | 33 --- .../traceur/Yield/YieldAssignThrow.js | 18 -- .../fixtures/traceur/Yield/YieldIdentifier.js | 29 --- test/fixtures/traceur/Yield/YieldInFinally.js | 41 --- .../traceur/Yield/YieldUndefinedGenerator.js | 24 -- test/fixtures/traceur/Yield/YieldYield.js | 19 -- .../Yield/tryFinallyFinallyGenerator.js | 29 --- 461 files changed, 9721 deletions(-) delete mode 100644 test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js delete mode 100644 test/fixtures/traceur/ArrayComprehension/Closure.js delete mode 100644 test/fixtures/traceur/ArrayComprehension/Error_Disabled.js delete mode 100644 test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js delete mode 100644 test/fixtures/traceur/ArrayComprehension/Simple.js delete mode 100644 test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js delete mode 100644 test/fixtures/traceur/ArrayExtras/Fill.js delete mode 100644 test/fixtures/traceur/ArrayExtras/Find.js delete mode 100644 test/fixtures/traceur/ArrayExtras/FindIndex.js delete mode 100644 test/fixtures/traceur/ArrayExtras/From.js delete mode 100644 test/fixtures/traceur/ArrayExtras/Of.js delete mode 100644 test/fixtures/traceur/ArrayIterator.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/AlphaRename.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Arguments.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/CoverInitializer.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Disabled.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js delete mode 100644 test/fixtures/traceur/ArrowFunctions/ThisBindings.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrow.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncMethod.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Basics.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Complete.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Empty.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Error_Disabled.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Export.module.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Finally.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Finally2.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/PromiseCast.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Prototype.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Rethrow.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Return.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Throw.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Timeout.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Value.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/Yield.js delete mode 100644 test/fixtures/traceur/AsyncFunctions/resources/async-function.js delete mode 100644 test/fixtures/traceur/Classes/ClassMethodInheritance.js delete mode 100644 test/fixtures/traceur/Classes/ClassNameBinding.js delete mode 100644 test/fixtures/traceur/Classes/ClassNameInStack.js delete mode 100644 test/fixtures/traceur/Classes/Constructor.js delete mode 100644 test/fixtures/traceur/Classes/ConstructorChaining.js delete mode 100644 test/fixtures/traceur/Classes/ConstructorMember.js delete mode 100644 test/fixtures/traceur/Classes/DefaultConstructor.js delete mode 100644 test/fixtures/traceur/Classes/DeriveFromObject.js delete mode 100644 test/fixtures/traceur/Classes/EmptyClass.js delete mode 100644 test/fixtures/traceur/Classes/Error_Disabled.js delete mode 100644 test/fixtures/traceur/Classes/Error_GH1556.js delete mode 100644 test/fixtures/traceur/Classes/Error_Super.js delete mode 100644 test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js delete mode 100644 test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js delete mode 100644 test/fixtures/traceur/Classes/ExtendObject.js delete mode 100644 test/fixtures/traceur/Classes/ExtendStrange.js delete mode 100644 test/fixtures/traceur/Classes/FieldInheritance.js delete mode 100644 test/fixtures/traceur/Classes/FieldInitializers.js delete mode 100644 test/fixtures/traceur/Classes/FieldLookup.js delete mode 100644 test/fixtures/traceur/Classes/Fields.js delete mode 100644 test/fixtures/traceur/Classes/Getters.js delete mode 100644 test/fixtures/traceur/Classes/Inheritance.js delete mode 100644 test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js delete mode 100644 test/fixtures/traceur/Classes/InheritanceFromNonclass.js delete mode 100644 test/fixtures/traceur/Classes/InheritanceNameBinding.js delete mode 100644 test/fixtures/traceur/Classes/Method.js delete mode 100644 test/fixtures/traceur/Classes/MethodInheritance.js delete mode 100644 test/fixtures/traceur/Classes/MethodLookup.js delete mode 100644 test/fixtures/traceur/Classes/NameBinding.js delete mode 100644 test/fixtures/traceur/Classes/NestedClassSuper.js delete mode 100644 test/fixtures/traceur/Classes/NestedClassSuperAnimal.js delete mode 100644 test/fixtures/traceur/Classes/NestedFunctionSuper.js delete mode 100644 test/fixtures/traceur/Classes/NewClassExpression.js delete mode 100644 test/fixtures/traceur/Classes/OptionalParams.js delete mode 100644 test/fixtures/traceur/Classes/PropertyAccessors.js delete mode 100644 test/fixtures/traceur/Classes/PrototypeDescriptor.js delete mode 100644 test/fixtures/traceur/Classes/RestParams.js delete mode 100644 test/fixtures/traceur/Classes/SemiColon.js delete mode 100644 test/fixtures/traceur/Classes/SimpleSuper.js delete mode 100644 test/fixtures/traceur/Classes/Skip_DerivedButton.js delete mode 100644 test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js delete mode 100644 test/fixtures/traceur/Classes/Static.js delete mode 100644 test/fixtures/traceur/Classes/StaticSuper.js delete mode 100644 test/fixtures/traceur/Classes/StaticSuperNoExtends.js delete mode 100644 test/fixtures/traceur/Classes/StaticSymbol.js delete mode 100644 test/fixtures/traceur/Classes/SuperChaining.js delete mode 100644 test/fixtures/traceur/Classes/SuperChangeProto.js delete mode 100644 test/fixtures/traceur/Classes/SuperMissing.js delete mode 100644 test/fixtures/traceur/Classes/SuperPostfix.js delete mode 100644 test/fixtures/traceur/Classes/SuperSet.js delete mode 100644 test/fixtures/traceur/Classes/SuperUnary.js delete mode 100644 test/fixtures/traceur/Classes/SuperWithoutExtends.js delete mode 100644 test/fixtures/traceur/Classes/Types.js delete mode 100644 test/fixtures/traceur/Collections/Map.js delete mode 100644 test/fixtures/traceur/Collections/Set.js delete mode 100644 test/fixtures/traceur/Collections/SetWithSymbols.js delete mode 100644 test/fixtures/traceur/ComputedPropertyNames/Class.js delete mode 100644 test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js delete mode 100644 test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js delete mode 100644 test/fixtures/traceur/ComputedPropertyNames/Symbol.js delete mode 100644 test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js delete mode 100644 test/fixtures/traceur/DefaultParameters/Simple.js delete mode 100644 test/fixtures/traceur/Destructuring/Arguments.js delete mode 100644 test/fixtures/traceur/Destructuring/Array.js delete mode 100644 test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js delete mode 100644 test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js delete mode 100644 test/fixtures/traceur/Destructuring/ArrowFunction.js delete mode 100644 test/fixtures/traceur/Destructuring/Catch.js delete mode 100644 test/fixtures/traceur/Destructuring/Class.js delete mode 100644 test/fixtures/traceur/Destructuring/CoverInitializedName.js delete mode 100644 test/fixtures/traceur/Destructuring/CoverInitializer.js delete mode 100644 test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js delete mode 100644 test/fixtures/traceur/Destructuring/DefaultParams.js delete mode 100644 test/fixtures/traceur/Destructuring/Empty.js delete mode 100644 test/fixtures/traceur/Destructuring/Error_Disabled.js delete mode 100644 test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js delete mode 100644 test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js delete mode 100644 test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js delete mode 100644 test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js delete mode 100644 test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js delete mode 100644 test/fixtures/traceur/Destructuring/EvaluationOrder.js delete mode 100644 test/fixtures/traceur/Destructuring/ForInLoop.js delete mode 100644 test/fixtures/traceur/Destructuring/ForOfLoop.js delete mode 100644 test/fixtures/traceur/Destructuring/FunctionArrayPattern.js delete mode 100644 test/fixtures/traceur/Destructuring/FunctionObjectPattern.js delete mode 100644 test/fixtures/traceur/Destructuring/Initializer.js delete mode 100644 test/fixtures/traceur/Destructuring/InitializerObject.js delete mode 100644 test/fixtures/traceur/Destructuring/Method.js delete mode 100644 test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js delete mode 100644 test/fixtures/traceur/Destructuring/NestedScopeArguments.js delete mode 100644 test/fixtures/traceur/Destructuring/Object.js delete mode 100644 test/fixtures/traceur/Destructuring/Rest.js delete mode 100644 test/fixtures/traceur/Destructuring/RestIterator.js delete mode 100644 test/fixtures/traceur/Destructuring/ScopeThis.js delete mode 100644 test/fixtures/traceur/Destructuring/SetAccessor.js delete mode 100644 test/fixtures/traceur/Destructuring/Simplify.js delete mode 100644 test/fixtures/traceur/Destructuring/StrangeProperties.js delete mode 100644 test/fixtures/traceur/Destructuring/TopLevel.js delete mode 100644 test/fixtures/traceur/Destructuring/ValueTypes.js delete mode 100644 test/fixtures/traceur/Destructuring/VarDecl.js delete mode 100644 test/fixtures/traceur/Exponentiation/Basics.js delete mode 100644 test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js delete mode 100644 test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js delete mode 100644 test/fixtures/traceur/GeneratorComprehension/Simple.js delete mode 100644 test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js delete mode 100644 test/fixtures/traceur/Math/acosh.module.js delete mode 100644 test/fixtures/traceur/Math/asinh.module.js delete mode 100644 test/fixtures/traceur/Math/atanh.module.js delete mode 100644 test/fixtures/traceur/Math/cbrt.module.js delete mode 100644 test/fixtures/traceur/Math/clz32.module.js delete mode 100644 test/fixtures/traceur/Math/cosh.module.js delete mode 100644 test/fixtures/traceur/Math/expm1.module.js delete mode 100644 test/fixtures/traceur/Math/fround.module.js delete mode 100644 test/fixtures/traceur/Math/hypot.module.js delete mode 100644 test/fixtures/traceur/Math/imul.module.js delete mode 100644 test/fixtures/traceur/Math/log10.module.js delete mode 100644 test/fixtures/traceur/Math/log1p.module.js delete mode 100644 test/fixtures/traceur/Math/log2.module.js delete mode 100644 test/fixtures/traceur/Math/sign.module.js delete mode 100644 test/fixtures/traceur/Math/sinh.module.js delete mode 100644 test/fixtures/traceur/Math/tanh.module.js delete mode 100644 test/fixtures/traceur/Math/trunc.module.js delete mode 100644 test/fixtures/traceur/MemberVariables/Assertions.module.js delete mode 100644 test/fixtures/traceur/MemberVariables/ClassExpression.module.js delete mode 100644 test/fixtures/traceur/MemberVariables/Error_Disabled.js delete mode 100644 test/fixtures/traceur/MemberVariables/Inheritance.module.js delete mode 100644 test/fixtures/traceur/MemberVariables/NestedClass.module.js delete mode 100644 test/fixtures/traceur/Modules/EmptyNamedImport.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_DuplicateImport.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ExportKeyword.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ImportDefault.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_ImportStar.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport2.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_InvalidExport3.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js delete mode 100644 test/fixtures/traceur/Modules/Error_MissingExport.module.js delete mode 100644 test/fixtures/traceur/Modules/ExportStar.module.js delete mode 100644 test/fixtures/traceur/Modules/Exports.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportAsExportAs.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportCircular.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportDefault.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportFromModule.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportNoImportClause.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportReExportDefault.module.js delete mode 100644 test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js delete mode 100644 test/fixtures/traceur/Modules/ModuleDefault.module.js delete mode 100644 test/fixtures/traceur/Modules/StaticMethod.module.js delete mode 100644 test/fixtures/traceur/Modules/ThisInModules.module.js delete mode 100644 test/fixtures/traceur/Modules/resources/TestClass.js delete mode 100644 test/fixtures/traceur/Modules/resources/a.js delete mode 100644 test/fixtures/traceur/Modules/resources/a2.js delete mode 100644 test/fixtures/traceur/Modules/resources/b.js delete mode 100644 test/fixtures/traceur/Modules/resources/c.js delete mode 100644 test/fixtures/traceur/Modules/resources/clockwise.js delete mode 100644 test/fixtures/traceur/Modules/resources/d.js delete mode 100644 test/fixtures/traceur/Modules/resources/default-class-expression.js delete mode 100644 test/fixtures/traceur/Modules/resources/default-class.js delete mode 100644 test/fixtures/traceur/Modules/resources/default-function-expression.js delete mode 100644 test/fixtures/traceur/Modules/resources/default-function.js delete mode 100644 test/fixtures/traceur/Modules/resources/default-name.js delete mode 100644 test/fixtures/traceur/Modules/resources/default.js delete mode 100644 test/fixtures/traceur/Modules/resources/export-conflict.js delete mode 100644 test/fixtures/traceur/Modules/resources/f.js delete mode 100644 test/fixtures/traceur/Modules/resources/i.js delete mode 100644 test/fixtures/traceur/Modules/resources/m.js delete mode 100644 test/fixtures/traceur/Modules/resources/m2.js delete mode 100644 test/fixtures/traceur/Modules/resources/m3.js delete mode 100644 test/fixtures/traceur/Modules/resources/n.js delete mode 100644 test/fixtures/traceur/Modules/resources/o.js delete mode 100644 test/fixtures/traceur/Modules/resources/re-export-default-as.js delete mode 100644 test/fixtures/traceur/Modules/resources/re-export-default.js delete mode 100644 test/fixtures/traceur/Modules/resources/side-effect.js delete mode 100644 test/fixtures/traceur/Modules/resources/side-effect2.js delete mode 100644 test/fixtures/traceur/Modules/resources/x.js delete mode 100644 test/fixtures/traceur/Number/EPSILON.module.js delete mode 100644 test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js delete mode 100644 test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js delete mode 100644 test/fixtures/traceur/Number/isFinite.module.js delete mode 100644 test/fixtures/traceur/Number/isInteger.module.js delete mode 100644 test/fixtures/traceur/Number/isNaN.module.js delete mode 100644 test/fixtures/traceur/Number/isSafeInteger.module.js delete mode 100644 test/fixtures/traceur/NumericLiteral/Error_Disabled.js delete mode 100644 test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js delete mode 100644 test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js delete mode 100644 test/fixtures/traceur/NumericLiteral/Simple.js delete mode 100644 test/fixtures/traceur/ObjectAssign.js delete mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js delete mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js delete mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js delete mode 100644 test/fixtures/traceur/ObjectInitializerShorthand/Ok.js delete mode 100644 test/fixtures/traceur/ObjectIs.js delete mode 100644 test/fixtures/traceur/ObjectMixin.js delete mode 100644 test/fixtures/traceur/Promise.js delete mode 100644 test/fixtures/traceur/PromiseAll.js delete mode 100644 test/fixtures/traceur/PromiseResolve.js delete mode 100644 test/fixtures/traceur/PromiseThrowInResolve.js delete mode 100644 test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js delete mode 100644 test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js delete mode 100644 test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js delete mode 100644 test/fixtures/traceur/README delete mode 100644 test/fixtures/traceur/RegularExpression/Simple.js delete mode 100644 test/fixtures/traceur/Rest/Error_NotLast.js delete mode 100644 test/fixtures/traceur/Rest/Error_SetAccessor.js delete mode 100644 test/fixtures/traceur/Rest/Simple.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding10.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding11.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding2.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding3.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding4.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding5.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding6.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding7.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding8.js delete mode 100644 test/fixtures/traceur/Scope/BlockBinding9.js delete mode 100644 test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js delete mode 100644 test/fixtures/traceur/Scope/DeconstructingBlockBinding.js delete mode 100644 test/fixtures/traceur/Scope/DeepNestedLet.js delete mode 100644 test/fixtures/traceur/Scope/DeepNestedLetConst.js delete mode 100644 test/fixtures/traceur/Scope/DeepNestedLetVar.js delete mode 100644 test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js delete mode 100644 test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js delete mode 100644 test/fixtures/traceur/Scope/Error_Disabled.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js delete mode 100644 test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js delete mode 100644 test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js delete mode 100644 test/fixtures/traceur/Scope/LetForInInitializers1.js delete mode 100644 test/fixtures/traceur/Scope/LetForInitializers1.js delete mode 100644 test/fixtures/traceur/Scope/LetInClass.js delete mode 100644 test/fixtures/traceur/Scope/LetInClosure.js delete mode 100644 test/fixtures/traceur/Scope/LetInFor.js delete mode 100644 test/fixtures/traceur/Scope/LetInForBreak.js delete mode 100644 test/fixtures/traceur/Scope/LetInForBreakInner.js delete mode 100644 test/fixtures/traceur/Scope/LetInForBreakNamed.js delete mode 100644 test/fixtures/traceur/Scope/LetInForContinue.js delete mode 100644 test/fixtures/traceur/Scope/LetInForContinueInner.js delete mode 100644 test/fixtures/traceur/Scope/LetInForContinueNamed.js delete mode 100644 test/fixtures/traceur/Scope/LetInProperties.js delete mode 100644 test/fixtures/traceur/Scope/LetInitializerFor1.js delete mode 100644 test/fixtures/traceur/Scope/LetInitializerFor2.js delete mode 100644 test/fixtures/traceur/Scope/LetInitializerFor3.js delete mode 100644 test/fixtures/traceur/Scope/LetInitializerForIn.js delete mode 100644 test/fixtures/traceur/Scope/LetNoInitializer.js delete mode 100644 test/fixtures/traceur/Scope/LetNoInitializerGlobal.js delete mode 100644 test/fixtures/traceur/Scope/LetReinitializeInLoop.js delete mode 100644 test/fixtures/traceur/Scope/LetWithFor.js delete mode 100644 test/fixtures/traceur/Scope/LetWithForIn.js delete mode 100644 test/fixtures/traceur/Scope/LetWithSwitch.js delete mode 100644 test/fixtures/traceur/Scope/LetWithSwitch2.js delete mode 100644 test/fixtures/traceur/Scope/NameBindingInFunction.js delete mode 100644 test/fixtures/traceur/Scope/NestedFunction1.js delete mode 100644 test/fixtures/traceur/Scope/NestedFunction2.js delete mode 100644 test/fixtures/traceur/Scope/NestedFunction3.js delete mode 100644 test/fixtures/traceur/Scope/NestedLet.js delete mode 100644 test/fixtures/traceur/Scope/NestedLetConflict.js delete mode 100644 test/fixtures/traceur/Scope/Regress1381.js delete mode 100644 test/fixtures/traceur/Scope/SiblingScopes.js delete mode 100644 test/fixtures/traceur/Scope/TopLevelLet.js delete mode 100644 test/fixtures/traceur/Scope/TopLevelLetConst.js delete mode 100644 test/fixtures/traceur/Scope/TopLevelLetVar.js delete mode 100644 test/fixtures/traceur/Spread/Array.js delete mode 100644 test/fixtures/traceur/Spread/Call.js delete mode 100644 test/fixtures/traceur/Spread/CallWithUndefined.js delete mode 100644 test/fixtures/traceur/Spread/Class.js delete mode 100644 test/fixtures/traceur/Spread/Error_Disabled.js delete mode 100644 test/fixtures/traceur/Spread/Iterators.js delete mode 100644 test/fixtures/traceur/Spread/MethodCall.js delete mode 100644 test/fixtures/traceur/Spread/MethodCallQuotedName.js delete mode 100644 test/fixtures/traceur/Spread/New.js delete mode 100644 test/fixtures/traceur/Spread/New2.js delete mode 100644 test/fixtures/traceur/Spread/NewBuiltin.js delete mode 100644 test/fixtures/traceur/Spread/NoIterator.js delete mode 100644 test/fixtures/traceur/Spread/NotAnObject.js delete mode 100644 test/fixtures/traceur/Spread/String.js delete mode 100644 test/fixtures/traceur/Spread/Type.js delete mode 100644 test/fixtures/traceur/StringExtras/CodePointAt.js delete mode 100644 test/fixtures/traceur/StringExtras/EndsWith.js delete mode 100644 test/fixtures/traceur/StringExtras/FromCodePoint.js delete mode 100644 test/fixtures/traceur/StringExtras/Includes.js delete mode 100644 test/fixtures/traceur/StringExtras/Repeat.js delete mode 100644 test/fixtures/traceur/StringExtras/StartsWith.js delete mode 100644 test/fixtures/traceur/StringIterator.js delete mode 100644 test/fixtures/traceur/Symbol/Inherited.js delete mode 100644 test/fixtures/traceur/Symbol/Object.js delete mode 100644 test/fixtures/traceur/Symbol/ObjectModel.js delete mode 100644 test/fixtures/traceur/Symbol/TransformationOff.js delete mode 100644 test/fixtures/traceur/Syntax/ArrayWithHoles.js delete mode 100644 test/fixtures/traceur/Syntax/Empty.js delete mode 100644 test/fixtures/traceur/Syntax/Error_Arguments.js delete mode 100644 test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js delete mode 100644 test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js delete mode 100644 test/fixtures/traceur/Syntax/Error_FunctionParam.js delete mode 100644 test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js delete mode 100644 test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js delete mode 100644 test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js delete mode 100644 test/fixtures/traceur/Syntax/Error_WithInClass.js delete mode 100644 test/fixtures/traceur/Syntax/Error_WithInModule.module.js delete mode 100644 test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js delete mode 100644 test/fixtures/traceur/Syntax/ExpressionValidation.js delete mode 100644 test/fixtures/traceur/Syntax/ImplicitSemiColon.js delete mode 100644 test/fixtures/traceur/Syntax/ImportFromTypo.module.js delete mode 100644 test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js delete mode 100644 test/fixtures/traceur/Syntax/RegularExpression.js delete mode 100644 test/fixtures/traceur/Syntax/StringEscapes.js delete mode 100644 test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js delete mode 100644 test/fixtures/traceur/Syntax/null.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/CallExpression.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/CommaExpression.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Default.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Error_Disabled.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/InBlock.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/MemberExpression.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/StringRaw.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/Tag.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/resources/f.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/resources/m.js delete mode 100644 test/fixtures/traceur/TemplateLiterals/resources/n.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js delete mode 100644 test/fixtures/traceur/UnicodeEscapeSequence/Simple.js delete mode 100644 test/fixtures/traceur/Yield/Arguments.js delete mode 100644 test/fixtures/traceur/Yield/BinaryOperator.js delete mode 100644 test/fixtures/traceur/Yield/Break.js delete mode 100644 test/fixtures/traceur/Yield/CommaOperator.js delete mode 100644 test/fixtures/traceur/Yield/Continue.js delete mode 100644 test/fixtures/traceur/Yield/DefaultArguments.js delete mode 100644 test/fixtures/traceur/Yield/DoGenerator.js delete mode 100644 test/fixtures/traceur/Yield/DoWhileStatementWithYield.js delete mode 100644 test/fixtures/traceur/Yield/EmptyGenerator.js delete mode 100644 test/fixtures/traceur/Yield/Error_Disabled.js delete mode 100644 test/fixtures/traceur/Yield/Error_Disabled2.js delete mode 100644 test/fixtures/traceur/Yield/Error_MissingStar.js delete mode 100644 test/fixtures/traceur/Yield/Finally.js delete mode 100644 test/fixtures/traceur/Yield/ForEmptyGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ForGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ForInGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ForInGenerator2.js delete mode 100644 test/fixtures/traceur/Yield/ForInGenerator3.js delete mode 100644 test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ForMissingParts.js delete mode 100644 test/fixtures/traceur/Yield/ForOfGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ForStatement.js delete mode 100644 test/fixtures/traceur/Yield/FunctionDeclaration.js delete mode 100644 test/fixtures/traceur/Yield/GeneratorReturn.js delete mode 100644 test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js delete mode 100644 test/fixtures/traceur/Yield/Hoisting.js delete mode 100644 test/fixtures/traceur/Yield/HoistingBlockbinding.js delete mode 100644 test/fixtures/traceur/Yield/IfGenerator.js delete mode 100644 test/fixtures/traceur/Yield/IfStatementWithYield.js delete mode 100644 test/fixtures/traceur/Yield/LabelledBlockGenerator.js delete mode 100644 test/fixtures/traceur/Yield/LabelledBreakGenerator.js delete mode 100644 test/fixtures/traceur/Yield/MapFilterGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ObjectModel.js delete mode 100644 test/fixtures/traceur/Yield/OverrideGenerator.js delete mode 100644 test/fixtures/traceur/Yield/ReturnInFinally.js delete mode 100644 test/fixtures/traceur/Yield/ReturnYield.js delete mode 100644 test/fixtures/traceur/Yield/ReturnYieldFor.js delete mode 100644 test/fixtures/traceur/Yield/SequenceGenerator.js delete mode 100644 test/fixtures/traceur/Yield/SimpleGenerator.js delete mode 100644 test/fixtures/traceur/Yield/StatementTestGenerator.js delete mode 100644 test/fixtures/traceur/Yield/SwitchGenerator.js delete mode 100644 test/fixtures/traceur/Yield/SwitchStatementWithYield.js delete mode 100644 test/fixtures/traceur/Yield/This.js delete mode 100644 test/fixtures/traceur/Yield/Tree.js delete mode 100644 test/fixtures/traceur/Yield/Try.js delete mode 100644 test/fixtures/traceur/Yield/Try10.js delete mode 100644 test/fixtures/traceur/Yield/Try11.js delete mode 100644 test/fixtures/traceur/Yield/Try12.js delete mode 100644 test/fixtures/traceur/Yield/Try2.js delete mode 100644 test/fixtures/traceur/Yield/Try3.js delete mode 100644 test/fixtures/traceur/Yield/Try4.js delete mode 100644 test/fixtures/traceur/Yield/Try5.js delete mode 100644 test/fixtures/traceur/Yield/Try6.js delete mode 100644 test/fixtures/traceur/Yield/Try7.js delete mode 100644 test/fixtures/traceur/Yield/Try8.js delete mode 100644 test/fixtures/traceur/Yield/Try9.js delete mode 100644 test/fixtures/traceur/Yield/TryCatchGenerator.js delete mode 100644 test/fixtures/traceur/Yield/TryCatchYieldGenerator.js delete mode 100644 test/fixtures/traceur/Yield/TryFinallyGenerator.js delete mode 100644 test/fixtures/traceur/Yield/WhileGenerator.js delete mode 100644 test/fixtures/traceur/Yield/WhileStatementWithYield.js delete mode 100644 test/fixtures/traceur/Yield/YieldAssignThrow.js delete mode 100644 test/fixtures/traceur/Yield/YieldIdentifier.js delete mode 100644 test/fixtures/traceur/Yield/YieldInFinally.js delete mode 100644 test/fixtures/traceur/Yield/YieldUndefinedGenerator.js delete mode 100644 test/fixtures/traceur/Yield/YieldYield.js delete mode 100644 test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js diff --git a/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js b/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js deleted file mode 100644 index 531f540a16..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/ArgumentsInComprehension.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --array-comprehension -// https://github.com/google/traceur-compiler/issues/1086 - -function f() { - var a = [for (x of [1]) arguments[0]]; - var b = [for (x of [1]) arguments[0]]; - assert.deepEqual(a, [arguments[0]]); - assert.deepEqual(a, [42]); - assert.deepEqual(a, b); -} - -f(42); diff --git a/test/fixtures/traceur/ArrayComprehension/Closure.js b/test/fixtures/traceur/ArrayComprehension/Closure.js deleted file mode 100644 index ed29b0b1fe..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/Closure.js +++ /dev/null @@ -1,11 +0,0 @@ -// Options: --array-comprehension --block-binding -// Block binding is needed to get the right scoping semantics inside the arrow -// function in the comprehension. - -var res = [for (x of [0, 1]) for (y of [2, 3]) () => [x, y]]; - -assert.equal(4, res.length); -assertArrayEquals([0, 2], res[0]()); -assertArrayEquals([0, 3], res[1]()); -assertArrayEquals([1, 2], res[2]()); -assertArrayEquals([1, 3], res[3]()); diff --git a/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js b/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js deleted file mode 100644 index 786567f5b6..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --array-comprehension=false -// Error: :4:14: Unexpected token for - -var array = [for (x of [0, 1, 2, 3, 4]) x]; diff --git a/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js b/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js deleted file mode 100644 index ab0f5f9872..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/Error_NotDefined.js +++ /dev/null @@ -1,5 +0,0 @@ -// Options: --array-comprehension --free-variable-checker -// Error: :5:1: notDefined is not defined - -var array = [for (notDefined of [0]) notDefined]; -notDefined; diff --git a/test/fixtures/traceur/ArrayComprehension/Simple.js b/test/fixtures/traceur/ArrayComprehension/Simple.js deleted file mode 100644 index 92fcdf0ab3..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/Simple.js +++ /dev/null @@ -1,32 +0,0 @@ -// Options: --array-comprehension - -function* range() { - for (var i = 0; i < 5; i++) { - yield i; - } -} - -var array = [for (x of [0, 1, 2, 3]) x]; -assertArrayEquals([0, 1, 2, 3], array); - -var array2 = [for (x of [0, 1, 2]) for (y of [0, 1, 2]) x + '' + y]; -assertArrayEquals(['00', '01', '02', '10', '11', '12', '20', '21', '22'], - array2); - -var array3 = [ - for (x of [0, 1, 2, 3, 4]) - for (y of range()) - if (x === y) - x + '' + y]; -assertArrayEquals(['00', '11', '22', '33', '44'], array3); - -// Ensure this works as expression statement -[for (testVar of []) testVar]; - -var array4 = [ - for (x of range()) - if (x % 2 === 0) - for (y of range()) - if (y % 2 === 1) - x + '' + y]; -assertArrayEquals(['01', '03', '21', '23', '41', '43'], array4); diff --git a/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js b/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js deleted file mode 100644 index d2ffba4c71..0000000000 --- a/test/fixtures/traceur/ArrayComprehension/ThisInComprehension.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --array-comprehension -// https://github.com/google/traceur-compiler/issues/1086 - -var object = {}; - -function f() { - var a = [for (x of [1]) this]; - var b = [for (x of [1]) this]; - assert.deepEqual(a, [this]); - assert.deepEqual(a, [object]); - assert.deepEqual(a, b); -} - -f.call(object); diff --git a/test/fixtures/traceur/ArrayExtras/Fill.js b/test/fixtures/traceur/ArrayExtras/Fill.js deleted file mode 100644 index e90f7262e3..0000000000 --- a/test/fixtures/traceur/ArrayExtras/Fill.js +++ /dev/null @@ -1,47 +0,0 @@ -// should have a length of 1 -assert.equal(Array.prototype.fill.length, 1); - -// should fill from basic case -assert.deepEqual([1, 2, 3].fill(5), [5, 5, 5]); - -// should fill from start -assert.deepEqual([1, 2, 3].fill(5, 1), [1, 5, 5]); - -// should fill from start to end -assert.deepEqual([1, 2, 3].fill(5, 1, 2), [1, 5, 3]); - -// should fill from negative start -assert.deepEqual([1, 2, 3].fill(5, -1), [1, 2, 5]); - -// should fill from negative start to positive end -assert.deepEqual([1, 2, 3].fill(5, -2, 3), [1, 5, 5]); - -// should fill from negative start to negative end -assert.deepEqual([1, 2, 3].fill(5, -3, -1), [5, 5, 3]); - -// should fill from positive start to negative end -assert.deepEqual([1, 2, 3].fill(5, 1, -1), [1, 5, 3]); - -// should fill custom object -assert.deepEqual(Array.prototype.fill.call({'0': 1, 'length': 3}, 5), {'0': 5, '1': 5, '2': 5, 'length': 3}); - -// should handle custom object with negative length -assert.deepEqual(Array.prototype.fill.call({'0': 2, 'length': -1}, 5), {'0': 2, 'length': -1}); - -// should handle no elements -assert.deepEqual([].fill(5), []); - -// should handle bad start -assert.deepEqual([1, 2, 3].fill(5, 'hello'), [5, 5, 5]); - -// should handle bad end -assert.deepEqual([1, 2, 3].fill(5, 1, {}), [1, 2, 3]); - -// should handle bad start and end -assert.deepEqual([1, 2, 3].fill(5, 'hello', {}), [1, 2, 3]); - - -// should handle bad this -assert.throws(function() { - Array.prototype.fill.call(null, 5) -}, TypeError); diff --git a/test/fixtures/traceur/ArrayExtras/Find.js b/test/fixtures/traceur/ArrayExtras/Find.js deleted file mode 100644 index 0bbefe1bbf..0000000000 --- a/test/fixtures/traceur/ArrayExtras/Find.js +++ /dev/null @@ -1,88 +0,0 @@ -// should have a length of 1 -//assert.equal(Array.prototype.find.length, 1); - -// should handle basic case -assert.equal([1, 2, 3].find(function(v) { - return v * v === 4; -}), 2); - -// should handle arrow functions -assert.equal([1, 2, 3].find(v => v * v === 4), 2); - -// should return undefined when not found -assert.equal([1, 2, 3].find(v => v > 10), undefined); - -// should return first match -assert.equal([2, 2, 3].find(v => v * v === 4), 2); - -// should handle custom objects -assert.equal(Array.prototype.find.call({ - 'length': 2, - '0': false, - '1': true -}, v => v), true); - -// should handle bad predicate -assert.throws(function() { - [1, 2, 3].find(1) -}, TypeError); - -// should handle bad this -assert.throws(function() { - Array.prototype.find.call(null, function() {}) -}, TypeError); - -// should correctly handle this -var global = this; -({ - assert: function() { - var self = this; - - // should be global this - [1, 2, 3].find(function() { - assert.notEqual(this, self); - assert.equal(this, global); - }); - - // should be the same this - [1, 2, 3].find(function() { - assert.equal(this, self); - }, self); - - // should not have an effect on arrow functions - [1, 2, 3].find(() => assert.equal(this, self)); - [1, 2, 3].find(() => assert.equal(this, self), self); - - // should call with correct args - var arr = [5]; - arr.find(function(value, i, object) { - assert.equal(value, 5); - assert.equal(i, 0); - assert.equal(arr, object); - }); - } -}).assert(); - -var lengthCalls = 0; -var itemCalls = 0; -var callbackCalls = 0; -var object = { - length: { - valueOf() { - lengthCalls++; - return 3; - } - }, - get 2() { - itemCalls++; - return 'a'; - } -}; - -assert.equal(Array.prototype.find.call(object, (v) => { - callbackCalls++; - return v === 'a'; -}), 'a'); -assert.equal(lengthCalls, 1); -assert.equal(itemCalls, 1); -assert.equal(callbackCalls, 3); diff --git a/test/fixtures/traceur/ArrayExtras/FindIndex.js b/test/fixtures/traceur/ArrayExtras/FindIndex.js deleted file mode 100644 index 642bc71fed..0000000000 --- a/test/fixtures/traceur/ArrayExtras/FindIndex.js +++ /dev/null @@ -1,47 +0,0 @@ -// should have a length of 1 -//assert.equal(Array.prototype.findIndex.length, 1); - -// should handle basic case -assert.equal([1, 2, 3].findIndex(function(v) { - return v * v === 4; -}), 1); - -// should handle arrow functions -assert.equal([1, 2, 3].findIndex(v => v * v === 4), 1); - -// should return -1 when not found -assert.equal([1, 2, 3].findIndex(v => v > 10), -1); - -// should return first match -assert.equal([2, 2, 3].findIndex(v => v * v === 4), 0); - -// should handle custom objects -assert.equal(Array.prototype.findIndex.call({ - 'length': 2, - '0': false, - '1': true -}, v => v), 1); - -var lengthCalls = 0; -var itemCalls = 0; -var callbackCalls = 0; -var object = { - length: { - valueOf() { - lengthCalls++; - return 3; - } - }, - get 2() { - itemCalls++; - return 'a'; - } -}; - -assert.equal(Array.prototype.findIndex.call(object, (v) => { - callbackCalls++; - return v === 'a'; -}), 2); -assert.equal(lengthCalls, 1); -assert.equal(itemCalls, 1); -assert.equal(callbackCalls, 3); diff --git a/test/fixtures/traceur/ArrayExtras/From.js b/test/fixtures/traceur/ArrayExtras/From.js deleted file mode 100644 index 553b20186c..0000000000 --- a/test/fixtures/traceur/ArrayExtras/From.js +++ /dev/null @@ -1,155 +0,0 @@ -// should have a length of 1 -//assert.equal(Array.from.length, 1); -var arr; -var obj; - -// should make an array from arguments -function arrayFromArgs() { - return Array.from(arguments); -} -arr = arrayFromArgs('a', 1); - -assert.equal(arr.length, 2); -assert.deepEqual(arr, ['a', 1]); -assert.isTrue(Array.isArray(arr)); - -// should handle undefined values -var arrayLike = {0: 'a', 2: 'c', length: 3}; -arr = Array.from(arrayLike); - -assert.equal(arr.length, 3); -assert.deepEqual(arr, ['a', undefined, 'c']); -assert.isTrue(Array.isArray(arr)); - -// should use a mapFn -arr = Array.from([{'a': 1}, {'a': 2}], function(item, i) { - return item.a + i; -}); - -assert.deepEqual(arr, [1, 3]); - -// should set this in mapFn -var thisObj = {a: 10}; -arr = Array.from([{'a': 1}, {'a': 2}], function(item, i) { - return this.a + item.a + i; -}, thisObj); - -assert.deepEqual(arr, [11, 13]); - -// should map on array-like object -arr = Array.from({0: {'a': 5}, length: 1}, function(item, i) { - return item.a + i; -}); - -assert.deepEqual(arr, [5]); - -// should throw on bad map fn -assert.throws(function() { - Array.from([], null) -}, TypeError); - -// should make from an array-like object -var arrayLikeObj = function(len) { - this.length = len; -}; -arrayLikeObj.from = Array.from; -obj = arrayLikeObj.from(['a', 'b', 'c']); - -assert.equal(obj.length, 3); -assert.deepEqual(obj, {0: 'a', 1: 'b', 2: 'c', length: 3}); - -// should make from a non-array iterable -var calledIterator = 0; -var Iterable = function(len) { - var self = this; - - self.length = len; - self[Symbol.iterator] = function*() { - for (var i = 0; i < self.length; i++) { - calledIterator++; - yield self[i]; - } - }; -}; -var it = new Iterable(3); -it[0] = 'a'; -it[1] = 'b'; -it[2] = 'c'; -obj = Array.from(it); - -assert.equal(obj.length, 3); -assert.equal(obj[0], 'a'); -assert.equal(obj[1], 'b'); -assert.equal(obj[2], 'c'); -assert.equal(calledIterator, 3); - -// should make from a sub-classed array -var length = 0; -var constructorCounter = 0; -var lengthSetCounter = 0; -var lengthGetCounter = 0; - -class MyArray extends Array { - constructor(v) { - constructorCounter++; - assert.isUndefined(v); - } - - set length(v) { - lengthSetCounter++; - length = v; - } - - get length() { - lengthGetCounter++; - return length; - } -} - -var ma = MyArray.from(['a', 'b']); -assert.instanceOf(ma, MyArray); -assert.equal(constructorCounter, 1); -assert.equal(lengthSetCounter, 1); -assert.equal(lengthGetCounter, 0); -assert.isTrue(ma.hasOwnProperty('0')); -assert.isTrue(ma.hasOwnProperty('1')); -assert.isFalse(ma.hasOwnProperty('length')); -assert.equal(ma[0], 'a'); -assert.equal(ma[1], 'b'); -assert.equal(ma.length, 2); - -// should make from a sub-classed array without iterable -length = 0; -constructorCounter = 0; -lengthSetCounter = 0; -lengthGetCounter = 0; - -class MyArray2 extends MyArray { - constructor(v) { - constructorCounter++; - assert.equal(v, 2); - } -}; -MyArray2.prototype[Symbol.iterator] = undefined; - -class MyArray3 extends Array { - constructor(v) { - this.length = v; - } -} -MyArray3.prototype[Symbol.iterator] = undefined; - -var ma3 = new MyArray3(2); -ma3[0] = 'a'; -ma3[1] = 'b'; -ma = MyArray2.from(ma3); -assert.instanceOf(ma, MyArray2); -assert.equal(constructorCounter, 1); -assert.equal(lengthSetCounter, 1); -assert.equal(lengthGetCounter, 0); -assert.isTrue(ma.hasOwnProperty('0')); -assert.isTrue(ma.hasOwnProperty('1')); -assert.isFalse(ma.hasOwnProperty('length')); -assert.equal(ma[0], 'a'); -assert.equal(ma[1], 'b'); -assert.equal(ma.length, 2); diff --git a/test/fixtures/traceur/ArrayExtras/Of.js b/test/fixtures/traceur/ArrayExtras/Of.js deleted file mode 100644 index 0616705b43..0000000000 --- a/test/fixtures/traceur/ArrayExtras/Of.js +++ /dev/null @@ -1,37 +0,0 @@ -var arr; - -// should have a length of 0 -assert.equal(Array.of.length, 0); - -//should return an array from arguments -arr = Array.of(1, 'a', 3); -assert.deepEqual(arr, [1, 'a', 3]); -assert.isTrue(arr instanceof Array); - -//should work with no arguments -arr = Array.of(); -assert.deepEqual(arr, []); -assert.isTrue(arr instanceof Array); - -//should work with sub-classed array -class MyArray extends Array {} - -arr = MyArray.of(4, 'b'); -assert.equal(arr[0], 4); -assert.equal(arr[1], 'b'); -assert.equal(arr.length, 2); -assert.isTrue(arr instanceof MyArray); - -//should call with exotic array -class ExoticArray { - constructor(len) { - this.length = len; - } -} -arr = Array.of.call(ExoticArray, 5, 'c', 6, 'd'); -assert.equal(arr[0], 5); -assert.equal(arr[1], 'c'); -assert.equal(arr[2], 6); -assert.equal(arr[3], 'd'); -assert.equal(arr.length, 4); -assert.isTrue(arr instanceof ExoticArray); diff --git a/test/fixtures/traceur/ArrayIterator.js b/test/fixtures/traceur/ArrayIterator.js deleted file mode 100644 index 489db71999..0000000000 --- a/test/fixtures/traceur/ArrayIterator.js +++ /dev/null @@ -1,27 +0,0 @@ -var a = ['a', 'b', 'c']; - -var res = []; -for (var x of a) { - res.push(x); -} -assert.deepEqual(res, ['a', 'b', 'c']); - -//assert.equal(a[Symbol.iterator], a.values); - -res = []; -for (var x of a.values()) { - res.push(x); -} -assert.deepEqual(res, ['a', 'b', 'c']); - -res = []; -for (var x of a.keys()) { - res.push(x); -} -assert.deepEqual(res, [0, 1, 2]); - -res = []; -for (var x of a.entries()) { - res.push(x); -} -assert.deepEqual(res, [[0, 'a'], [1, 'b'], [2, 'c']]); diff --git a/test/fixtures/traceur/ArrowFunctions/AlphaRename.js b/test/fixtures/traceur/ArrowFunctions/AlphaRename.js deleted file mode 100644 index 1c181f684e..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/AlphaRename.js +++ /dev/null @@ -1,22 +0,0 @@ -var global = this; -var self = {}; - -function outer() { - var f = () => { - assert.equal(this, self); - - var g = () => { - assert.equal(this, self); - }; - g(); - - var h = function() { - assert.equal(this, global); - }; - h(); - }; - - f(); -} - -outer.call(self); diff --git a/test/fixtures/traceur/ArrowFunctions/Arguments.js b/test/fixtures/traceur/ArrowFunctions/Arguments.js deleted file mode 100644 index ad94aa2b4f..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Arguments.js +++ /dev/null @@ -1,6 +0,0 @@ -function f() { - var args = (() => arguments)(); - assert.equal(args, arguments); -} - -f(); diff --git a/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js b/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js deleted file mode 100644 index 2aa3255ccd..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/ArrowFunctions.js +++ /dev/null @@ -1,52 +0,0 @@ -// Options: --block-binding - -// These tests are from: -// http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax - -let empty = () => undefined; -assert.equal(empty(), undefined); - -// Expression bodies needs no parentheses or braces -let identity = (x) => x; -assert.equal(identity(empty), empty); - -// Object literals needs to be wrapped in parens. -let keyMaker = (val) => ({key: val}); -assert.equal(keyMaker(empty).key, empty); - -// => { starts a block. -let emptyBlock = () => {a: 42}; -assert.equal(emptyBlock(), undefined); - -// Nullary arrow function starts with arrow (cannot begin statement) -const preamble = 'hello'; -const body = 'world'; -let nullary = () => preamble + ': ' + body; -assert.equal('hello: world', nullary()); - -// No need for parens even for lower-precedence expression body -let square = x => x * x; -assert.equal(81, square(9)); - -let oddArray = []; -let array = [2, 3, 4, 5, 6, 7]; -array.forEach((v, i) => { if (i & 1) oddArray[i >>> 1] = v; }); -assert.equal('3,5,7', oddArray.toString()); - -var f = (x = 42) => x; -assert.equal(42, f()); - -{ - let g = (...xs) => xs; - assertArrayEquals([0, 1, true], g(0, 1, true)); -} - -var h = (x, ...xs) => xs; -assertArrayEquals([0, 1, true], h(-1, 0, 1, true)); - -assert.equal(typeof (() => {}), 'function'); -assert.equal(Object.getPrototypeOf(() => {}), Function.prototype); - -var i = ({a = 1}) => a; -assert.equal(i({}), 1); -assert.equal(i({a: 2}), 2); diff --git a/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js b/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js deleted file mode 100644 index f461959aaa..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/CoverInitializer.js +++ /dev/null @@ -1,5 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/478 - -function f() { - (1 ? ({a=0}) => {} : 1); -} diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js deleted file mode 100644 index b342823845..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :4:16: Unexpected token = - -function f() { - ({a = (0, {a = 0})} = {}) -} diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js deleted file mode 100644 index 6252ef4fcc..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer2.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:5: Unexpected token = - -({a = 0}); diff --git a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js b/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js deleted file mode 100644 index a5d260c392..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_CoverInitializer3.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:18: Unexpected token = - -var f = ({x = {y = 1}) => 2; \ No newline at end of file diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js b/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js deleted file mode 100644 index a0c05a6f30..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --arrow-functions=false -// Error: :4:21: Unexpected token > - -var identity = (x) => x; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js b/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js deleted file mode 100644 index 4db02378a2..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_FreeVariableChecker.js +++ /dev/null @@ -1,3 +0,0 @@ -// Options: --arrow-functions --free-variable-checker -// Error: :3:35: missingIdentifier is not defined -var identity = (identityParam) => missingIdentifier; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js b/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js deleted file mode 100644 index b0b6078c15..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_InvalidFormalParameters.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:15: Unexpected token + - -var f = (a, b + 5) => a + b; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js deleted file mode 100644 index 932532c4b3..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_Precedence.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:26: Semi-colon expected - -var identity = (x) => {x}.bind({}); diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js deleted file mode 100644 index b064f6d29d..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_Precedence2.js +++ /dev/null @@ -1,4 +0,0 @@ -// Error: :4:11: Semi-colon expected -// Error: :4:11: Unexpected token => - -(x) + (y) => y; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js b/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js deleted file mode 100644 index c3e1bb2b8c..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_Precedence3.js +++ /dev/null @@ -1,4 +0,0 @@ -// Error: :4:9: Semi-colon expected -// Error: :4:9: Unexpected token => - -(x) + y => y; diff --git a/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js b/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js deleted file mode 100644 index 7276b3b180..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_SpreadNotLast.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: :5:17: Unexpected token , -// Error: :5:12: Unexpected token ... - -{ - let f = (...xs, x) => xs; -} \ No newline at end of file diff --git a/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js b/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js deleted file mode 100644 index 7884adf087..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Error_SpreadOutsideFormals.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:13: Unexpected token ... - -var f = (x, ...xs); diff --git a/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js b/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js deleted file mode 100644 index d3681bd6b9..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/FreeVariableChecker.js +++ /dev/null @@ -1,2 +0,0 @@ -var identity = (identityParam) => identityParam; -assert.equal(1234, identity(1234)); diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js b/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js deleted file mode 100644 index de7f381055..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Skip_Frozen.js +++ /dev/null @@ -1,39 +0,0 @@ -// Skip. Not implemented. - -// TODO: needs # prefix implemented for freezing -// Use # to freeze and join to nearest relevant closure -function return_pure() { - return #(a) -> a * a; -} - -let p = return_pure(), - q = return_pure(); -assert(p === q); - -function check_frozen(o) { - try { - o.x = "expando"; - assert(! "reached"); - } catch (e) { - // e is something like "TypeError: o is not extensible" - assert(e.name == "TypeError"); - } -} - -check_frozen(p); - -function partial_mul(a) { - return #(b) -> a * b; -} - -let x = partial_mul(3), - y = partial_mul(4), - z = partial_mul(3); - -assert(x !== y); -assert(x !== z); -assert(y !== z); - -check_frozen(x); -check_frozen(y); -check_frozen(z); diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js b/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js deleted file mode 100644 index 27548d0d58..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Skip_InitializerShorthand.js +++ /dev/null @@ -1,19 +0,0 @@ -// Skip. Not implemented. - -// TODO: needs the intializer shorthand implemented for arrow functions - -// Object intializer shorthand: "method" = function-valued property with dynamic ''this'' -const obj = { - method() -> { - return => this; - } -}; - -assert(obj.method() === obj); -assert(obj.method.call(u) === u); - -// Name binding forms hoist to body (var) or block (let, const) top -var warmer(a) -> { return a; }; -let warm(b) -> { return b; }; -const colder(c) -> { return c; }; -const #coldest(d) -> {...}; diff --git a/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js b/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js deleted file mode 100644 index 0ef4fd6835..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/Skip_SoftBind.js +++ /dev/null @@ -1,14 +0,0 @@ -// Skip. Not implemented. - -// TODO: needs soft bind and ??= implemented - -// A special form based on the default operator proposal -const self_default_bound = (this ??= self, a, b) -> { - this.c = a * b; -} -self_default_bound(6, 7); -assert(self.c === 42); - -self_default_bound.call(other, 8, 9); -assert(other.c === 72); -assert(self.c === 42); diff --git a/test/fixtures/traceur/ArrowFunctions/ThisBindings.js b/test/fixtures/traceur/ArrowFunctions/ThisBindings.js deleted file mode 100644 index c3aee86629..0000000000 --- a/test/fixtures/traceur/ArrowFunctions/ThisBindings.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --block-binding - -// These tests are from: -// http://wiki.ecmascript.org/doku.php?id=strawman:arrow_function_syntax - -const obj = { - method: function () { - return () => this; - } -}; -assert.equal(obj.method()(), obj); - -let fake = {steal: obj.method()}; -assert.equal(fake.steal(), obj); - -let real = {borrow: obj.method}; -assert.equal(real.borrow()(), real); - diff --git a/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js b/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js deleted file mode 100644 index 6525b1cc98..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AlphaRenaming.js +++ /dev/null @@ -1,21 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncComplete(self, arg) { - return new Promise((resolve) => { - resolve([self, arg]); - }); -} - -var self = {}; -var obj = {}; -var value; - -async function A() { - assert.equal(this, self); - var value = await asyncComplete(this, arguments[0]); - assert.deepEqual([self, obj], value); - done(); -} - -A.call(self, obj); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js deleted file mode 100644 index c02247d217..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncArrow.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --async-functions -// Async. - -var f = async () => 1; - -f().then((result) => { - assert.equal(result, 1); - done(); -}).catch(done); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js deleted file mode 100644 index 42e3f472b4..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncArrowArguments.js +++ /dev/null @@ -1,16 +0,0 @@ -// Options: --async-functions -// Async. - -function g() { - var f = async (x = arguments) => [x, arguments]; - - f().then((result) => { - assert.equal(result[0][0], 1); - assert.equal(result[1][0], 1); - assert.equal(result[0][1], 2); - assert.equal(result[1][1], 2); - done(); - }).catch(done); -} - -g(1, 2); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js b/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js deleted file mode 100644 index d4d0f64028..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncArrowThis.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --async-functions -// Async. - -function g() { - var f = async (x = this) => [x, this]; - var p = {}; - f.call(p).then((result) => { - assert.equal(result[0], o); - assert.equal(result[1], o); - done(); - }).catch(done); -} - -var o = {}; -g.call(o); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js b/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js deleted file mode 100644 index 4c9444da90..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncMethod.js +++ /dev/null @@ -1,31 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -class C { - async test() { - var x = 0; - await asyncTimeout(1); - assert.equal(1, ++x); - await asyncTimeout(1); - assert.equal(2, ++x); - C.test(); - } - - static async test() { - var x = 0; - await asyncTimeout(1); - assert.equal(1, ++x); - await asyncTimeout(1); - assert.equal(2, ++x); - - done(); - } -} - -new C().test(); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js b/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js deleted file mode 100644 index 7020a6978d..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncMethodObjectLiteral.js +++ /dev/null @@ -1,21 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -var object = { - async test() { - var x = 0; - await asyncTimeout(1); - assert.equal(1, ++x); - await asyncTimeout(1); - assert.equal(2, ++x); - done(); - } -} - -object.test(); diff --git a/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js b/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js deleted file mode 100644 index 75be014bc0..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/AsyncSyntax.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --async-functions - -var async; -async -function f() { - return async + async; -} - -async = 1; -assert.equal(async, 1); -assert.equal(f(), 2); - -async = async -function g() { - -} - -assert.equal(async, 1); diff --git a/test/fixtures/traceur/AsyncFunctions/Basics.js b/test/fixtures/traceur/AsyncFunctions/Basics.js deleted file mode 100644 index 9592812858..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Basics.js +++ /dev/null @@ -1,46 +0,0 @@ -// Options: --async-functions --generators=false -// Async. -// -// The --generators=false part is to test #1231 - -var f = (x, y) => ({x, y}); - -(async function() { - var x = await 1; - assert.equal(1, x); - x = await (await 2); - assert.equal(2, x); - x = (await 3, await 4); - assert.equal(4, x); - - x = f(await 5, await 6); - assert.deepEqual({x: 5, y: 6}, x); - x = await f(await 7, await 8); - assert.deepEqual({x: 7, y: 8}, x); - - if (await true) { - x = 9; - } else { - x = 10; - } - assert.equal(9, x); - if (await false) { - x = 11; - } else { - x = 12; - } - assert.equal(12, x); - - var j = 0; - for (var i = await 0; (await i) < (await 3); await i++) { - assert.equal(i, j++); - } - assert.equal(3, j); - - var g = (x) => x; - var h = () => 13; - x = await g({z: await h()}); - assert.deepEqual({z: 13}, x); - - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Complete.js b/test/fixtures/traceur/AsyncFunctions/Complete.js deleted file mode 100644 index 948e11142a..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Complete.js +++ /dev/null @@ -1,16 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncComplete() { - return new Promise((resolve) => { - resolve('complete'); - }); -} - -// ---------------------------------------------------------------------------- - -(async function() { - var value = await asyncComplete(); - assert.equal('complete', value); - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Empty.js b/test/fixtures/traceur/AsyncFunctions/Empty.js deleted file mode 100644 index 4cd44b74c9..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Empty.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --async-functions -// Async. - -async function empty() { -} - -empty().then((v) => { - assert.isUndefined(v); - done(); -}); \ No newline at end of file diff --git a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js deleted file mode 100644 index 3973c62fc5..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --async-functions -// Error: :7:5: Semi-colon expected -// Error: :7:5: Unexpected token => - -var async = () => 1; -var x = async -(y) => y; diff --git a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js b/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js deleted file mode 100644 index b48847aa1d..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Error_AsyncArrow2.js +++ /dev/null @@ -1,6 +0,0 @@ -// Options: --async-functions -// Error: :6:1: Unexpected token => - -var async = () => 1; -var x = async (y) -=> y; diff --git a/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js b/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js deleted file mode 100644 index ccfde7dd72..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Error_Disabled.js +++ /dev/null @@ -1,15 +0,0 @@ -// Disabled by default. -// Error: :13:21: Semi-colon expected - -function asyncComplete() { - return new Promise((resolve) => { - resolve('complete'); - }); -} - -// ---------------------------------------------------------------------------- - -(async function() { - var value = async asyncComplete(); - assert.equal('complete', value); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Export.module.js b/test/fixtures/traceur/AsyncFunctions/Export.module.js deleted file mode 100644 index cd23d5a62b..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Export.module.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --async-functions -// Async. - -import {asyncFunction} from './resources/async-function.js'; -import asyncFunctionDefault from './resources/async-function.js'; - -assert.instanceOf(asyncFunction(), Promise); -assert.instanceOf(asyncFunctionDefault(), Promise); - -(async function() { - var x = await asyncFunction(); - assert.equal(x, 1); - - var y = await asyncFunctionDefault(); - assert.equal(y, 2); - - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Finally.js b/test/fixtures/traceur/AsyncFunctions/Finally.js deleted file mode 100644 index 4e9f603625..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Finally.js +++ /dev/null @@ -1,25 +0,0 @@ -// Options: --async-functions -// Async. - -var finallyVisited = false; - -var resolve; -var p = new Promise((r) => { - resolve = r; -}); -var v; - -async function test() { - try { - v = await p; - } finally { - finallyVisited = true; - } - assert.equal(42, v); - assert.isTrue(finallyVisited); - done(); -} - -test(); -assert.isFalse(finallyVisited); -resolve(42); diff --git a/test/fixtures/traceur/AsyncFunctions/Finally2.js b/test/fixtures/traceur/AsyncFunctions/Finally2.js deleted file mode 100644 index 63cf8e1240..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Finally2.js +++ /dev/null @@ -1,21 +0,0 @@ -// Options: --async-functions -// Async. - -var finallyVisited = false; -var resolve; - -async function test() { - try { - await new Promise((r) => { - resolve = r; - }); - } finally { - finallyVisited = true; - } - assert.isTrue(finallyVisited); - done(); -} - -test(); -assert.isFalse(finallyVisited); -resolve(); diff --git a/test/fixtures/traceur/AsyncFunctions/PromiseCast.js b/test/fixtures/traceur/AsyncFunctions/PromiseCast.js deleted file mode 100644 index aabac1d0bb..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/PromiseCast.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --async-functions -// Async. - -async function f() { - var x = await 1; - assert.equal(x, 1); - x = await undefined; - assert.equal(x, undefined); - done(); -} - -f(); diff --git a/test/fixtures/traceur/AsyncFunctions/Prototype.js b/test/fixtures/traceur/AsyncFunctions/Prototype.js deleted file mode 100644 index cbdc07aeaa..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Prototype.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --async-functions - -async function f() { -} - -assert.equal(Object.getPrototypeOf(f), Function.prototype); -assert.instanceOf(f(), Promise); diff --git a/test/fixtures/traceur/AsyncFunctions/Rethrow.js b/test/fixtures/traceur/AsyncFunctions/Rethrow.js deleted file mode 100644 index 253b9ddfdf..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Rethrow.js +++ /dev/null @@ -1,13 +0,0 @@ -// Options: --async-functions -// Async. - -async function rethrow(x) { - 1; - throw x; - 2; -} - -rethrow(2).catch((err) => { - assert.equal(err, 2) - done(); -}); diff --git a/test/fixtures/traceur/AsyncFunctions/Return.js b/test/fixtures/traceur/AsyncFunctions/Return.js deleted file mode 100644 index fa98200106..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Return.js +++ /dev/null @@ -1,16 +0,0 @@ -// Options: --async-functions -// Async. - -async function ret(x) { - if (x > 1) - return x - 2; - return x + 3; -} - -(async function() { - var v = await ret(4); - assert.equal(v, 2); - v = await ret(0); - assert.equal(v, 3); - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Throw.js b/test/fixtures/traceur/AsyncFunctions/Throw.js deleted file mode 100644 index 452312fae9..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Throw.js +++ /dev/null @@ -1,30 +0,0 @@ -// Options: --async-functions -// Async. - -async function asyncThrow(e) { - if (true) - throw e; - await asyncYield(); -} - -function asyncYield() { - return asyncTimeout(0); -} - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -(async function() { - var value; - try { - value = await asyncThrow(1); - fail("shouldn't get here"); - } catch (e) { - assert.equal(1, e); - } - - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Timeout.js b/test/fixtures/traceur/AsyncFunctions/Timeout.js deleted file mode 100644 index a0803b1716..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Timeout.js +++ /dev/null @@ -1,21 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -(async function() { - var x = 0; - await asyncTimeout(1); - assert.equal(1, ++x); - await asyncTimeout(1); - assert.equal(2, ++x); - await asyncTimeout(1); - assert.equal(3, ++x); - await asyncTimeout(1); - assert.equal(4, ++x); - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Value.js b/test/fixtures/traceur/AsyncFunctions/Value.js deleted file mode 100644 index 1a1aaf5f8c..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Value.js +++ /dev/null @@ -1,24 +0,0 @@ -// Options: --async-functions -// Async. - -async function asyncValue(value) { - if (true) - return value; - await asyncYield(); -} - -function asyncYield() { - return asyncTimeout(0); -} - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -(async function() { - var value = await asyncValue(42); - assert.equal(42, value); - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/Yield.js b/test/fixtures/traceur/AsyncFunctions/Yield.js deleted file mode 100644 index dfb4bba86a..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/Yield.js +++ /dev/null @@ -1,17 +0,0 @@ -// Options: --async-functions -// Async. - -function asyncYield() { - return asyncTimeout(0); -} - -function asyncTimeout(ms) { - return new Promise((resolve) => { - setTimeout(resolve, ms); - }); -} - -(async function() { - await asyncYield(); - done(); -})(); diff --git a/test/fixtures/traceur/AsyncFunctions/resources/async-function.js b/test/fixtures/traceur/AsyncFunctions/resources/async-function.js deleted file mode 100644 index 3431ca98d4..0000000000 --- a/test/fixtures/traceur/AsyncFunctions/resources/async-function.js +++ /dev/null @@ -1,7 +0,0 @@ -export async function asyncFunction() { - return 1; -} - -export default async function() { - return 2; -}; diff --git a/test/fixtures/traceur/Classes/ClassMethodInheritance.js b/test/fixtures/traceur/Classes/ClassMethodInheritance.js deleted file mode 100644 index c957d1188e..0000000000 --- a/test/fixtures/traceur/Classes/ClassMethodInheritance.js +++ /dev/null @@ -1,23 +0,0 @@ -function B() {} -B.b = function() { - return 'B.b'; -}; - -class C extends B {} - -assert.equal(Object.getPrototypeOf(C), B); -assert.equal(Object.getPrototypeOf(C.prototype), B.prototype); - -assert.equal(C.b(), 'B.b'); - -class D extends Object {} - -assert.equal(Object.getPrototypeOf(D), Object); -assert.equal(Object.getPrototypeOf(D.prototype), Object.prototype); -assert.equal(D.keys, Object.keys); - -class E {} - -assert.equal(Object.getPrototypeOf(E), Function.prototype); -assert.equal(Object.getPrototypeOf(E.prototype), Object.prototype); -assert.isFalse('keys' in E); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/ClassNameBinding.js b/test/fixtures/traceur/Classes/ClassNameBinding.js deleted file mode 100644 index de7df429f9..0000000000 --- a/test/fixtures/traceur/Classes/ClassNameBinding.js +++ /dev/null @@ -1,41 +0,0 @@ - -var ClassExpr = class { - m() { - return ClassExpr; - } -} - -var TempClass = ClassExpr; -ClassExpr = 42; - -assert.equal(42, new TempClass().m()); -assert.equal(TempClass.name, ''); - -////////////////////////////////////////////////////////////////////////////// - -var ClassExpr2 = class ClassExprInner { - m() { - return ClassExprInner; - } -} - -TempClass = ClassExpr2; -ClassExpr2 = 42; - -assert.equal(TempClass, new TempClass().m()); -assert.equal(TempClass.name, 'ClassExprInner'); - -////////////////////////////////////////////////////////////////////////////// - -class ClassDef { - m() { - return ClassDef; - } -} - -var TempClass = ClassDef; -ClassDef = 42; - -assert.equal(TempClass, new TempClass().m()); -// IE does not have a name property on functions. -assert.isTrue(TempClass.name === 'ClassDef' || TempClass.name === undefined); diff --git a/test/fixtures/traceur/Classes/ClassNameInStack.js b/test/fixtures/traceur/Classes/ClassNameInStack.js deleted file mode 100644 index 41d1fe4a3f..0000000000 --- a/test/fixtures/traceur/Classes/ClassNameInStack.js +++ /dev/null @@ -1,29 +0,0 @@ -class MyClassName { - m() { - throw new Error(); - } -} - -try { - new MyClassName().m(); - fail('Should have thrown'); -} catch (ex) { - if (ex.stack) - assert.isTrue(String(ex.stack).indexOf('MyClassName') >= 0); -} - -////////////////////////////////////////////////////////////////////////////// - -class MySecondClass extends MyClassName{ - m() { - throw new Error(); - } -} - -try { - new MySecondClass().m(); - fail('Should have thrown'); -} catch (ex) { - if (ex.stack) - assert.isTrue(String(ex.stack).indexOf('MySecondClass') >= 0); -} diff --git a/test/fixtures/traceur/Classes/Constructor.js b/test/fixtures/traceur/Classes/Constructor.js deleted file mode 100644 index ce76af6bef..0000000000 --- a/test/fixtures/traceur/Classes/Constructor.js +++ /dev/null @@ -1,34 +0,0 @@ -class Point { - constructor(x, y) { - this.x = x; - this.y = y; - } -} - -class A { - classRef() { - return A; - } -}; - -var p = new Point(1, 2); -assert.equal(1, p.x); -assert.equal(2, p.y); - -var p2 = new Point(3, 4); -assert.equal(3, p2.x); -assert.equal(4, p2.y); -assert.equal(1, p.x); -assert.equal(2, p.y); - -for (var element in Point) { - fail('Point contains static member : ' + element); -} - -// Tests to ensure that we're not binding function identifier per class -var a = new A(); -var tmpA = A; -A = 42; -assert.equal(tmpA, a.classRef()); -// IE does not have a name property on functions. -assert.isTrue(tmpA.name === 'A' || tmpA.name === undefined); diff --git a/test/fixtures/traceur/Classes/ConstructorChaining.js b/test/fixtures/traceur/Classes/ConstructorChaining.js deleted file mode 100644 index 7d2a4bd936..0000000000 --- a/test/fixtures/traceur/Classes/ConstructorChaining.js +++ /dev/null @@ -1,22 +0,0 @@ -class ConstructorA { - constructor(x) { - this.x = x; - } -} - -class ConstructorB extends ConstructorA { - constructor(x, y) { - super(x); - this.y = y; - } -} - -// ---------------------------------------------------------------------------- - -var a = new ConstructorA('ax'); -assert.equal('ax', a.x); -assert.isFalse(a.hasOwnProperty('y')); - -var b = new ConstructorB('bx', 'by'); -assert.equal('bx', b.x); -assert.equal('by', b.y); diff --git a/test/fixtures/traceur/Classes/ConstructorMember.js b/test/fixtures/traceur/Classes/ConstructorMember.js deleted file mode 100644 index ae0a2efbe4..0000000000 --- a/test/fixtures/traceur/Classes/ConstructorMember.js +++ /dev/null @@ -1,25 +0,0 @@ -class ConstructorMember { - constructor() {} -} - -class DerivedConstructorMember extends ConstructorMember { - constructor() {} -} - -// ---------------------------------------------------------------------------- - -var cm = new ConstructorMember; -assert.equal(cm.constructor, ConstructorMember.prototype.constructor); -assert.isTrue(ConstructorMember.prototype.hasOwnProperty('constructor')); - -for (var key in ConstructorMember) { - assert.notEqual('constructor should not be enumerable', 'constructor', key); -} - -var dcm = new DerivedConstructorMember; -assert.equal(dcm.constructor, DerivedConstructorMember.prototype.constructor); -assert.isTrue(DerivedConstructorMember.prototype.hasOwnProperty('constructor')); - -for (var key in DerivedConstructorMember) { - assert.notEqual('constructor should not be enumerable', 'constructor', key); -} diff --git a/test/fixtures/traceur/Classes/DefaultConstructor.js b/test/fixtures/traceur/Classes/DefaultConstructor.js deleted file mode 100644 index 057d30e24e..0000000000 --- a/test/fixtures/traceur/Classes/DefaultConstructor.js +++ /dev/null @@ -1,31 +0,0 @@ -class B { - constructor(x, y) { - this.x = x; - this.y = y; - } -} - -class C extends B { - // No constructor -} - -var c = new B(1, 2); -assert.equal(1, c.x); -assert.equal(2, c.y); - -assert.isFalse( - Object.getOwnPropertyDescriptor(B.prototype, 'constructor').enumerable); -assert.isFalse( - Object.getOwnPropertyDescriptor(C.prototype, 'constructor').enumerable); - -// Ensure that we don't try to call super() in the default constructor. -class D extends null {} -var d = new D(); - - -class E extends function(x) { - this.x = x; -} {} - -var e = new E(42) -assert.equal(42, e.x); diff --git a/test/fixtures/traceur/Classes/DeriveFromObject.js b/test/fixtures/traceur/Classes/DeriveFromObject.js deleted file mode 100644 index 852ca2b0fc..0000000000 --- a/test/fixtures/traceur/Classes/DeriveFromObject.js +++ /dev/null @@ -1,6 +0,0 @@ -class DerivedFromObject extends Object { -} - -// ---------------------------------------------------------------------------- - -// TODO(rnystrom): No tests for this? diff --git a/test/fixtures/traceur/Classes/EmptyClass.js b/test/fixtures/traceur/Classes/EmptyClass.js deleted file mode 100644 index 733584a99b..0000000000 --- a/test/fixtures/traceur/Classes/EmptyClass.js +++ /dev/null @@ -1,29 +0,0 @@ -class Empty {} - -class EmptyB extends Empty { -} - -// ---------------------------------------------------------------------------- - -var e = new Empty(); -assert.isNotNull(e); - -for (var element in e) { - assert.equal('constructor', element); -} - -for (var element in Empty) { - fail('Empty contains static member : ' + element); -} - -// Instances should be different. -var e2 = new Empty(); -assert.notEqual(e, e2); - -assert.isTrue(e instanceof Empty); -assert.isFalse(e instanceof EmptyB); - -var b = new EmptyB(); - -assert.isTrue(b instanceof Empty); -assert.isTrue(b instanceof EmptyB); diff --git a/test/fixtures/traceur/Classes/Error_Disabled.js b/test/fixtures/traceur/Classes/Error_Disabled.js deleted file mode 100644 index 8735ad59c0..0000000000 --- a/test/fixtures/traceur/Classes/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --classes=false -// Error: :4:1: Unexpected reserved word - -class C {} diff --git a/test/fixtures/traceur/Classes/Error_GH1556.js b/test/fixtures/traceur/Classes/Error_GH1556.js deleted file mode 100644 index 88f0c96893..0000000000 --- a/test/fixtures/traceur/Classes/Error_GH1556.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :5:19: Unexpected token = - -// extends LeftHandSideExpression -// see https://github.com/google/traceur-compiler/issues/1556 -class A extends B = C {} diff --git a/test/fixtures/traceur/Classes/Error_Super.js b/test/fixtures/traceur/Classes/Error_Super.js deleted file mode 100644 index 9855970fb1..0000000000 --- a/test/fixtures/traceur/Classes/Error_Super.js +++ /dev/null @@ -1,10 +0,0 @@ -// Error: :7:17: Unexpected token ; - -class A {} - -class ImproperSuper extends A { - method() { - return super; - } -} - diff --git a/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js b/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js deleted file mode 100644 index f70856a0a1..0000000000 --- a/test/fixtures/traceur/Classes/Error_SuperAsTemplateTag.js +++ /dev/null @@ -1,10 +0,0 @@ -// Error: :7:18: Unexpected token no substitution template - -class A {} - -class ImproperSuper extends A { - method() { - return super ``; - } -} - diff --git a/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js b/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js deleted file mode 100644 index 8093c9534a..0000000000 --- a/test/fixtures/traceur/Classes/ExtendNonConstructableFunction.js +++ /dev/null @@ -1,11 +0,0 @@ - -assert.throw(function() { - class C extends Math {} -}, 'Super expression must either be null or a function'); - -assert.throw(function() { - function f() {} - // prototype needs to be an Object or null. - f.prototype = 42; - class C extends f {} -}, 'super prototype must be an Object or null'); diff --git a/test/fixtures/traceur/Classes/ExtendObject.js b/test/fixtures/traceur/Classes/ExtendObject.js deleted file mode 100644 index e5b11ffe2d..0000000000 --- a/test/fixtures/traceur/Classes/ExtendObject.js +++ /dev/null @@ -1,4 +0,0 @@ -// Can no longer extend objects. -assert.throw(function() { - class C extends {} {} -}, TypeError); diff --git a/test/fixtures/traceur/Classes/ExtendStrange.js b/test/fixtures/traceur/Classes/ExtendStrange.js deleted file mode 100644 index 3911d03ddb..0000000000 --- a/test/fixtures/traceur/Classes/ExtendStrange.js +++ /dev/null @@ -1,54 +0,0 @@ -class C extends null {} - -var c = new C; -assert.isTrue(c instanceof C); -assert.isFalse(c instanceof Object); - -// Closure testing framework tries to toString the object and fails. -assert.isTrue(Object.getPrototypeOf(c) === C.prototype); -assert.isTrue(Object.getPrototypeOf(Object.getPrototypeOf(c)) === null); - -assert.equal(c.toString, undefined); - -class D extends null { - constructor(...args) { - super(...args); - } -} - -// super() does not depend on the [HomeObject]. It just calls the [Prototype] -// of the function. -new D(); - -class E extends function() { return null }() { - constructor(...args) { - super(...args); - } -} - -// super() does not depend on the [HomeObject]. It just calls the [Prototype] -// of the function. -new E(); - -function f() {}; -f.prototype = null; - -class F extends f { - get x() { - return 1; - } -} - -assert.equal(1, new F().x); - - -function g() {} -function h() {} -g.prototype = h; -class G extends g { - get x() { - return 2; - } -} - -assert.equal(2, new G().x); diff --git a/test/fixtures/traceur/Classes/FieldInheritance.js b/test/fixtures/traceur/Classes/FieldInheritance.js deleted file mode 100644 index c9b863aaee..0000000000 --- a/test/fixtures/traceur/Classes/FieldInheritance.js +++ /dev/null @@ -1,26 +0,0 @@ -class Point2D { - constructor() { - this.x = 1; - this.y = 2; - } -} - -class Point3D extends Point2D { - constructor() { - super(); - this.z = 3; - } -} - -// ---------------------------------------------------------------------------- - -var a = new Point2D(); -assert.isTrue(a.hasOwnProperty('x')); -assert.isTrue(a.hasOwnProperty('y')); -assert.isFalse(a.hasOwnProperty('z')); -assert.isUndefined(a.z); - -var b = new Point3D(); -assert.isTrue(b.hasOwnProperty('x')); -assert.isTrue(b.hasOwnProperty('y')); -assert.isTrue(b.hasOwnProperty('z')); diff --git a/test/fixtures/traceur/Classes/FieldInitializers.js b/test/fixtures/traceur/Classes/FieldInitializers.js deleted file mode 100644 index dcd938fc00..0000000000 --- a/test/fixtures/traceur/Classes/FieldInitializers.js +++ /dev/null @@ -1,23 +0,0 @@ -class Point { - constructor() { - this.x = 0; - this.y = 0; - } -} - -// ---------------------------------------------------------------------------- - -var p = new Point(); -assert.equal(0, p.x); -assert.equal(0, p.y); -p.x = 1; -assert.equal(1, p.x); - -var p2 = new Point(); -assert.equal(0, p2.x); -assert.equal(0, p2.y); -assert.equal(1, p.x); - -for (var element in Point) { - fail('Point contains static member : ' + element); -} diff --git a/test/fixtures/traceur/Classes/FieldLookup.js b/test/fixtures/traceur/Classes/FieldLookup.js deleted file mode 100644 index 6afad51a9e..0000000000 --- a/test/fixtures/traceur/Classes/FieldLookup.js +++ /dev/null @@ -1,47 +0,0 @@ -// This requires manually constructed classes. - -function fieldLookupA() { } -fieldLookupA.prototype = { - foo : "A.value", - get bar() { - return "A.get.bar"; - }, - set bar(value) { }, - boo : "A.boo.value", - baz : undefined -} - -function fieldLookupB() { } -fieldLookupB.prototype = { - __proto__ : fieldLookupA.prototype, - get foo() { - return "B.get.foo"; - }, - set foo(value) { }, - bar: "B.value", - boo: undefined, - baz: "B.baz.value", -} - -class FieldLookupC extends fieldLookupB { - x() { - return super.foo; - } - y() { - return super.bar; - } - z() { - return super.boo; - } - w() { - return super.baz; - } -} - -// ---------------------------------------------------------------------------- - -var c = new FieldLookupC(); -assert.equal("B.get.foo", c.x()); -assert.equal("B.value", c.y()); -assert.isUndefined(c.z()); -assert.equal("B.baz.value", c.w()); diff --git a/test/fixtures/traceur/Classes/Fields.js b/test/fixtures/traceur/Classes/Fields.js deleted file mode 100644 index 70848ed8fe..0000000000 --- a/test/fixtures/traceur/Classes/Fields.js +++ /dev/null @@ -1,19 +0,0 @@ -class Point { - constructor() { - this.x = 0; - this.y = 0; - } -} - -// ---------------------------------------------------------------------------- - -var p = new Point(); - -var keys = []; -for (var key in p) { - keys.push(key); -} - -assert.isTrue(keys.indexOf('x') !== -1); -assert.isTrue(keys.indexOf('y') !== -1); -assert.isTrue(keys.indexOf('constructor') === -1); diff --git a/test/fixtures/traceur/Classes/Getters.js b/test/fixtures/traceur/Classes/Getters.js deleted file mode 100644 index 06bd252815..0000000000 --- a/test/fixtures/traceur/Classes/Getters.js +++ /dev/null @@ -1,20 +0,0 @@ -class GetterA { - get x() { return 'getter x'; } - get y() { return 'getter y'; } -} - -class GetterB extends GetterA { - get x() { return super.x; } -} - -class GetterC extends GetterB { - get y() { return super.y; } -} - -// ---------------------------------------------------------------------------- - -var b = new GetterB(); -var c = new GetterC(); - -assert.equal('getter x', b.x); -assert.equal('getter y', c.y); diff --git a/test/fixtures/traceur/Classes/Inheritance.js b/test/fixtures/traceur/Classes/Inheritance.js deleted file mode 100644 index 562e12dadb..0000000000 --- a/test/fixtures/traceur/Classes/Inheritance.js +++ /dev/null @@ -1,9 +0,0 @@ -class SimpleBase {} -class SimpleDerived extends SimpleBase {} - -// ---------------------------------------------------------------------------- - -var derived = new SimpleDerived(); -assert.isTrue(derived instanceof SimpleDerived); -assert.isTrue(derived instanceof SimpleBase); -assert.isTrue(derived instanceof Object); diff --git a/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js b/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js deleted file mode 100644 index 4b8722655d..0000000000 --- a/test/fixtures/traceur/Classes/InheritanceFromMemberExpression.js +++ /dev/null @@ -1,31 +0,0 @@ -var baseContainer = { - base: function() { - this.yyy = 'base constructor'; - } -}; - -baseContainer.base.prototype = { - x: 'proto x', - constructor: function() { - this.y = 'base y'; - } -} - -class MemberExprBase extends baseContainer.base { - constructor(w) { - super(); - this.z = 'var z'; - this.w = w; - } -} - -// ---------------------------------------------------------------------------- - -var a = new MemberExprBase('w value'); -var pa = Object.getPrototypeOf(a); -var ppa = Object.getPrototypeOf(pa); - -assertHasOwnProperty(a, 'yyy', 'w', 'z'); -assertLacksOwnProperty(a, 'x'); -assertHasOwnProperty(pa, 'constructor'); -assertHasOwnProperty(ppa, 'x', 'constructor'); diff --git a/test/fixtures/traceur/Classes/InheritanceFromNonclass.js b/test/fixtures/traceur/Classes/InheritanceFromNonclass.js deleted file mode 100644 index 67b767156f..0000000000 --- a/test/fixtures/traceur/Classes/InheritanceFromNonclass.js +++ /dev/null @@ -1,17 +0,0 @@ -function noClassA() {} -noClassA.prototype = { - ma: function() { return 'ma'; } -} - -class NoClassB extends noClassA { - mb() { - return 'mb ' + super.ma(); - } -} - -// ---------------------------------------------------------------------------- - -var b = new NoClassB; -assert.isTrue(b instanceof noClassA); -assert.equal('ma', b.ma()); -assert.equal('mb ma', b.mb()); diff --git a/test/fixtures/traceur/Classes/InheritanceNameBinding.js b/test/fixtures/traceur/Classes/InheritanceNameBinding.js deleted file mode 100644 index d39468d855..0000000000 --- a/test/fixtures/traceur/Classes/InheritanceNameBinding.js +++ /dev/null @@ -1,11 +0,0 @@ -class NameBindingBase {} - -class NameBindingDerived extends NameBindingBase { - getX() { return this.x; } -} - -// ---------------------------------------------------------------------------- - -var derived = new NameBindingDerived(); -derived.x = 12; -assert.equal(12, derived.getX()); diff --git a/test/fixtures/traceur/Classes/Method.js b/test/fixtures/traceur/Classes/Method.js deleted file mode 100644 index 69e8c76f2b..0000000000 --- a/test/fixtures/traceur/Classes/Method.js +++ /dev/null @@ -1,21 +0,0 @@ -class Universe { - answer() { - return 42; - } -} - -// ---------------------------------------------------------------------------- - -var universe = new Universe(); -assert.equal(42, universe.answer()); - -var keys = []; -for (var key in universe) { - keys.push(key); -} -assert.isTrue(keys.indexOf('answer') !== -1); -assert.isTrue(keys.indexOf('constructor') === -1); - -for (var key in Universe) { - fail('Universe contains static member : ' + key); -} diff --git a/test/fixtures/traceur/Classes/MethodInheritance.js b/test/fixtures/traceur/Classes/MethodInheritance.js deleted file mode 100644 index c9e0f63baa..0000000000 --- a/test/fixtures/traceur/Classes/MethodInheritance.js +++ /dev/null @@ -1,32 +0,0 @@ -class MethodsA { - ma() {} -} - -class MethodsB extends MethodsA { - mb() {} -} - -class MethodsC extends MethodsB { - mc() {} -} - -// ---------------------------------------------------------------------------- - -var a = new MethodsA(); -var b = new MethodsB(); -var c = new MethodsC(); - -var pa = Object.getPrototypeOf(a); -var pb = Object.getPrototypeOf(b); -var pc = Object.getPrototypeOf(c); - -assertNoOwnProperties(a); -assertNoOwnProperties(b); -assertNoOwnProperties(c); - -assertHasOwnProperty(pa, 'ma'); -assertLacksOwnProperty(pa, 'mb', 'mc'); -assertHasOwnProperty(pb, 'mb'); -assertLacksOwnProperty(pb, 'ma', 'mc'); -assertHasOwnProperty(pc, 'mc'); -assertLacksOwnProperty(pc, 'ma', 'mb'); diff --git a/test/fixtures/traceur/Classes/MethodLookup.js b/test/fixtures/traceur/Classes/MethodLookup.js deleted file mode 100644 index 2a11cc3be3..0000000000 --- a/test/fixtures/traceur/Classes/MethodLookup.js +++ /dev/null @@ -1,34 +0,0 @@ -class MethodLookupA { - foo() { - return 'A.foo()'; - } - get bar() { - return 'A.get.bar'; - } - set bar(value) { } -} - -class MethodLookupB extends MethodLookupA { - get foo() { - return 'B.foo.get'; - } - set foo(value) { } - bar() { - return 'B.bar()'; - } -} - -class MethodLookupC extends MethodLookupB { - x() { - return super.foo; - } - y() { - return super.bar(); - } -} - -// ---------------------------------------------------------------------------- - -var c = new MethodLookupC(); -assert.equal('B.foo.get', c.x()); -assert.equal('B.bar()', c.y()); diff --git a/test/fixtures/traceur/Classes/NameBinding.js b/test/fixtures/traceur/Classes/NameBinding.js deleted file mode 100644 index 38a6be7c4d..0000000000 --- a/test/fixtures/traceur/Classes/NameBinding.js +++ /dev/null @@ -1,36 +0,0 @@ -class ElementHolder { - getElement() { return this.element; } - - makeFilterCapturedThis() { - var capturedThis = this; - return function (x) { - return x == capturedThis.element; - } - } - - makeFilterLostThis() { - return function () { return this; } - } - - makeFilterHidden(element) { - return function (x) { return x == element; } - } -} - -// ---------------------------------------------------------------------------- - -var obj = new ElementHolder(); - -obj.element = 40; -assert.equal(40, obj.getElement()); -assert.isTrue(obj.makeFilterCapturedThis()(40)); - -// http://code.google.com/p/v8/issues/detail?id=1381 -// assert.isUndefined(obj.makeFilterLostThis()()); - -obj.element = 39; -assert.isFalse(obj.makeFilterCapturedThis()(40)); -assert.isTrue(obj.makeFilterCapturedThis()(39)); - -assert.isFalse(obj.makeFilterHidden(41)(40)); -assert.isTrue(obj.makeFilterHidden(41)(41)); diff --git a/test/fixtures/traceur/Classes/NestedClassSuper.js b/test/fixtures/traceur/Classes/NestedClassSuper.js deleted file mode 100644 index 9efce298ce..0000000000 --- a/test/fixtures/traceur/Classes/NestedClassSuper.js +++ /dev/null @@ -1,104 +0,0 @@ -class One { - constructor(o) { o.r = 'c1'; } - m() { return 'm1'; } - get g() { return 'g1'; } - set x(v) { this.x_ = v+1; } - get x() { return this.x_; } -} - -// All OneExt class decls are identical. -// -// Just testing identical behavior in the different contexts: -// constructor, method, method with inner func, getter, setter. -class OneExtWrapper { - constructor() { - class OneExt extends One { - constructor() { - var o = {}; - super(o); - assert.equal('c1', o.r); - } - m() { return super.m(); } - get g() { return super.g; } - set x(v) { super.x = v; } - get x() { return super.x; } - } - this.Cconstr = OneExt; - } - m() { - class OneExt extends One { - constructor() { - var o = {}; - super(o); - assert.equal('c1', o.r); - } - m() { return super.m(); } - get g() { return super.g; } - set x(v) { super.x = v; } - get x() { return super.x; } - } - return OneExt; - } - mf() { - return (function(){ - class OneExt extends One { - constructor() { - var o = {}; - super(o); - assert.equal('c1', o.r); - } - m() { return super.m(); } - get g() { return super.g; } - set x(v) { super.x = v; } - get x() { return super.x; } - } - return OneExt; - })(); - } - get g() { - class OneExt extends One { - constructor() { - var o = {}; - super(o); - assert.equal('c1', o.r); - } - m() { return super.m(); } - get g() { return super.g; } - set x(v) { super.x = v; } - get x() { return super.x; } - } - return OneExt; - } - set Cprop(v) { - class OneExt extends One { - constructor() { - var o = {}; - super(o); - assert.equal('c1', o.r); - } - m() { return super.m(); } - get g() { return super.g; } - set x(v) { super.x = v; } - get x() { return super.x; } - } - this.C = OneExt; - } - get Cprop() { - return this.C; - } -} - -// ---------------------------------------------------------------------------- - -function checkClass(C) { - var o = new C(); - assert.equal('m1', o.m()); - assert.equal('g1', o.g); - o.x = 'x'; - assert.equal('x1', o.x); -} - -var o = new OneExtWrapper(); -o.Cprop = 'dummy value'; - -[o.Cconstr, o.m(), o.mf(), o.g, o.Cprop].forEach(checkClass); diff --git a/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js b/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js deleted file mode 100644 index ab24afa89a..0000000000 --- a/test/fixtures/traceur/Classes/NestedClassSuperAnimal.js +++ /dev/null @@ -1,45 +0,0 @@ -// a = animal, n = name, sn = super name, fn = full name, wn = with name - -class Animal { - constructor(n) { - this.n1 = n + ' Animal'; - } - get n() { return this.n1; } -} - -class Roo extends Animal { - constructor(n) { - class Koala extends Animal { - constructor(n) { - super(n); - this.n2 = n + ' Koala'; - } - get n() { return this.n2; } - get sn() { return super.n; } - get fn() { return this.n + ' aka ' + this.sn; } - } - this.a = new Koala(n + ' II'); - - super(n); - this.n2 = n + ' Roo'; - } - wn(n) { - return ' (with ' + n + ')'; - } - get n() { return this.n2 + this.wn(this.a.n); } - get sn() { return super.n + this.wn(this.a.sn); } - get fn() { return this.n + ' aka ' + this.sn + this.wn(this.a.fn); } -} - -// ---------------------------------------------------------------------------- - -var o = new Roo('Kanga'); -assert.equal('Kanga II Koala', o.a.n); -assert.equal('Kanga II Animal', o.a.sn); -assert.equal('Kanga II Koala aka Kanga II Animal', o.a.fn); - -assert.equal('Kanga Roo (with Kanga II Koala)', o.n); -assert.equal('Kanga Animal (with Kanga II Animal)', o.sn); -assert.equal('Kanga Roo (with Kanga II Koala) aka ' + - 'Kanga Animal (with Kanga II Animal) ' + - '(with Kanga II Koala aka Kanga II Animal)', o.fn); diff --git a/test/fixtures/traceur/Classes/NestedFunctionSuper.js b/test/fixtures/traceur/Classes/NestedFunctionSuper.js deleted file mode 100644 index a16c07c022..0000000000 --- a/test/fixtures/traceur/Classes/NestedFunctionSuper.js +++ /dev/null @@ -1,76 +0,0 @@ -class SuperBase { - m() { return 40; } - get x () { return this.baseX; } - set x (value) { this.baseX = value; } - constructor() { - this.baseC = 2; - this.baseX = 4; - } -} - -class SuperDerived extends SuperBase { - m() { return 41; } - superM() { - return (function() { - return super.m(); - })(); - } - superX() { - return (function() { - return super.x; - })(); - } - superX2() { - return (function() { - return (function() { - return super.x; - })(); - })(); - } - superX2F() { - return function() { - return (function() { - return super.x; - })(); - }; - } - get superXprop() { - return (function() { - return super.x; - })(); - } - set superXprop(v) { - return (function() { - super.x = v; - })(); - } - constructor() { - this.x = 10; - this.derC = 3; - (function() { super(); })(); - } -} - -// ---------------------------------------------------------------------------- - -var obj = new SuperDerived(); -assert.equal(41, obj.m()); -assert.equal(40, obj.superM()); - -assert.equal(4, obj.baseX); -assert.equal(4, obj.x); -assert.equal(4, obj.superX()); -assert.equal(4, obj.superX2()); -assert.equal(4, obj.superX2F()()); -assert.equal(4, obj.superXprop); - -obj.superXprop = 5; -assert.equal(5, obj.baseX); -assert.equal(5, obj.x); -assert.equal(5, obj.superX()); -assert.equal(5, obj.superX2()); -assert.equal(5, obj.superX2F()()); -assert.equal(5, obj.superXprop); - -assert.equal(2, obj.baseC); -assert.equal(3, obj.derC); diff --git a/test/fixtures/traceur/Classes/NewClassExpression.js b/test/fixtures/traceur/Classes/NewClassExpression.js deleted file mode 100644 index a08d0ff8eb..0000000000 --- a/test/fixtures/traceur/Classes/NewClassExpression.js +++ /dev/null @@ -1,18 +0,0 @@ - -assert.equal((new class { - get x() { - return 'x'; - } - getX() { - return this.x; - } -}).getX(), 'x'); - -assert.equal(new class { - get y() { - return 'y'; - } - getY() { - return this.y; - } -}().getY(), 'y'); diff --git a/test/fixtures/traceur/Classes/OptionalParams.js b/test/fixtures/traceur/Classes/OptionalParams.js deleted file mode 100644 index 4040e25bf9..0000000000 --- a/test/fixtures/traceur/Classes/OptionalParams.js +++ /dev/null @@ -1,18 +0,0 @@ -class OptionalParams { - constructor(opt = 1) { - this.opt = opt; - } - instanceMethod(opt = 2) { - return opt; - } -} - -// ---------------------------------------------------------------------------- - -var obj = new OptionalParams(); -assert.equal(1, obj.opt); -assert.equal(2, obj.instanceMethod()); -assert.equal(3, obj.instanceMethod(3)); - -var obj2 = new OptionalParams(2); -assert.equal(2, obj2.opt); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/PropertyAccessors.js b/test/fixtures/traceur/Classes/PropertyAccessors.js deleted file mode 100644 index 94f0028504..0000000000 --- a/test/fixtures/traceur/Classes/PropertyAccessors.js +++ /dev/null @@ -1,59 +0,0 @@ -class ImmutablePoint { - get x () { return this.x_; } - get y () { return this.y_; } -} - -class MutablePoint { - get x () { return this.x_; } - set x (x) { this.x_ = x; } - get y () { return this.y_; } - set y (y) { this.y_ = y; } -} - -// ---------------------------------------------------------------------------- - -var immutable = new ImmutablePoint(); -assert.equal(undefined, immutable.x); -assert.equal(undefined, immutable.y); -immutable.x_ = 10; -immutable.y_ = 20; -assert.equal(10, immutable.x); -assert.equal(20, immutable.y); -assert.equal(10, immutable.x_); -assert.equal(20, immutable.y_); - -try { - immutable.x = 11; - fail('should not be able to set a get only property'); -} catch (except) { -} -try { - immutable.y = 11; - fail('should not be able to set a get only property'); -} catch (except) { -} -assert.equal(10, immutable.x); -assert.equal(20, immutable.y); - -var mutable = new MutablePoint(); -assert.equal(undefined, mutable.x); -assert.equal(undefined, mutable.y); -mutable.x_ = 10; -mutable.y_ = 20; -assert.equal(10, mutable.x); -assert.equal(20, mutable.y); -assert.equal(10, mutable.x_); -assert.equal(20, mutable.y_); - -try { - mutable.x = 11; -} catch (except) { - fail('should be able to set a read/write property'); -} -try { - mutable.y = 12; -} catch (except) { - fail('should be able to set a read/write property'); -} -assert.equal(11, mutable.x); -assert.equal(12, mutable.y); diff --git a/test/fixtures/traceur/Classes/PrototypeDescriptor.js b/test/fixtures/traceur/Classes/PrototypeDescriptor.js deleted file mode 100644 index 1be4d32b2a..0000000000 --- a/test/fixtures/traceur/Classes/PrototypeDescriptor.js +++ /dev/null @@ -1,7 +0,0 @@ -class C {} - -var descr = Object.getOwnPropertyDescriptor(C, 'prototype'); -assert.isFalse(descr.enumerable); -assert.isFalse(descr.configurable); -assert.isFalse(descr.writable); -assert.equal(descr.value, C.prototype); diff --git a/test/fixtures/traceur/Classes/RestParams.js b/test/fixtures/traceur/Classes/RestParams.js deleted file mode 100644 index 4720e962b1..0000000000 --- a/test/fixtures/traceur/Classes/RestParams.js +++ /dev/null @@ -1,15 +0,0 @@ -class RestParams { - constructor(...rest) { - this.rest = rest; - } - instanceMethod(...rest) { - return rest; - } -} - -// ---------------------------------------------------------------------------- - -var obj = new RestParams(0, 1, 2); -assertArrayEquals([0, 1, 2], obj.rest); -assertArrayEquals([3, 4, 5], obj.instanceMethod(3, 4, 5)); - diff --git a/test/fixtures/traceur/Classes/SemiColon.js b/test/fixtures/traceur/Classes/SemiColon.js deleted file mode 100644 index 64c076d705..0000000000 --- a/test/fixtures/traceur/Classes/SemiColon.js +++ /dev/null @@ -1,3 +0,0 @@ -class SemiColon { - ; -} \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/SimpleSuper.js b/test/fixtures/traceur/Classes/SimpleSuper.js deleted file mode 100644 index 7b282563ae..0000000000 --- a/test/fixtures/traceur/Classes/SimpleSuper.js +++ /dev/null @@ -1,31 +0,0 @@ -class SuperBase { - m() { return 40; } - get x () { return this.baseX; } - set x (value) { this.baseX = value; } - constructor() { - this.baseC = 2; - this.baseX = 4; - } -} - -class SuperDerived extends SuperBase { - m() { return 41; } - superM() { return super.m(); } - superX() { return super.x; } - constructor() { - this.x = 10; - this.derC = 3; - super(); - } -} - -// ---------------------------------------------------------------------------- - -var obj = new SuperDerived(); -assert.equal(41, obj.m()); -assert.equal(40, obj.superM()); -assert.equal(4, obj.baseX); -assert.equal(4, obj.x); -assert.equal(4, obj.superX()); -assert.equal(2, obj.baseC); -assert.equal(3, obj.derC); diff --git a/test/fixtures/traceur/Classes/Skip_DerivedButton.js b/test/fixtures/traceur/Classes/Skip_DerivedButton.js deleted file mode 100644 index 15f63caf26..0000000000 --- a/test/fixtures/traceur/Classes/Skip_DerivedButton.js +++ /dev/null @@ -1,39 +0,0 @@ -// Skip. Not implemented. -// Only in browser. - -class CustomButton extends HTMLButtonElement { - constructor() { - this.value = 'Custom Button'; - } -} - -class CustomSelect extends HTMLSelectElement {} -class CustomInput extends HTMLInputElement {} -class CustomDiv extends HTMLDivElement {} -class CustomUIEvent extends UIEvent {} -// class CustomSpan extends HTMLSpanElement {} -class CustomTableRow extends HTMLTableRowElement {} -class CustomHeading extends HTMLHeadingElement {} -class CustomElement extends HTMLElement {} -class CustomUList extends HTMLUListElement {} -class CustomLI extends HTMLLIElement {} -class CustomMenu extends HTMLMenuElement {} -class CustomTextArea extends HTMLTextAreaElement {} - -// ---------------------------------------------------------------------------- - -var button = new CustomButton(); -document.body.appendChild(button); -document.body.appendChild(new CustomSelect()); -document.body.appendChild(new CustomInput()); -document.body.appendChild(new CustomDiv()); -// document.body.appendChild(new CustomSpan()); -document.body.appendChild(new CustomTableRow()); -document.body.appendChild(new CustomHeading()); -document.body.appendChild(new CustomElement()); -document.body.appendChild(new CustomUList()); -document.body.appendChild(new CustomLI()); -document.body.appendChild(new CustomMenu()); -document.body.appendChild(new CustomTextArea()); - -// TODO(rnystrom): Test these. diff --git a/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js b/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js deleted file mode 100644 index 8841875d64..0000000000 --- a/test/fixtures/traceur/Classes/Skip_HTMLBlockquoteElement.js +++ /dev/null @@ -1,16 +0,0 @@ -// Skip. Not implemented. -// Only in browser. - -class CustomBlockquote extends HTMLBlockquoteElement { - constructor() { - this.custom = 42; - } -} - -var customBlockquote = new CustomBlockquote; -assert.equal(42, customBlockquote.custom); -assert.equal('BLOCKQUOTE', customBlockquote.tagName); -assert.isTrue(customBlockquote instanceof CustomBlockquote); -assert.isTrue(customBlockquote instanceof HTMLBlockquoteElement); -assert.isTrue(customBlockquote instanceof HTMLQuoteElement); -assert.isTrue(customBlockquote instanceof HTMLElement); diff --git a/test/fixtures/traceur/Classes/Static.js b/test/fixtures/traceur/Classes/Static.js deleted file mode 100644 index 08e9228253..0000000000 --- a/test/fixtures/traceur/Classes/Static.js +++ /dev/null @@ -1,70 +0,0 @@ -var x = 42; - -class B { - static m() { - return this; - } - - static get x() { - return x; - } - - static set x(value) { - x = value; - } -} - -assert.equal(B, B.m()); -assert.equal(42, B.x); -B.x = 1; -assert.equal(1, x); - -class StaticMethod { - static static() { - return 'static method'; - } -} - -assert.equal('static method', StaticMethod.static()); - -class StaticGetter { - static get static() { - return 'static getter'; - } -} - -assert.equal('static getter', StaticGetter.static); - -class StaticSetter { - static set static(value) { - x = value; - } -} - -StaticSetter.static = 'static setter'; -assert.equal('static setter', x); - -class MethodNamedStatic { - static() { - return this; - } -} - -var c = new MethodNamedStatic(); -assert.equal(c, c.static()); - -class AccessorNamedStatic { - get static() { - return [this, x]; - } - - set static(value) { - x = [this, value]; - } -} - -x = 2; -c = new AccessorNamedStatic(); -assertArrayEquals([c, 2], c.static); -c.static = 3; -assertArrayEquals([c, 3], x); diff --git a/test/fixtures/traceur/Classes/StaticSuper.js b/test/fixtures/traceur/Classes/StaticSuper.js deleted file mode 100644 index 558c5bb334..0000000000 --- a/test/fixtures/traceur/Classes/StaticSuper.js +++ /dev/null @@ -1,35 +0,0 @@ -var x = 'B.getter'; - -class B { - static method() { - return [this, 'B.method']; - } - - static get getter() { - return [this, x]; - } - - static set setter(value) { - x = [this, value]; - } -} - -class C extends B { - static method() { - return super.method(); - } - - static get getter() { - return super.getter; - } - - static set setter(value) { - super.setter = value; - } -} - -assertArrayEquals([C, 'B.method'], C.method()); -assertArrayEquals([C, 'B.getter'], C.getter); - -C.setter = 'B.setter'; -assertArrayEquals([C, 'B.setter'], x); diff --git a/test/fixtures/traceur/Classes/StaticSuperNoExtends.js b/test/fixtures/traceur/Classes/StaticSuperNoExtends.js deleted file mode 100644 index 58c369a789..0000000000 --- a/test/fixtures/traceur/Classes/StaticSuperNoExtends.js +++ /dev/null @@ -1,47 +0,0 @@ -var x = 42; - -Function.prototype.testFunction = function() { - return [this, 42, this.call]; -}; - -Object.defineProperty(Function.prototype, 'testGetter', { - get: function() { - return [this, x, this.call]; - }, - configurable: true -}); - - -Object.defineProperty(Function.prototype, 'testSetter', { - set: function(value) { - x = [this, value, this.call]; - }, - configurable: true -}); - - -class NoExtends { - static method() { - return super.testFunction(); - } - - static get getter() { - return super.testGetter; - } - - static set setter(value) { - super.testSetter = value; - } -} - -var call = Function.prototype.call; -assertArrayEquals([NoExtends, 42, call], NoExtends.method()); - -assertArrayEquals([NoExtends, 42, call], NoExtends.getter); - -NoExtends.setter = 1; -assertArrayEquals([NoExtends, 1, call], x); - -delete Function.prototype.testFunction; -delete Function.prototype.testGetter; -delete Function.prototype.testSetter; \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/StaticSymbol.js b/test/fixtures/traceur/Classes/StaticSymbol.js deleted file mode 100644 index 99ec7dd8ab..0000000000 --- a/test/fixtures/traceur/Classes/StaticSymbol.js +++ /dev/null @@ -1,8 +0,0 @@ -// Options: --symbols -var sym = Symbol(); -class C { - static [sym]() { - return 42; - } -} -assert.equal(C[sym](), 42); diff --git a/test/fixtures/traceur/Classes/SuperChaining.js b/test/fixtures/traceur/Classes/SuperChaining.js deleted file mode 100644 index 5688aa62fd..0000000000 --- a/test/fixtures/traceur/Classes/SuperChaining.js +++ /dev/null @@ -1,28 +0,0 @@ -class ChainA { - foo() { - return 'A'; - } -} - -class ChainB extends ChainA { - foo() { - return super.foo() + ' B'; - } -} - -class ChainC extends ChainB { - foo() { - return super.foo() + ' C'; - } -} - -class ChainD extends ChainC { - foo() { - return super.foo() + ' D'; - } -} - -// ---------------------------------------------------------------------------- - -var d = new ChainD(); -assert.equal('A B C D', d.foo()); diff --git a/test/fixtures/traceur/Classes/SuperChangeProto.js b/test/fixtures/traceur/Classes/SuperChangeProto.js deleted file mode 100644 index 6bf02b2620..0000000000 --- a/test/fixtures/traceur/Classes/SuperChangeProto.js +++ /dev/null @@ -1,20 +0,0 @@ -var log = ''; - -class Base { - p() { log += '[Base]'; } -} - -class OtherBase { - p() { log += '[OtherBase]'; } -} -class Derived extends Base { - p() { - log += '[Derived]'; - super.p(); - Derived.prototype.__proto__ = OtherBase.prototype; - super.p(); - } -} - -new Derived().p(); -assert.equal(log, '[Derived][Base][OtherBase]'); diff --git a/test/fixtures/traceur/Classes/SuperMissing.js b/test/fixtures/traceur/Classes/SuperMissing.js deleted file mode 100644 index 6eb4f8679f..0000000000 --- a/test/fixtures/traceur/Classes/SuperMissing.js +++ /dev/null @@ -1,40 +0,0 @@ -class MissingSuperA {} - -class MissingSuperB extends MissingSuperA { - method() { - return super.foo(); - } - field() { - return super.foo; - } -} - -// ---------------------------------------------------------------------------- - -// Collect the expected values. -var expectedF; -var expectedM; -var actualF; -var actualM; - -expectedF = ({}).x; -try { - ({}).method(); -} catch (e) { - expectedM = e; -} - -// Test against those. -var b = new MissingSuperB(); -var actualF = b.field(); -var actualM; -try { - b.method(); -} catch (e) { - actualM = e; -} - -assert.equal(actualF, expectedF); -assert.instanceOf(expectedM, TypeError); -assert.instanceOf(actualM, TypeError); -assert.equal(Object.getPrototypeOf(actualM), Object.getPrototypeOf(expectedM)); diff --git a/test/fixtures/traceur/Classes/SuperPostfix.js b/test/fixtures/traceur/Classes/SuperPostfix.js deleted file mode 100644 index 843c26891e..0000000000 --- a/test/fixtures/traceur/Classes/SuperPostfix.js +++ /dev/null @@ -1,23 +0,0 @@ -class B { - constructor() { - this._x = 0; - } - get x() { - return this._x; - } - set x(x) { - this._x = x; - } -} - -class C extends B { - m() { - assert.equal(this.x, 0); - assert.equal(super.x++, 0); - assert.equal(this.x, 1); - assert.equal(super.x--, 1); - assert.equal(this.x, 0); - } -} - -new C().m(); diff --git a/test/fixtures/traceur/Classes/SuperSet.js b/test/fixtures/traceur/Classes/SuperSet.js deleted file mode 100644 index cb612b9fe0..0000000000 --- a/test/fixtures/traceur/Classes/SuperSet.js +++ /dev/null @@ -1,56 +0,0 @@ -class B { - constructor() { - this._y = {v: 321}; - this._z = 1; - } - set x(value) { - this._x = value; - } - get x() { - return this._y; - } - getX() { - return this._x; - } - getV() { - return this._y.v - } - - set z(v) { - this._z = v; - } - get z() { - return this._z; - } -} - -class C extends B { - constructor() { - super(); - } - set x(value) { - assert.equal(super.x = value, value); - } - set v(value) { - return super.x.v = value; - } - inc(val) { - assert.equal(super.z += val, 4); - } - incLookup(val) { - assert.equal(super['z'] += val, 9); - } -} - -var c = new C; -c.x = 42; -assert.equal(42, c.getX()); - -c.v = 123; -assert.equal(123, c.getV()); - -c.inc(3); -assert.equal(4, c.z); - -c.incLookup(5); -assert.equal(9, c.z); \ No newline at end of file diff --git a/test/fixtures/traceur/Classes/SuperUnary.js b/test/fixtures/traceur/Classes/SuperUnary.js deleted file mode 100644 index 310041e220..0000000000 --- a/test/fixtures/traceur/Classes/SuperUnary.js +++ /dev/null @@ -1,26 +0,0 @@ -class B { - constructor() { - this._x = 0; - } - get x() { - return this._x; - } - set x(x) { - this._x = x; - } -} - -class C extends B { - m() { - assert.equal(this.x, 0); - assert.equal(++super.x, 1); - assert.equal(this.x, 1); - assert.equal(--super.x, 0); - assert.equal(this.x, 0); - - // Don't use assert.typeOf since we are testing typeof. - assert.equal(typeof super.x, 'number'); - } -} - -new C().m(); diff --git a/test/fixtures/traceur/Classes/SuperWithoutExtends.js b/test/fixtures/traceur/Classes/SuperWithoutExtends.js deleted file mode 100644 index 5b2546b084..0000000000 --- a/test/fixtures/traceur/Classes/SuperWithoutExtends.js +++ /dev/null @@ -1,15 +0,0 @@ -class C { - constructor() { - this.x = true; - } - static m() { - return super.hasOwnProperty('m'); - } - - m() { - return super.hasOwnProperty('x'); - } -} - -assert.isTrue(new C().m()); -assert.isTrue(C.m()); diff --git a/test/fixtures/traceur/Classes/Types.js b/test/fixtures/traceur/Classes/Types.js deleted file mode 100644 index dbdfd6e262..0000000000 --- a/test/fixtures/traceur/Classes/Types.js +++ /dev/null @@ -1,26 +0,0 @@ -// Options: --types - -class Typed { - constructor(x : number) { - this.x_ = x; - } - - addTo(y : number) : number { - this.x += y; - return this.x; - } - - get x() : number { - return this.x_; - } - - set x(x : number) { - this.x_ = x; - } -} - -// Generics, ClassExpression -var C = class ClassExpression {}; - -assert.equal(1, new Typed(1).x); -assert.equal(2, new Typed(1).addTo(1)); diff --git a/test/fixtures/traceur/Collections/Map.js b/test/fixtures/traceur/Collections/Map.js deleted file mode 100644 index 17dc74e2d4..0000000000 --- a/test/fixtures/traceur/Collections/Map.js +++ /dev/null @@ -1,234 +0,0 @@ -var t = new Map(); - -var objectKey = {}; -var stringKey = 'keykeykey'; -var numberKey = 42.24; -var booleanKey = true; -var undefinedKey = undefined; -var nullKey = null; -var nanKey = NaN; -var zeroKey = 0; - - -assert.equal(t.size, 0); - -t.set(undefinedKey, 'value8'); -t.set(nullKey, 'value9'); -t.set(stringKey, 'value5'); -t.set(numberKey, 'value6'); -t.set(booleanKey, 'value7'); -t.set(objectKey, 'value1'); -t.set(nanKey, 'value10'); -t.set(zeroKey, 'value11'); - -assert.equal(t.size, 8); - -assert.equal(t.get(objectKey), 'value1'); -assert.equal(t.get(stringKey), 'value5'); -assert.equal(t.get(numberKey), 'value6'); -assert.equal(t.get(booleanKey), 'value7'); -assert.equal(t.get(undefinedKey), 'value8'); -assert.equal(t.get(nullKey), 'value9'); -assert.equal(t.get(nanKey), 'value10'); -assert.equal(t.get(zeroKey), 'value11'); - -assert.equal(t.get({}), undefined); -assert.equal(t.get('keykeykey'), 'value5'); -assert.equal(t.get(42.24), 'value6'); -assert.equal(t.get(true), 'value7'); -assert.equal(t.get(undefined), 'value8'); -assert.equal(t.get(null), 'value9'); -assert.equal(t.get(NaN), 'value10'); -assert.equal(t.get(0), 'value11'); -assert.equal(t.get(1 / Infinity), 'value11'); -assert.equal(t.get(-1 / Infinity), 'value11'); - -assert.isTrue(!t.has({})); - -assert.isTrue(t.has(objectKey)); -assert.isTrue(t.has(stringKey)); -assert.isTrue(t.has(numberKey)); -assert.isTrue(t.has(booleanKey)); -assert.isTrue(t.has(undefinedKey)); -assert.isTrue(t.has(nullKey)); -assert.isTrue(t.has(nanKey)); -assert.isTrue(t.has(zeroKey)); - -assert.isTrue(t.has('keykeykey')); -assert.isTrue(t.has(42.24)); -assert.isTrue(t.has(true)); -assert.isTrue(t.has(undefined)); -assert.isTrue(t.has(null)); -assert.isTrue(t.has(NaN)); -assert.isTrue(t.has(0)); -assert.isTrue(t.has(-0)); - - -// forEach -var arrKeys = []; -var arr = []; -var cnt = 0; -t.forEach(function (value, key, map) { - if (cnt === 0) { - t.set('foo', 42); - } - assert.equal(map, t); - arrKeys.push(key); - arr.push(value); - cnt++; -}); -assert.equal(cnt, 9); -t.delete('foo'); - -assertArrayEquals(arrKeys, [ - undefinedKey, - nullKey, - stringKey, - numberKey, - booleanKey, - objectKey, - nanKey, - zeroKey, - 'foo' -]); -assertArrayEquals(arr, [ - 'value8', - 'value9', - 'value5', - 'value6', - 'value7', - 'value1', - 'value10', - 'value11', - 42 -]); - -// iterator -arrKeys = []; -arr = []; -cnt = 0; - -for (var mapIterItem of t) { - if (cnt === 0) { - t.set('foo', 42); - } - var [mapIterItemKey, mapIterItemVal] = mapIterItem; - arrKeys.push(mapIterItemKey); - arr.push(mapIterItemVal); - cnt++; -} -assert.equal(cnt, 9); -t.delete('foo'); - -assertArrayEquals(arrKeys, [ undefinedKey, nullKey, stringKey, - numberKey, booleanKey, objectKey, - nanKey, zeroKey, 'foo' ]); -assertArrayEquals(arr, [ - 'value8', - 'value9', - 'value5', - 'value6', - 'value7', - 'value1', - 'value10', - 'value11', - 42 -]); - - -// .entries() -arrKeys = []; -arr = []; -cnt = 0; - -for (var mapIterItem of t.entries()) { - var [mapIterItemKey, mapIterItemVal] = mapIterItem; - arrKeys.push(mapIterItemKey); - arr.push(mapIterItemVal); - cnt++; -} -assert.equal(cnt, 8); - -assertArrayEquals(arrKeys, [ - undefinedKey, - nullKey, - stringKey, - numberKey, - booleanKey, - objectKey, - nanKey, - zeroKey -]); -assertArrayEquals(arr, [ - 'value8', - 'value9', - 'value5', - 'value6', - 'value7', - 'value1', - 'value10', - 'value11' -]); - - -// .keys() -arrKeys = []; -cnt = 0; - -for (var mapIterKey of t.keys()) { - arrKeys.push(mapIterKey); - cnt++; -} -assert.equal(cnt, 8); - -assertArrayEquals(arrKeys, [ - undefinedKey, - nullKey, - stringKey, - numberKey, - booleanKey, - objectKey, - nanKey, - zeroKey -]); - - -// .values() -arr = []; -cnt = 0; - -for (var mapIterVal of t.values()) { - arr.push(mapIterVal); - cnt++; -} -assert.equal(cnt, 8); - -assertArrayEquals(arr, [ - 'value8', - 'value9', - 'value5', - 'value6', - 'value7', - 'value1', - 'value10', - 'value11' -]); - - -var t3 = new Map([ [[],[]], [{},{}], [NaN,NaN] ]); -var deleteReturnValue; - -assert.equal(t3.size, 3); -assert.isTrue(t3.has(NaN)); -assert.isTrue(isNaN(t3.get(NaN))); -assert.equal(t3.set(NaN, NaN), t3); // test of 23.1.3.9.11 -deleteReturnValue = t3.delete(NaN); -assert.equal(t3.size, 2); -assert.isTrue(deleteReturnValue); -deleteReturnValue = t3.delete(NaN); -assert.equal(t3.size, 2); -assert.isFalse(deleteReturnValue); -t3.clear(); -assert.equal(t3.size, 0); - -assert.equal(Map.prototype[Symbol.iterator], Map.prototype.entries); diff --git a/test/fixtures/traceur/Collections/Set.js b/test/fixtures/traceur/Collections/Set.js deleted file mode 100644 index 93b19001e2..0000000000 --- a/test/fixtures/traceur/Collections/Set.js +++ /dev/null @@ -1,142 +0,0 @@ -var t = new Set(); - -var objectKey = {}; -var stringKey = 'keykeykey'; -var numberKey = 42.24; -var booleanKey = true; -var undefinedKey = undefined; -var nullKey = null; -var nanKey = NaN; -var zeroKey = 0; -var addReturnValue; - -t.add(objectKey); -t.add(stringKey); -t.add(numberKey); -t.add(booleanKey); -t.add(undefinedKey); -t.add(nullKey); -t.add(nanKey); -addReturnValue = t.add(zeroKey); - -assert.equal(t.size, 8); -assert.equal(t, addReturnValue); - -assert.isTrue(!t.has({})); - -assert.isTrue(t.has(objectKey)); -assert.isTrue(t.has(stringKey)); -assert.isTrue(t.has(numberKey)); -assert.isTrue(t.has(booleanKey)); -assert.isTrue(t.has(undefinedKey)); -assert.isTrue(t.has(nullKey)); -assert.isTrue(t.has(nanKey)); -assert.isTrue(t.has(zeroKey)); - -assert.isTrue(t.has('keykeykey')); -assert.isTrue(t.has(42.24)); -assert.isTrue(t.has(true)); -assert.isTrue(t.has(undefined)); -assert.isTrue(t.has(null)); -assert.isTrue(t.has(NaN)); -assert.isTrue(t.has(0)); -assert.isTrue(t.has(-0)); - -var expected = [ - undefinedKey, - nullKey, - stringKey, - numberKey, - booleanKey, - objectKey, - nanKey, - zeroKey -]; -expected.sort(); - - -// forEach -var arr = []; -var cnt = 0; -var context = {}; - -t.forEach(function(val, val2, obj) { - if (isNaN(val)) { - assert.isTrue(isNaN(val2)); - } else { - assert.equal(val, val2); - } - assert.equal(obj, t); - assert.equal(this, context) - arr.push(val); - cnt++; -}, context); - -assert.equal(cnt, 8); - -arr.sort(); -assertArrayEquals(arr, expected); - -// iterator -arr = []; -cnt = 0; - -for (var setIterVal of t) { - arr.push(setIterVal); - cnt++; -} -assert.equal(cnt, 8); - - -arr.sort(); -assertArrayEquals(arr, expected); - -// .values() -arr = []; -cnt = 0; - -for (var setIterVal of t.values()) { - arr.push(setIterVal); - cnt++; -} -assert.equal(cnt, 8); - - -arr.sort(); -assertArrayEquals(arr, expected); - -var t3 = new Set([[], {}, NaN]); -assert.equal(t3.size, 3); -assert.isTrue(t3.has(NaN)); -t3.delete(NaN); -assert.equal(t3.size, 2); -t3.delete(NaN); -assert.equal(t3.size, 2); -t3.clear(); -assert.equal(t3.size, 0); - -// .keys() -var t4 = new Set(); -var iter = t4.keys(); -t4.add(objectKey); -t4.add(stringKey); -t4.add(nanKey); -assert.deepEqual(iter.next(), {value: objectKey, done: false}); -assert.deepEqual(iter.next(), {value: stringKey, done: false}); -t4.delete(nanKey); -assert.deepEqual(iter.next(), {value: undefined, done: true}); - -assert.equal(Set.prototype.keys, Set.prototype.values); - -// .entries() -var t5 = new Set(); -var iter = t5.entries(); -t5.add(objectKey); -t5.add(stringKey); -t5.add(nanKey); -assert.deepEqual(iter.next(), {value: [objectKey, objectKey], done: false}); -assert.deepEqual(iter.next(), {value: [stringKey, stringKey], done: false}); -t5.delete(nanKey); -assert.deepEqual(iter.next(), {value: undefined, done: true}); - -assert.equal(Set.prototype[Symbol.iterator], Set.prototype.values); diff --git a/test/fixtures/traceur/Collections/SetWithSymbols.js b/test/fixtures/traceur/Collections/SetWithSymbols.js deleted file mode 100644 index c4618dc091..0000000000 --- a/test/fixtures/traceur/Collections/SetWithSymbols.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --symbols - -var s = new Set(['Banana', 'Orange', 'Apple', 'Mango', 'Apple', 'Apple']); -assert.equal(s.size, 4); diff --git a/test/fixtures/traceur/ComputedPropertyNames/Class.js b/test/fixtures/traceur/ComputedPropertyNames/Class.js deleted file mode 100644 index c9900c48ca..0000000000 --- a/test/fixtures/traceur/ComputedPropertyNames/Class.js +++ /dev/null @@ -1,48 +0,0 @@ -var x = '0'; -var y; - -class C { - [x]() { - return 0; - } - get [1]() { - return 1; - } - set [2](v) { - y = v; - } - *[3]() { - yield 3; - } - - static [4]() { - return 4; - } - static get [5]() { - return 5; - } - static set [6](v) { - y = v; - } - static *[7]() { - yield 7; - } -} - -var object = new C; -assert.equal(object[0](), 0); -assert.equal(object[1], 1); -object[2] = 2; -assert.equal(y, 2); -var g = object[3](); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - - -assert.equal(C[4](), 4); -assert.equal(C[5], 5); -C[6] = 6; -assert.equal(y, 6); -var g = C[7](); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js b/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js deleted file mode 100644 index 722c0fc180..0000000000 --- a/test/fixtures/traceur/ComputedPropertyNames/ComputedPropertyNames.js +++ /dev/null @@ -1,35 +0,0 @@ -var x = '0'; -var y; -var object = { - [x]: 0, - [1]: 1, - [2]() { - return 2; - }, - get [3]() { - return 3; - }, - set [4](v) { - y = v; - }, - *[5]() { - yield 5; - } -}; - -assert.equal(object[0], 0); -assert.equal(object[1], 1); -assert.equal(object[2](), 2); -object[4] = 4; -assert.equal(y, 4); -var g = object[5](); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - -var object2 = { - __proto__: object, - [6]: 6 -}; - -assert.equal(object2[6], 6); -assert.equal(object2[0], 0); diff --git a/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js b/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js deleted file mode 100644 index 099c8907e3..0000000000 --- a/test/fixtures/traceur/ComputedPropertyNames/Error_Disabled.js +++ /dev/null @@ -1,6 +0,0 @@ -// Options: --computed-property-names=false -// Error: :5:3: Unexpected token [ - -var object = { - [1]: 2 -}; diff --git a/test/fixtures/traceur/ComputedPropertyNames/Symbol.js b/test/fixtures/traceur/ComputedPropertyNames/Symbol.js deleted file mode 100644 index c28f817145..0000000000 --- a/test/fixtures/traceur/ComputedPropertyNames/Symbol.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --symbols - -var s = Symbol(); - -var object = { - [s]: 42 -}; - -assert.equal(object[s], 42); diff --git a/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js b/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js deleted file mode 100644 index 039a0fc438..0000000000 --- a/test/fixtures/traceur/DefaultParameters/Error_SetAccessor.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: :5:15: Unexpected token = - -var object = { - // Default parameters are not allowed on setters. - set x(value = 42) {} -} \ No newline at end of file diff --git a/test/fixtures/traceur/DefaultParameters/Simple.js b/test/fixtures/traceur/DefaultParameters/Simple.js deleted file mode 100644 index 0f2b26b2c6..0000000000 --- a/test/fixtures/traceur/DefaultParameters/Simple.js +++ /dev/null @@ -1,45 +0,0 @@ -function f(a = 1, b = 2) { - return a + b; -} - -assert.equal(0, f.length); -assert.equal(3, f()); -assert.equal(6, f(4)); -assert.equal(24, f(8, 16)); - -assert.equal(3, f(undefined, undefined)); -assert.equal(33, f(undefined, 32)); - -function g(a, b = a) { - return a + b; -} - -assert.equal(1, g.length); -assert.equal(4, g(2)); -assert.equal(4, g(2, undefined)); -assert.equal(5, g(2, 3)); - -function C(obj = this) { - this.obj = obj; -} - -assert.equal(0, C.length); - -var c = new C; -assert.equal(c, c.obj); - -var c2 = new C(undefined); -assert.equal(c2, c2.obj); - -var c3 = new C(42); -assert.equal(42, c3.obj); - -function h(a = 1, b) { - return {a: a, b: b}; -} - -assert.equal(1, h().a); -assert.equal(2, h(2).a); -assert.isUndefined(h().b); -assert.isUndefined(h(2).b); -assert.equal(4, h(3, 4).b); diff --git a/test/fixtures/traceur/Destructuring/Arguments.js b/test/fixtures/traceur/Destructuring/Arguments.js deleted file mode 100644 index 7046316663..0000000000 --- a/test/fixtures/traceur/Destructuring/Arguments.js +++ /dev/null @@ -1,8 +0,0 @@ -function destructureArguments(x, y) { - [arguments[0], [arguments[1]]] = [1, [2]] - return x + y; -} - -// ---------------------------------------------------------------------------- - -assert.equal(3, destructureArguments(1, 2)); diff --git a/test/fixtures/traceur/Destructuring/Array.js b/test/fixtures/traceur/Destructuring/Array.js deleted file mode 100644 index 6f6d979e59..0000000000 --- a/test/fixtures/traceur/Destructuring/Array.js +++ /dev/null @@ -1,25 +0,0 @@ -function destructArray() { - var a, b, c, d; - [a, [b], c, d] = ['hello', [',', 'junk'], ['world']]; - return { - a: a, - b: b, - c: c, - d: d - }; -} - -// ---------------------------------------------------------------------------- - -var result = destructArray(); -assert.equal('hello', result.a); -assert.equal(',', result.b); -assertArrayEquals(['world'], result.c); -assert.isUndefined(result.d); - -function testNested() { - var a; - [[a] = ['b']] = []; - return a; -} -assert.equal(testNested(), 'b'); diff --git a/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js b/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js deleted file mode 100644 index 89269b0000..0000000000 --- a/test/fixtures/traceur/Destructuring/ArrayPatternWithCoverInitializedName.js +++ /dev/null @@ -1,5 +0,0 @@ -var x, y; -[x, {y = 1}] = [0, {}]; - -assert.equal(x, 0); -assert.equal(y, 1); diff --git a/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js b/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js deleted file mode 100644 index 6a97645aae..0000000000 --- a/test/fixtures/traceur/Destructuring/ArrayPatternWithInitializer.js +++ /dev/null @@ -1,5 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/969 - -var x; -[x = 1] = []; -assert.equal(x, 1); diff --git a/test/fixtures/traceur/Destructuring/ArrowFunction.js b/test/fixtures/traceur/Destructuring/ArrowFunction.js deleted file mode 100644 index bbc7a75b66..0000000000 --- a/test/fixtures/traceur/Destructuring/ArrowFunction.js +++ /dev/null @@ -1,17 +0,0 @@ -var f = ({x}) => x; -assert.equal(42, f({x: 42})); - -var g = ({x: y, z: [a, b, ...c]}) => [y, a, b, c]; -assertArrayEquals([1, 2, 3, [4, 5]], g({x: 1, z: [2, 3, 4, 5]})); - -var h = ([a, {b: c, d}]) => [a, c, d]; -assertArrayEquals([1, 2, 3], h([1, {b: 2, d: 3}])); - -var i = ([, a]) => a; -assert.equal(i([0, 1]), 1); - -var j = ([, [, a]]) => a; -assert.equal(j([0, [1, 2]]), 2); - -var k = ([a] = new String('b')) => a; -assert.equal(k(), 'b'); diff --git a/test/fixtures/traceur/Destructuring/Catch.js b/test/fixtures/traceur/Destructuring/Catch.js deleted file mode 100644 index 6b110c025f..0000000000 --- a/test/fixtures/traceur/Destructuring/Catch.js +++ /dev/null @@ -1,30 +0,0 @@ -var head = 'head'; -var tail = 'tail'; -var name = 'name'; - -function MyError(s) { - this.message = new String(s); - this.name = 'Error'; -} - -try { - throw new MyError('abc'); -} catch ({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); -} - -assert.equal('head', head); -assert.equal('tail', tail); -assert.equal('name', name); - -assert.throws(() => { - try { - throw [0]; - } catch ([innerX]) { - - } - - innerX; -}, ReferenceError); diff --git a/test/fixtures/traceur/Destructuring/Class.js b/test/fixtures/traceur/Destructuring/Class.js deleted file mode 100644 index c699d39c4c..0000000000 --- a/test/fixtures/traceur/Destructuring/Class.js +++ /dev/null @@ -1,28 +0,0 @@ -function MyError(s) { - this.message = new String(s); - this.name = 'Error'; -} - -class C { - constructor({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); - } - - method({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); - } - - set x({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); - } -} - -var c = new C(new MyError('abc')); -c.method(new MyError('abc')); -c.x = new MyError('abc'); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializedName.js b/test/fixtures/traceur/Destructuring/CoverInitializedName.js deleted file mode 100644 index 1b91bd3a8d..0000000000 --- a/test/fixtures/traceur/Destructuring/CoverInitializedName.js +++ /dev/null @@ -1,4 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/183 - -var f = ({x = 42}) => x; -assert.equal(f({}), 42); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializer.js b/test/fixtures/traceur/Destructuring/CoverInitializer.js deleted file mode 100644 index ed37f7257d..0000000000 --- a/test/fixtures/traceur/Destructuring/CoverInitializer.js +++ /dev/null @@ -1,9 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/1015 - -var x, y; -({x = 1, y = 2} = {}); -assert.equal(x, 1); -assert.equal(y, 2); - -({x: {x = 3}} = {x: {}}); -assert.equal(x, 3); diff --git a/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js b/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js deleted file mode 100644 index eb0a9781d3..0000000000 --- a/test/fixtures/traceur/Destructuring/CoverInitializerInForOf.js +++ /dev/null @@ -1,9 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/836 - -var count = 0; -for ({a = 0} of [{}]) { - count++; - assert.equal(a, 0); -} - -assert.equal(count, 1); diff --git a/test/fixtures/traceur/Destructuring/DefaultParams.js b/test/fixtures/traceur/Destructuring/DefaultParams.js deleted file mode 100644 index e6a1670b75..0000000000 --- a/test/fixtures/traceur/Destructuring/DefaultParams.js +++ /dev/null @@ -1,5 +0,0 @@ -function f([x] = [1], {y} = {y: 2}) { - return x + y; -} - -assert.equal(3, f()); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/Empty.js b/test/fixtures/traceur/Destructuring/Empty.js deleted file mode 100644 index 275534362b..0000000000 --- a/test/fixtures/traceur/Destructuring/Empty.js +++ /dev/null @@ -1,32 +0,0 @@ -var calls = 0; - -var {} = Object(calls++); -assert.equal(calls, 1); - -assert.throw(function() { - var [] = Object(calls++); -}, TypeError); -assert.equal(calls, 2); - -assert.throw(function() { - var {} = Object(calls++), [] = Object(calls++); -}); -assert.equal(calls, 4); - - -/////////////////////// - -calls = 0; - -({} = Object(calls++)); -assert.equal(calls, 1); - -assert.throw(function() { - [] = Object(calls++); -}, TypeError); -assert.equal(calls, 2); - -assert.throw(function() { - ({} = Object(calls++), [] = Object(calls++)); -}, TypeError); -assert.equal(calls, 4); diff --git a/test/fixtures/traceur/Destructuring/Error_Disabled.js b/test/fixtures/traceur/Destructuring/Error_Disabled.js deleted file mode 100644 index f177fe43b3..0000000000 --- a/test/fixtures/traceur/Destructuring/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --destructuring=false -// Error: 4:5: Unexpected token [ - -var [x, y] = [0, 1]; diff --git a/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js b/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js deleted file mode 100644 index ea9c29c5f7..0000000000 --- a/test/fixtures/traceur/Destructuring/Error_ForInWithInitializer.js +++ /dev/null @@ -1,4 +0,0 @@ -// Error: :3:19: Unexpected token in - -for (var {k} = {} in {}) { -} diff --git a/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js b/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js deleted file mode 100644 index 6a15645310..0000000000 --- a/test/fixtures/traceur/Destructuring/Error_ForOfWithInitializer.js +++ /dev/null @@ -1,4 +0,0 @@ -// Error: :3:19: Unexpected token of - -for (var {k} = {} of []) { -} diff --git a/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js b/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js deleted file mode 100644 index c7eca5a9d6..0000000000 --- a/test/fixtures/traceur/Destructuring/Error_InvalidArrowRest.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:16: Unexpected token , - -var f = ([...xs, ys]) => xs; diff --git a/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js b/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js deleted file mode 100644 index 441d53c8d1..0000000000 --- a/test/fixtures/traceur/Destructuring/Error_InvalidCoverInitializedName.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:5: Unexpected token = - -({x = 42}); diff --git a/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js b/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js deleted file mode 100644 index 9027f27207..0000000000 --- a/test/fixtures/traceur/Destructuring/EvaluatesToRvalue.js +++ /dev/null @@ -1,9 +0,0 @@ -function destructEvaluatesToRvalue() { - var a; - return [a] = [1, 2, 3]; -} - -// ---------------------------------------------------------------------------- - -var result = destructEvaluatesToRvalue(); -assertArrayEquals([1, 2, 3], result); diff --git a/test/fixtures/traceur/Destructuring/EvaluationOrder.js b/test/fixtures/traceur/Destructuring/EvaluationOrder.js deleted file mode 100644 index 50df75e13e..0000000000 --- a/test/fixtures/traceur/Destructuring/EvaluationOrder.js +++ /dev/null @@ -1,10 +0,0 @@ -function destructEvaluationOrder() { - var a; - [a, a, a] = [1, 2, 3, 4]; - return a; -} - -// ---------------------------------------------------------------------------- - -var result = destructEvaluationOrder(); -assert.equal(3, result); diff --git a/test/fixtures/traceur/Destructuring/ForInLoop.js b/test/fixtures/traceur/Destructuring/ForInLoop.js deleted file mode 100644 index 42aadf4239..0000000000 --- a/test/fixtures/traceur/Destructuring/ForInLoop.js +++ /dev/null @@ -1,28 +0,0 @@ -// Options: --block-binding - -var object = { - abc: 0, // Keep all the keys at length 3. - def: 1 -}; - -var expectedHeads = ['a', 'd']; -var expectedTails = [['b', 'c'], ['e','f']]; -var i = 0; -for (var [head, ...tail] in object) { - assert.equal(expectedHeads[i], head); - assertArrayEquals(expectedTails[i], tail); - i++; -} -assert.equal(2, i); - -{ - let x = 42; - for (let {length: x} in object) { - assert.equal(3, x); - } - assert.equal(42, x); -} - -var k; -for ({length: k} in {abc: 3}) // No block - assert.equal(3, k); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/ForOfLoop.js b/test/fixtures/traceur/Destructuring/ForOfLoop.js deleted file mode 100644 index cc9260c166..0000000000 --- a/test/fixtures/traceur/Destructuring/ForOfLoop.js +++ /dev/null @@ -1,28 +0,0 @@ -// Options: --block-binding - -function* gen() { - yield new String('abc'); - yield new String('def'); -} - -var expectedHeads = ['a', 'd']; -var expectedTails = [['b', 'c'], ['e','f']]; -var i = 0; -for (var [head, ...tail] of gen()) { - assert.equal(expectedHeads[i], head); - assertArrayEquals(expectedTails[i], tail); - i++; -} -assert.equal(2, i); - -{ - let x = 42; - for (let {length: x} of gen()) { - assert.equal(3, x); - } - assert.equal(42, x); -} - -var k; -for ({length: k} of [new String('abc')]) // No block - assert.equal(3, k); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js b/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js deleted file mode 100644 index 9af424c550..0000000000 --- a/test/fixtures/traceur/Destructuring/FunctionArrayPattern.js +++ /dev/null @@ -1,14 +0,0 @@ -function f([a, b, ...c], d) { - return [a, b, c, d]; -} -assertArrayEquals([1, 2, [3, 4], 5], f([1, 2, 3, 4], 5)); - -function g([, a]) { - return a; -} -assert.equal(g([0, 1]), 1); - -function h([, [, a]]) { - return a; -} -assert.equal(h([0, [1, 2]]), 2); diff --git a/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js b/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js deleted file mode 100644 index 612ae47dd2..0000000000 --- a/test/fixtures/traceur/Destructuring/FunctionObjectPattern.js +++ /dev/null @@ -1,5 +0,0 @@ -function f({a, b: {c}}, d) { - return [a, c, d]; -} - -assertArrayEquals([1, 2, 3], f({a: 1, b: {c: 2}}, 3)); \ No newline at end of file diff --git a/test/fixtures/traceur/Destructuring/Initializer.js b/test/fixtures/traceur/Destructuring/Initializer.js deleted file mode 100644 index ce8a9caa97..0000000000 --- a/test/fixtures/traceur/Destructuring/Initializer.js +++ /dev/null @@ -1,74 +0,0 @@ -var [a = 0] = []; -assert.equal(0, a); - -var {b = 1} = {}; -assert.equal(1, b); - -var {c = 2} = {c: 3}; -assert.equal(3, c); - -var {d = 4} = Object.create({d: 5}); -assert.equal(5, d); - -var {e: f = 6} = {}; -assert.equal(6, f); - -var {g: h = 7} = {h: 8}; -assert.equal(7, h); - -var [, , , i = 9] = [10, 11, 12]; -assert.equal(9, i); - -function j({x = 42}, expected) { - assert.equal(expected, x); -} - -j({}, 42); -j({x: 43}, 43); - -var count = 0; -var [k = 42] = (count++, [21]); -assert.equal(21, k); -assert.equal(1, count); - -var {x = 1} = {x: undefined}; -assert.equal(x, 1); - -var {'x': x = 2} = {x: undefined}; -assert.equal(x, 2); - -var {['x']: x = 3} = {x: undefined}; -assert.equal(x, 3); - -var [y = 4] = [undefined]; -assert.equal(y, 4); - - -var xCount = 0; -var yCount = 0; -var zCount = 0; - -var object = { - get x() { - xCount++; - return { - get y() { - yCount++; - return { - get z() { - zCount++; - return undefined; - } - }; - } - }; - } -}; - -var {y: {z = 5, w = 6}, v = 7} = object.x; -assert.equal(z, 5); -assert.equal(w, 6); -assert.equal(v, 7); -assert.equal(xCount, 1); -assert.equal(yCount, 1); -assert.equal(zCount, 1); diff --git a/test/fixtures/traceur/Destructuring/InitializerObject.js b/test/fixtures/traceur/Destructuring/InitializerObject.js deleted file mode 100644 index 946b0e2a2d..0000000000 --- a/test/fixtures/traceur/Destructuring/InitializerObject.js +++ /dev/null @@ -1,12 +0,0 @@ -var x, z; - -({x = {y: 1}} = {}); -assert.deepEqual(x, {y: 1}); - -({x = {y: {z = 2} = {}}} = {}); -assert.equal(z, 2); -assert.deepEqual(x, {y: {}}); - -({x = {y: {z = 3} = {z: 4}}} = {}); -assert.equal(z, 4); -assert.deepEqual(x, {y: {z: 4}}); diff --git a/test/fixtures/traceur/Destructuring/Method.js b/test/fixtures/traceur/Destructuring/Method.js deleted file mode 100644 index 604bdc09fb..0000000000 --- a/test/fixtures/traceur/Destructuring/Method.js +++ /dev/null @@ -1,14 +0,0 @@ -function MyError(s) { - this.message = new String(s); - this.name = 'Error'; -} - -var object = { - method({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); - } -}; - -object.method(new MyError('abc')); diff --git a/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js b/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js deleted file mode 100644 index f980a8fbd8..0000000000 --- a/test/fixtures/traceur/Destructuring/MultipleCoverInitializersInArrowFunction.js +++ /dev/null @@ -1,4 +0,0 @@ -// https://github.com/google/traceur-compiler/issues/838 - -var f = ({a = 0}, {b = 1}) => ({a, b}); -assert.deepEqual(f({}, {}), {a: 0, b: 1}); diff --git a/test/fixtures/traceur/Destructuring/NestedScopeArguments.js b/test/fixtures/traceur/Destructuring/NestedScopeArguments.js deleted file mode 100644 index 692a1bcfd4..0000000000 --- a/test/fixtures/traceur/Destructuring/NestedScopeArguments.js +++ /dev/null @@ -1,11 +0,0 @@ -// Destructuring bind alpha-renames 'arguments'; this ensures that -// renaming doesn't rename in nested scopes. -function destructNestedScopeArguments(x) { - [(function () { return arguments[1]; })(null, x)[0]] = [42]; -} - -// ---------------------------------------------------------------------------- - -var result = []; -destructNestedScopeArguments(result); -assert.equal(42, result[0]); diff --git a/test/fixtures/traceur/Destructuring/Object.js b/test/fixtures/traceur/Destructuring/Object.js deleted file mode 100644 index 562f24d4e6..0000000000 --- a/test/fixtures/traceur/Destructuring/Object.js +++ /dev/null @@ -1,42 +0,0 @@ -function destructObject() { - var a, b, c, d; - ({a, x: b, y: {c, z: [,d]}} = { - a: 7, // field with shorthand a => a: a syntax - x: 8, // typical syntax - y: { // nested object destructuring - // missing binding 'c' - z: [10, 11, 12] // nested array destructuring - } - }); - return { - a: a, - b: b, - c: c, - d: d - }; -} - -// ---------------------------------------------------------------------------- - -var result = destructObject(); -assert.equal(7, result.a); -assert.equal(8, result.b); -assert.isUndefined(result.c); -assert.equal(11, result.d); - -var {0: x, '1': y, length: z} = [0, 1, 2, 3]; -assert.equal(0, x); -assert.equal(1, y); -assert.equal(4, z); - -var {x: y,} = {x: 5}; -assert.equal(5, y); - -var x; -({x = 6} = {}); -assert.equal(x, 6); - -var z; -({x: {y = 7}, z = 8} = {x: {}}); -assert.equal(y, 7); -assert.equal(z, 8); diff --git a/test/fixtures/traceur/Destructuring/Rest.js b/test/fixtures/traceur/Destructuring/Rest.js deleted file mode 100644 index 6000165cf4..0000000000 --- a/test/fixtures/traceur/Destructuring/Rest.js +++ /dev/null @@ -1,19 +0,0 @@ -function destructRest() { - var a, b, c, d; - [...a] = [1, 2, 3]; - [b, ...c] = [1, 2, 3]; - [,,, ...d] = [1, 2, 3]; - return {a: a, b: b, c: c, d: d}; -} - -var result = destructRest(); -assertArrayEquals([1, 2, 3], result.a); -assert.equal(1, result.b); -assertArrayEquals([2, 3], result.c); -assertArrayEquals([], result.d); - -assert.throw(function() { - var e; - // No iterator. - [...e] = {x: 'boom'}; -}, TypeError); diff --git a/test/fixtures/traceur/Destructuring/RestIterator.js b/test/fixtures/traceur/Destructuring/RestIterator.js deleted file mode 100644 index 2963e51ed2..0000000000 --- a/test/fixtures/traceur/Destructuring/RestIterator.js +++ /dev/null @@ -1,45 +0,0 @@ -(function() { - var i; - - function* f() { - for (i = 0; i < 8; i++) { - yield i; - } - } - var x, x2, xs; - [, x, , x2, , ...xs] = f(); - assert.equal(1, x); - assert.equal(3, x2); - assertArrayEquals([5, 6, 7], xs); - - [] = f(); - assert.equal(8, i); // Since we never call next(). - - x = -1; - [x] = f(); - assert.equal(0, x); - assert.equal(0, i); // Since we called next once. -})(); - -// Same but with VariableDeclarations instead of AssignmenExpressions. -(function() { - var i; - - function* f() { - for (i = 0; i < 8; i++) { - yield i; - } - } - - var [, x, , x2, , ...xs] = f(); - assert.equal(1, x); - assert.equal(3, x2); - assertArrayEquals([5, 6, 7], xs); - - var [] = f(); - assert.equal(8, i); // Since we never call next(). - - var [y] = f(); - assert.equal(0, y); - assert.equal(0, i); // Since we called next once. -})(); diff --git a/test/fixtures/traceur/Destructuring/ScopeThis.js b/test/fixtures/traceur/Destructuring/ScopeThis.js deleted file mode 100644 index c2f8c80087..0000000000 --- a/test/fixtures/traceur/Destructuring/ScopeThis.js +++ /dev/null @@ -1,19 +0,0 @@ -function destructScopeThis() { - var x; - var o = { - f: function() { - [this.x] = [1]; - } - }; - o.f(); - return { - x: x, - o_x: o.x - }; -} - -// ---------------------------------------------------------------------------- - -var result = destructScopeThis(); -assert.isUndefined(result.x); -assert.equal(1, result.o_x); diff --git a/test/fixtures/traceur/Destructuring/SetAccessor.js b/test/fixtures/traceur/Destructuring/SetAccessor.js deleted file mode 100644 index 2273925139..0000000000 --- a/test/fixtures/traceur/Destructuring/SetAccessor.js +++ /dev/null @@ -1,14 +0,0 @@ -function MyError(s) { - this.message = new String(s); - this.name = 'Error'; -} - -var object = { - set x({message: [head, ...tail], name}) { - assert.equal('a', head); - assertArrayEquals(['b', 'c'], tail); - assert.equal('Error', name); - } -}; - -object.x = new MyError('abc'); diff --git a/test/fixtures/traceur/Destructuring/Simplify.js b/test/fixtures/traceur/Destructuring/Simplify.js deleted file mode 100644 index e20d86c90d..0000000000 --- a/test/fixtures/traceur/Destructuring/Simplify.js +++ /dev/null @@ -1,168 +0,0 @@ -// Options: --symbols=false -// -// It probably doesn't make a difference to the results, but the private name -// transformation turns array lookup and member access into function calls, and -// I'd like to keep that from being a confounding factor. - -'use strict'; - -var a, b, c, x, y, z; - -// ---------------------------------------------------------------------------- - -function checkA() { - assert.equal(1, a); - assert.isUndefined(b); - assert.isUndefined(c); - a = b = c = undefined; -} - -function checkAb() { - assert.equal(1, a); - assert.equal(2, b); - assert.isUndefined(c); - a = b = c = undefined; -} - -function checkAbc() { - assert.equal(1, a); - assert.equal(2, b); - assert.equal(3, c); - a = b = c = undefined; -} - -// ---------------------------------------------------------------------------- - -// misc single assignment -var [a] = 42 === 42 ? [1] : [42]; -checkA(); -[a] = 42 === 42 ? [1] : [42]; -checkA(); - -var [a] = null || [1]; -checkA(); -[a] = null || [1]; -checkA(); - -// ParseTreeType.MEMBER_EXPRESSION -x = {x: {a: 1, b: 2, c: 3}}; -var {a, b, c} = x.x; -checkAbc(); - -var {a} = x.x; -checkA(); - -x = {x: [1, 2, 3]}; -var [a] = x.x; -checkA(); -[a] = x.x; -checkA(); - -// ParseTreeType.MEMBER_LOOKUP_EXPRESSION -x = [[1,2,3]]; -var [a] = x[0]; -checkA(); -[a] = x[0]; -checkA(); -var [a, b, c] = x[0]; -checkAbc(); -[a, b, c] = x[0]; -checkAbc(); - - -// ParseTreeType.PAREN_EXPRESSION -var [a] = 42 === 42 ? [1] : [42]; -checkA(); -[a] = 42 === 42 ? [1] : [42]; -checkA(); - -var [a] = null || [1]; -checkA(); -[a] = null || [1]; -checkA(); - -// ParseTreeType.ARRAY_LITERAL_EXPRESSION -var [a] = [1, 2, 3]; -checkA(); -[a] = [1, 2, 3]; -checkA(); -var [[a]] = [[1], 2, 3]; -checkA(); -[[a]] = [[1], 2, 3]; -checkA(); - -// ParseTreeType.OBJECT_LITERAL_EXPRESSION -var {a} = {a: 1, b: 2, c: 3}; -checkA(); -var {x: {a}} = {x: {a: 1, b: 2}, c: 3}; -checkA(); - -// ParseTreeType.CALL_EXPRESSION -x = function() { - return [1, 2, 3]; -}; -var [a, b, c] = x(); -checkAbc(); -[a, b, c] = x(); -checkAbc(); - -x = function() { - return {a: 1, b: 2, c: 3}; -}; -var {a, b, c} = x(); -checkAbc(); -// ParseTreeType.IDENTIFIER_EXPRESSION - -// arrays -x = [1, 2, 3]; -var [a] = x; -checkA(); -[a] = x; -checkA(); - -x = [[1], 2, 3]; -var [[a]] = x; -checkA(); -[[a]] = x; -checkA(); - -x = [[1, 2, 3]]; -var [[a, b, c]] = x; -checkAbc(); -[[a, b, c]] = x; -checkAbc(); - -x = [1, [2, 3]]; -var [ a, [b, c] ] = x; -checkAbc(); -[ a, [b, c] ] = x; -checkAbc(); - -x = [[1, 2], 3]; -var [[a, b], c] = x; -checkAbc(); -[[a, b], c] = x; -checkAbc(); - -x = [[1], 2, [3]]; -var [[a], b, [c]] = x; -checkAbc(); -[[a], b, [c]] = x; -checkAbc(); - -// objects -x = {a: 1, b: 2, c: 3}; -var {a, b, c} = x; -checkAbc(); - -x = {a: 1, b: 2, c: 3}; -var {a} = x; -checkA(); - -x = {a: 1, b: 2, c: 3}; -var {a, b, c} = x; -checkAbc(); - -x = {x: {a: 1, b: 2}, c: 3}; -var {x: {a}} = x; -checkA(); diff --git a/test/fixtures/traceur/Destructuring/StrangeProperties.js b/test/fixtures/traceur/Destructuring/StrangeProperties.js deleted file mode 100644 index 487cbd055d..0000000000 --- a/test/fixtures/traceur/Destructuring/StrangeProperties.js +++ /dev/null @@ -1,17 +0,0 @@ -var x, y; - -({if: x = 1, else: y} = {else: 2}); -assert.equal(x, 1); -assert.equal(y, 2); - -({'': x = 3, ' ': y} = {' ': 4}); -assert.equal(x, 3); -assert.equal(y, 4); - -({true: x = 5, false: y} = {false: 6}); -assert.equal(x, 5); -assert.equal(y, 6); - -({0: x = 7, 1: y} = {1: 8}); -assert.equal(x, 7); -assert.equal(y, 8); diff --git a/test/fixtures/traceur/Destructuring/TopLevel.js b/test/fixtures/traceur/Destructuring/TopLevel.js deleted file mode 100644 index 6409d45b91..0000000000 --- a/test/fixtures/traceur/Destructuring/TopLevel.js +++ /dev/null @@ -1,9 +0,0 @@ -var a, b, c, d; -[a, [b, c], d] = ['hello', [',', 'junk'], ['world']]; - -// ---------------------------------------------------------------------------- - -assert.equal('hello', a); -assert.equal(',', b); -assert.equal('junk', c); -assertArrayEquals(['world'], d); diff --git a/test/fixtures/traceur/Destructuring/ValueTypes.js b/test/fixtures/traceur/Destructuring/ValueTypes.js deleted file mode 100644 index b76d12cc6c..0000000000 --- a/test/fixtures/traceur/Destructuring/ValueTypes.js +++ /dev/null @@ -1,58 +0,0 @@ -(function() { - var {toFixed} = 42; - assert.equal(Number.prototype.toFixed, toFixed); - - var {toString, toLocaleString} = 42; - assert.equal(Number.prototype.toString, toString); - assert.equal(Number.prototype.toLocaleString, toLocaleString); - - var [x] = 'string'; - assert.equal('s', x); - - var [x, y] = 'string'; - assert.equal('s', x); - assert.equal('t', y); - - var [x, ...xs] = 'string'; - assert.equal('s', x); - assert.deepEqual(['t', 'r', 'i', 'n', 'g'], xs); - - var {toFixed: {length}} = 42; - assert.equal(1, length); - - var {x: {toString}} = {x: true}; - assert.equal(Boolean.prototype.toString, toString); - - var [[x]] = ['string']; - assert.equal('s', x); - - // Same with assignment expression - - ({toFixed} = 42); - assert.equal(Number.prototype.toFixed, toFixed); - - ({toString, toLocaleString} = 42); - assert.equal(Number.prototype.toString, toString); - assert.equal(Number.prototype.toLocaleString, toLocaleString); - - [x] = 'string'; - assert.equal('s', x); - - [x, y] = 'string'; - assert.equal('s', x); - assert.equal('t', y); - - [x, ...xs] = 'string'; - assert.equal('s', x); - assert.deepEqual(['t', 'r', 'i', 'n', 'g'], xs); - - ({toFixed: {length}} = 42); - assert.equal(1, length); - - ({x: {toString}} = {x: true}); - assert.equal(Boolean.prototype.toString, toString); - - [[x]] = ['string']; - assert.equal('s', x); - -})(); diff --git a/test/fixtures/traceur/Destructuring/VarDecl.js b/test/fixtures/traceur/Destructuring/VarDecl.js deleted file mode 100644 index ec77aff801..0000000000 --- a/test/fixtures/traceur/Destructuring/VarDecl.js +++ /dev/null @@ -1,27 +0,0 @@ -// Options: --block-binding - -function destructVarDecl() { - // Const; and an array inside an object literal inside an array. - const a = 0, [b, {c, x: [d]}] = [1, {c: 2, x: [3]}]; - - // Now an object literal inside an array inside an object literal. - var {x: [{e}, f], g} = {x: [{e:4}, 5], g: 6}; - - // Two patterns in one var. - var {h} = {h: 7}, {i} = {i: 8}; - - return { a: a, b: b, c: c, d: d, e: e, f: f, g: g, h: h, i: i }; -} - -// ---------------------------------------------------------------------------- - -var result = destructVarDecl(); -assert.equal(0, result.a); -assert.equal(1, result.b); -assert.equal(2, result.c); -assert.equal(3, result.d); -assert.equal(4, result.e); -assert.equal(5, result.f); -assert.equal(6, result.g); -assert.equal(7, result.h); -assert.equal(8, result.i); diff --git a/test/fixtures/traceur/Exponentiation/Basics.js b/test/fixtures/traceur/Exponentiation/Basics.js deleted file mode 100644 index 42ad3e7b12..0000000000 --- a/test/fixtures/traceur/Exponentiation/Basics.js +++ /dev/null @@ -1,25 +0,0 @@ -// Options: --exponentiation - -(function() { - assert.equal(8, 2 ** 3); - assert.equal(24, 3 * 2 ** 3); - var x = 2; - assert.equal(8, 2 ** ++x); - assert.equal(1, 2 ** -1 * 2); - - var calls = 0; - var q = {q: 3}; - var o = { - get p() { - calls++; - return q; - } - }; - - o.p.q **= 2; - assert.equal(1, calls); - assert.equal(9, o.p.q); - - assert.equal(512, 2 ** (3 ** 2)); - assert.equal(512, 2 ** 3 ** 2); -})(); diff --git a/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js b/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js deleted file mode 100644 index 9207a2299e..0000000000 --- a/test/fixtures/traceur/GeneratorComprehension/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --generator-comprehension=false -// Error: :4:13: Unexpected token for - -var iter = (for (x of [0, 1, 2, 3, 4]) x); diff --git a/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js b/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js deleted file mode 100644 index 66c7e28002..0000000000 --- a/test/fixtures/traceur/GeneratorComprehension/Error_NotDefined.js +++ /dev/null @@ -1,5 +0,0 @@ -// Options: --generator-comprehension --free-variable-checker -// Error: :5:1: notDefined is not defined - -var iter = (for (notDefined of [0]) notDefined); -notDefined; diff --git a/test/fixtures/traceur/GeneratorComprehension/Simple.js b/test/fixtures/traceur/GeneratorComprehension/Simple.js deleted file mode 100644 index ffeae46555..0000000000 --- a/test/fixtures/traceur/GeneratorComprehension/Simple.js +++ /dev/null @@ -1,40 +0,0 @@ -// Options: --generator-comprehension - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -function* range() { - for (var i = 0; i < 5; i++) { - yield i; - } -} - -var iter = (for (x of [0, 1, 2, 3, 4]) x); -assert.equal('01234', accumulate(iter)); - -var iter2 = (for (x of [0, 1, 2, 3, 4]) for (y of [0, 1, 2, 3, 4]) x + '' + y ); -assert.equal('00010203041011121314202122232430313233344041424344', - accumulate(iter2)); - -var iter3 = ( - for (x of [0, 1, 2, 3, 4]) - for (y of range()) - if (x === y) - x + '' + y); -assert.equal('0011223344', accumulate(iter3)); - -// Ensure this works as expression statement -(for (testVar of []) testVar); - -var iter4 = ( - for (x of range()) - if (x % 2 === 0) - for (y of range()) - if (y % 2 === 1) - x + '' + y); -assert.equal('010321234143', accumulate(iter4)); diff --git a/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js b/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js deleted file mode 100644 index 5442161373..0000000000 --- a/test/fixtures/traceur/GeneratorComprehension/Skip_Closure.js +++ /dev/null @@ -1,23 +0,0 @@ -// Options: --generator-comprehension -// Skip. The sugaring uses var instead of let which leads to wrong closure. - -var iter = (for (x of [0, 1]) for (y of [2, 3]) () => [x, y] ); - -assert.isTrue(iter.moveNext()); -var f1 = iter.current; - -assert.isTrue(iter.moveNext()); -var f2 = iter.current; - -assert.isTrue(iter.moveNext()); -var f3 = iter.current; - -assert.isTrue(iter.moveNext()); -var f4 = iter.current; - -assert.isFalse(iter.moveNext()); - -assertArrayEquals([0, 2], f1()); -assertArrayEquals([0, 3], f2()); -assertArrayEquals([1, 2], f3()); -assertArrayEquals([1, 3], f4()); \ No newline at end of file diff --git a/test/fixtures/traceur/Math/acosh.module.js b/test/fixtures/traceur/Math/acosh.module.js deleted file mode 100644 index 716e3c02bc..0000000000 --- a/test/fixtures/traceur/Math/acosh.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {acosh} from '../../../src/runtime/polyfills/Math.js'; - -function testAcosh(acosh) { - assert.equal(0, acosh(1)); -} - -testAcosh(acosh); -testAcosh(Math.acosh); diff --git a/test/fixtures/traceur/Math/asinh.module.js b/test/fixtures/traceur/Math/asinh.module.js deleted file mode 100644 index 2590ef121d..0000000000 --- a/test/fixtures/traceur/Math/asinh.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {asinh} from '../../../src/runtime/polyfills/Math.js'; - -function testAsinh(asinh) { - assert.equal(0, asinh(0)); -} - -testAsinh(asinh); -testAsinh(Math.asinh); diff --git a/test/fixtures/traceur/Math/atanh.module.js b/test/fixtures/traceur/Math/atanh.module.js deleted file mode 100644 index 0a96869e6b..0000000000 --- a/test/fixtures/traceur/Math/atanh.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {atanh} from '../../../src/runtime/polyfills/Math.js'; - -function testAtanh(atanh) { - assert.equal(0, atanh(0)); -} - -testAtanh(atanh); -testAtanh(Math.atanh); diff --git a/test/fixtures/traceur/Math/cbrt.module.js b/test/fixtures/traceur/Math/cbrt.module.js deleted file mode 100644 index 726ff94e2a..0000000000 --- a/test/fixtures/traceur/Math/cbrt.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {cbrt} from '../../../src/runtime/polyfills/Math.js'; - -function testCbrt(cbrt) { - assert.equal(0, cbrt(0)); -} - -testCbrt(cbrt); -testCbrt(Math.cbrt); diff --git a/test/fixtures/traceur/Math/clz32.module.js b/test/fixtures/traceur/Math/clz32.module.js deleted file mode 100644 index 2d21aaeaa9..0000000000 --- a/test/fixtures/traceur/Math/clz32.module.js +++ /dev/null @@ -1,9 +0,0 @@ -import {clz32} from '../../../src/runtime/polyfills/Math.js'; - -function testClz32(clz32) { - [NaN, Infinity, -Infinity, 0, -0, 'abc', 'Infinity', '-Infinity', {}].forEach( - (x) => assert.equal(32, clz32(x))); -} - -testClz32(clz32); -testClz32(Math.clz32); diff --git a/test/fixtures/traceur/Math/cosh.module.js b/test/fixtures/traceur/Math/cosh.module.js deleted file mode 100644 index c61ab85d06..0000000000 --- a/test/fixtures/traceur/Math/cosh.module.js +++ /dev/null @@ -1,11 +0,0 @@ -import {cosh} from '../../../src/runtime/polyfills/Math.js'; - -function testCosh(cosh) { - assert.equal(Infinity, cosh(-Infinity)); - assert.equal(Infinity, cosh(Infinity)); - assert.equal(1, cosh(0)); - assert.equal(1, cosh(-0)); -} - -testCosh(cosh); -testCosh(Math.cosh); diff --git a/test/fixtures/traceur/Math/expm1.module.js b/test/fixtures/traceur/Math/expm1.module.js deleted file mode 100644 index 0bbeb63d26..0000000000 --- a/test/fixtures/traceur/Math/expm1.module.js +++ /dev/null @@ -1,9 +0,0 @@ -import {expm1} from '../../../src/runtime/polyfills/Math.js'; - -function testExpm1(expm1) { - assert.equal(Infinity, expm1(Infinity)); - assert.equal(-1, expm1(-Infinity)); -} - -testExpm1(expm1); -testExpm1(Math.expm1); diff --git a/test/fixtures/traceur/Math/fround.module.js b/test/fixtures/traceur/Math/fround.module.js deleted file mode 100644 index e05699be24..0000000000 --- a/test/fixtures/traceur/Math/fround.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {fround} from '../../../src/runtime/polyfills/Math.js'; - -function testFround(fround) { - assert.equal(0, fround(0)); -} - -testFround(fround); -testFround(Math.fround); diff --git a/test/fixtures/traceur/Math/hypot.module.js b/test/fixtures/traceur/Math/hypot.module.js deleted file mode 100644 index 097e5b5318..0000000000 --- a/test/fixtures/traceur/Math/hypot.module.js +++ /dev/null @@ -1,9 +0,0 @@ -import {hypot} from '../../../src/runtime/polyfills/Math.js'; - -function testHypot(hypot) { - assert.equal(1, hypot(1)); - assert.equal(Math.PI, hypot(Math.PI)); -} - -testHypot(hypot); -testHypot(Math.hypot); diff --git a/test/fixtures/traceur/Math/imul.module.js b/test/fixtures/traceur/Math/imul.module.js deleted file mode 100644 index e67624dca2..0000000000 --- a/test/fixtures/traceur/Math/imul.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {imul} from '../../../src/runtime/polyfills/Math.js'; - -function testImul(imul) { - assert.equal(8, imul(2, 4)); -} - -testImul(imul); -testImul(Math.imul); diff --git a/test/fixtures/traceur/Math/log10.module.js b/test/fixtures/traceur/Math/log10.module.js deleted file mode 100644 index 64cae99669..0000000000 --- a/test/fixtures/traceur/Math/log10.module.js +++ /dev/null @@ -1,9 +0,0 @@ -import {log10} from '../../../src/runtime/polyfills/Math.js'; - -function testLog10(log10) { - assert.equal(1, log10(10)); - assert.equal(2, log10(100)); -} - -testLog10(log10); -testLog10(Math.log10); diff --git a/test/fixtures/traceur/Math/log1p.module.js b/test/fixtures/traceur/Math/log1p.module.js deleted file mode 100644 index 2fd94cbf2f..0000000000 --- a/test/fixtures/traceur/Math/log1p.module.js +++ /dev/null @@ -1,8 +0,0 @@ -import {log1p} from '../../../src/runtime/polyfills/Math.js'; - -function testLog1p(log1p) { - assert.equal(0, log1p(0)); -} - -// testLog1p(log1p); -testLog1p(Math.log1p); diff --git a/test/fixtures/traceur/Math/log2.module.js b/test/fixtures/traceur/Math/log2.module.js deleted file mode 100644 index fc5935d091..0000000000 --- a/test/fixtures/traceur/Math/log2.module.js +++ /dev/null @@ -1,9 +0,0 @@ -import {log2} from '../../../src/runtime/polyfills/Math.js'; - -function testLog2(log2) { - assert.equal(1, log2(2)); - assert.equal(2, log2(4)); -} - -testLog2(log2); -testLog2(Math.log2); diff --git a/test/fixtures/traceur/Math/sign.module.js b/test/fixtures/traceur/Math/sign.module.js deleted file mode 100644 index 35c816a583..0000000000 --- a/test/fixtures/traceur/Math/sign.module.js +++ /dev/null @@ -1,11 +0,0 @@ -import {sign} from '../../../src/runtime/polyfills/Math.js'; - -function testSign(sign) { - assert.equal(1, sign(1)); - assert.equal(-1, sign(-1)); - assert.equal(0, sign(0)); - assert.equal(-0, sign(-0)); -} - -testSign(sign); -testSign(Math.sign); diff --git a/test/fixtures/traceur/Math/sinh.module.js b/test/fixtures/traceur/Math/sinh.module.js deleted file mode 100644 index c09335be35..0000000000 --- a/test/fixtures/traceur/Math/sinh.module.js +++ /dev/null @@ -1,11 +0,0 @@ -import {sinh} from '../../../src/runtime/polyfills/Math.js'; - -function testSinh(sinh) { - assert.equal(0, sinh(0)); - assert.equal(-0, sinh(-0)); - assert.equal(Infinity, sinh(Infinity)); - assert.equal(-Infinity, sinh(-Infinity)); -} - -testSinh(sinh); -testSinh(Math.sinh); diff --git a/test/fixtures/traceur/Math/tanh.module.js b/test/fixtures/traceur/Math/tanh.module.js deleted file mode 100644 index 056ce2fa32..0000000000 --- a/test/fixtures/traceur/Math/tanh.module.js +++ /dev/null @@ -1,11 +0,0 @@ -import {tanh} from '../../../src/runtime/polyfills/Math.js'; - -function testTanh(tanh) { - assert.equal(0, tanh(0)); - assert.equal(-0, tanh(-0)); - assert.equal(1, tanh(Infinity)); - assert.equal(-1, tanh(-Infinity)); -} - -testTanh(tanh); -testTanh(Math.tanh); diff --git a/test/fixtures/traceur/Math/trunc.module.js b/test/fixtures/traceur/Math/trunc.module.js deleted file mode 100644 index c9841d70ef..0000000000 --- a/test/fixtures/traceur/Math/trunc.module.js +++ /dev/null @@ -1,14 +0,0 @@ -import {trunc} from '../../../src/runtime/polyfills/Math.js'; - -function testTrunc(trunc) { - assert.equal(0, trunc(0)); - assert.equal(-0, trunc(-0)); - assert.equal(Infinity, trunc(Infinity)); - assert.equal(-Infinity, trunc(-Infinity)); - assert.equal(42, trunc(42)); - assert.equal(2, trunc(2.5)); - assert.equal(-2, trunc(-2.5)); -} - -testTrunc(trunc); -testTrunc(Math.trunc); diff --git a/test/fixtures/traceur/MemberVariables/Assertions.module.js b/test/fixtures/traceur/MemberVariables/Assertions.module.js deleted file mode 100644 index e10e0997aa..0000000000 --- a/test/fixtures/traceur/MemberVariables/Assertions.module.js +++ /dev/null @@ -1,25 +0,0 @@ -// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js - -import '../TypeAssertions/resources/assert.js'; - -class Test { - a:string; - static b:string; - uninitialized: string; - c; -} - -var test = new Test(); - -test.c = 'str'; -assert.equal(test.c, 'str'); - -test.a = 'a'; -assert.equal(test.a, 'a'); - -Test.b = 'b'; -assert.equal(Test.b, 'b'); - -assert.throw(() => { test.uninitialized; }, chai.AssertionError); -assert.throw(() => { test.a = 0; }, chai.AssertionError); -assert.throw(() => { Test.b = 0; }, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/ClassExpression.module.js b/test/fixtures/traceur/MemberVariables/ClassExpression.module.js deleted file mode 100644 index d16a1ec925..0000000000 --- a/test/fixtures/traceur/MemberVariables/ClassExpression.module.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js - -import '../TypeAssertions/resources/assert.js'; - -class C extends class { - x: number; -} { - y: number; -} - -var c = new C(); - -assert.throw(() => { c.x = 'str'}, chai.AssertionError); -assert.throw(() => { c.y = 'str'}, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/Error_Disabled.js b/test/fixtures/traceur/MemberVariables/Error_Disabled.js deleted file mode 100644 index 324e6b50b7..0000000000 --- a/test/fixtures/traceur/MemberVariables/Error_Disabled.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :4:4: Unexpected token : - -class C { - x: number; -} diff --git a/test/fixtures/traceur/MemberVariables/Inheritance.module.js b/test/fixtures/traceur/MemberVariables/Inheritance.module.js deleted file mode 100644 index 9db32dfd84..0000000000 --- a/test/fixtures/traceur/MemberVariables/Inheritance.module.js +++ /dev/null @@ -1,24 +0,0 @@ -// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js - -import '../TypeAssertions/resources/assert.js'; - -class Parent { - a:string; - static staticA:string; -} - -class Child extends Parent { - b:string; - static staticB:string; -} - -var child = new Child(); -child.a = 'defined in Parent'; -child.b = 'defined in Child'; -Child.staticA = 'static in Parent'; -Child.staticB = 'static in Child'; - -assert.throw(() => { child.a = 0; }, chai.AssertionError); -assert.throw(() => { child.b = 0; }, chai.AssertionError); -assert.throw(() => { Child.staticA = 0; }, chai.AssertionError); -assert.throw(() => { Child.staticB = 0; }, chai.AssertionError); diff --git a/test/fixtures/traceur/MemberVariables/NestedClass.module.js b/test/fixtures/traceur/MemberVariables/NestedClass.module.js deleted file mode 100644 index 1f0148011e..0000000000 --- a/test/fixtures/traceur/MemberVariables/NestedClass.module.js +++ /dev/null @@ -1,17 +0,0 @@ -// Options: --member-variables --types --type-assertions --type-assertion-module=../TypeAssertions/resources/assert.js - -import '../TypeAssertions/resources/assert.js'; - -class C { - d() { - class D { - x: number; - } - - return new D(); - } -} - -var d = new C().d(); - -assert.throw(() => { d.x = 'string'}, chai.AssertionError); diff --git a/test/fixtures/traceur/Modules/EmptyNamedImport.module.js b/test/fixtures/traceur/Modules/EmptyNamedImport.module.js deleted file mode 100644 index 866efd0a87..0000000000 --- a/test/fixtures/traceur/Modules/EmptyNamedImport.module.js +++ /dev/null @@ -1 +0,0 @@ -import {} from './resources/m.js'; diff --git a/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js b/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js deleted file mode 100644 index 1b8242c196..0000000000 --- a/test/fixtures/traceur/Modules/Error_DuplicateImport.module.js +++ /dev/null @@ -1,10 +0,0 @@ -// Error: test/feature/Modules/Error_DuplicateImport.module.js:6:9: 'a' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:5:9 -// Error: test/feature/Modules/Error_DuplicateImport.module.js:9:8: 'd' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:8:8 -// Error: test/feature/Modules/Error_DuplicateImport.module.js:10:9: 'd' was previously imported at test/feature/Modules/Error_DuplicateImport.module.js:8:8 - -import {a} from './resources/a.js'; -import {c as a} from './resources/c.js'; - -import d from './resources/default-class.js'; -import d from './resources/default-name.js'; -import {a as d} from './resources/a2.js'; diff --git a/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js b/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js deleted file mode 100644 index be6eb05625..0000000000 --- a/test/fixtures/traceur/Modules/Error_ExportKeyword.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:9: Unexpected token if - -export {if}; diff --git a/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js b/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js deleted file mode 100644 index ac5e6de748..0000000000 --- a/test/fixtures/traceur/Modules/Error_ExportKeyword2.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:9: Unexpected token if - -export {if as x}; diff --git a/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js b/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js deleted file mode 100644 index da408f30cb..0000000000 --- a/test/fixtures/traceur/Modules/Error_ExportStarConflict.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: test/feature/Modules/resources/export-conflict.js:2:8: Duplicate export. 'a' was previously exported at test/feature/Modules/resources/export-conflict.js:1:12 - -import {a} from './resources/export-conflict.js'; diff --git a/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js b/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js deleted file mode 100644 index 2e9c0cea53..0000000000 --- a/test/fixtures/traceur/Modules/Error_ExportStarDuplicateExport.module.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: test/feature/Modules/Error_ExportStarDuplicateExport.module.js:4:8: Duplicate export. 'a' was previously exported at test/feature/Modules/Error_ExportStarDuplicateExport.module.js:3:8 - -export * from './resources/a.js'; -export * from './resources/a2.js'; - -assert.equal(1, 2); diff --git a/test/fixtures/traceur/Modules/Error_ImportDefault.module.js b/test/fixtures/traceur/Modules/Error_ImportDefault.module.js deleted file mode 100644 index 45f14c2c5a..0000000000 --- a/test/fixtures/traceur/Modules/Error_ImportDefault.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: test/feature/Modules/Error_ImportDefault.module.js:3:8: 'default' is not exported by 'test/feature/Modules/resources/a.js' - -import error from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_ImportStar.module.js b/test/fixtures/traceur/Modules/Error_ImportStar.module.js deleted file mode 100644 index e13fb713fe..0000000000 --- a/test/fixtures/traceur/Modules/Error_ImportStar.module.js +++ /dev/null @@ -1,4 +0,0 @@ -// Error: :3:10: Unexpected token from - -import * from './resources/m.js'; -assert.equal(3, a + b); diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport.module.js deleted file mode 100644 index 85fa2002dc..0000000000 --- a/test/fixtures/traceur/Modules/Error_InvalidExport.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:9: 'c' is not exported by 'test/feature/Modules/resources/a.js' - -export {c} from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js deleted file mode 100644 index 25554def04..0000000000 --- a/test/fixtures/traceur/Modules/Error_InvalidExport2.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:9: 'c' is not exported by 'test/feature/Modules/resources/a.js' - -export {c as d} from './resources/a.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js b/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js deleted file mode 100644 index 0617075628..0000000000 --- a/test/fixtures/traceur/Modules/Error_InvalidExport3.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: test/feature/Modules/Error_InvalidExport3.module.js:3:9: 'c' is not exported by 'test/feature/Modules/resources/b.js' - -export {c as d} from './resources/b.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js deleted file mode 100644 index 88f2765c41..0000000000 --- a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration.module.js +++ /dev/null @@ -1,7 +0,0 @@ -// Error: File not found 'test/feature/Modules/resources/no_such_file.js' -// Error: Specified as ./resources/no_such_file.js. -// Error: Imported by test/feature/Modules/Error_InvalidModuleDeclaration.module.js. -// Error: Normalizes to test/feature/Modules/resources/no_such_file.js -// Error: locate resolved against base './' - -import * as b from './resources/no_such_file.js'; diff --git a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js b/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js deleted file mode 100644 index 7702371f2d..0000000000 --- a/test/fixtures/traceur/Modules/Error_InvalidModuleDeclaration2.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: 3:38: Unexpected token . - -import * as b from './resources/a.js'.c; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/Error_MissingExport.module.js b/test/fixtures/traceur/Modules/Error_MissingExport.module.js deleted file mode 100644 index 9328df7011..0000000000 --- a/test/fixtures/traceur/Modules/Error_MissingExport.module.js +++ /dev/null @@ -1,7 +0,0 @@ -// Error: :5:12: 'y' is not exported by 'test/feature/Modules/resources/x.js' -// Error: :5:15: 'z' is not exported by 'test/feature/Modules/resources/x.js' -// Error: :6:9: 'w' is not exported by 'test/feature/Modules/resources/x.js' - -import {x, y, z} from './resources/x.js'; -import {w} from './resources/x.js'; - diff --git a/test/fixtures/traceur/Modules/ExportStar.module.js b/test/fixtures/traceur/Modules/ExportStar.module.js deleted file mode 100644 index d8e3ccf84d..0000000000 --- a/test/fixtures/traceur/Modules/ExportStar.module.js +++ /dev/null @@ -1,6 +0,0 @@ -import * as o from './resources/o.js'; - -assert.equal(1, o.a); -assert.equal(2, o.b); -assert.equal(3, o.c); -assert.equal(4, o.d); diff --git a/test/fixtures/traceur/Modules/Exports.module.js b/test/fixtures/traceur/Modules/Exports.module.js deleted file mode 100644 index 10a4d9a5d0..0000000000 --- a/test/fixtures/traceur/Modules/Exports.module.js +++ /dev/null @@ -1,17 +0,0 @@ -import * as a from './resources/i.js'; - -(function() { - 'use strict'; - assert.equal(0, a.i); - a.inc(); - assert.equal(1, a.i); - - assert.throws(function() { - a.i = 2; - }, TypeError); -})(); - -assert.equal(1, a.i); - -import * as d from './resources/d.js'; -assert.equal('A', d.a); diff --git a/test/fixtures/traceur/Modules/ImportAsExportAs.module.js b/test/fixtures/traceur/Modules/ImportAsExportAs.module.js deleted file mode 100644 index 148782a5d0..0000000000 --- a/test/fixtures/traceur/Modules/ImportAsExportAs.module.js +++ /dev/null @@ -1,2 +0,0 @@ -import * as m from './resources/m3.js'; -assert.equal(m.x, 'z'); diff --git a/test/fixtures/traceur/Modules/ImportCircular.module.js b/test/fixtures/traceur/Modules/ImportCircular.module.js deleted file mode 100644 index 200b0d798a..0000000000 --- a/test/fixtures/traceur/Modules/ImportCircular.module.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: Unsupported circular dependency between test/feature/Modules/ImportCircular.module.js and test/feature/Modules/resources/clockwise.js - -import {clockwise} from './resources/clockwise.js'; -export function counterclockwise() { - return clockwise(); -} diff --git a/test/fixtures/traceur/Modules/ImportDefault.module.js b/test/fixtures/traceur/Modules/ImportDefault.module.js deleted file mode 100644 index 2dfc7591cb..0000000000 --- a/test/fixtures/traceur/Modules/ImportDefault.module.js +++ /dev/null @@ -1,17 +0,0 @@ -import x from './resources/default.js'; -assert.equal(x, 42); - -import C from './resources/default-class.js'; -assert.equal(new C().m(), 'm'); - -import {default as D} from './resources/default-name.js'; -assert.equal(D, 4); - -import f from './resources/default-function.js'; -assert.equal(f(), 123); - -import E from './resources/default-class-expression.js'; -assert.equal(new E().n(), 'n'); - -import g from './resources/default-function-expression.js'; -assert.equal(g(), 456); diff --git a/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js b/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js deleted file mode 100644 index 865e5c437e..0000000000 --- a/test/fixtures/traceur/Modules/ImportEmptyImportClause.module.js +++ /dev/null @@ -1,4 +0,0 @@ -this.sideEffect = 1; -import {} from './resources/side-effect2.js'; -assert.equal(2, this.sideEffect); -this.sideEffect = 1; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/ImportFromModule.module.js b/test/fixtures/traceur/Modules/ImportFromModule.module.js deleted file mode 100644 index 99ac97a287..0000000000 --- a/test/fixtures/traceur/Modules/ImportFromModule.module.js +++ /dev/null @@ -1,17 +0,0 @@ -import {a as renamedX, b} from './resources/m.js'; -import {a} from './resources/m.js'; -import * as m2 from './resources/m.js'; - -assert.equal(1, a); -assert.equal(1, renamedX); -assert.equal(2, b); - -import * as m from './resources/m.js'; - -assert.equal(a, renamedX); -assert.equal(a, m.a); - -import * as m3 from './resources/m.js'; - -assert.isTrue(m === m3); -assert.equal(b, m.b); diff --git a/test/fixtures/traceur/Modules/ImportNoImportClause.module.js b/test/fixtures/traceur/Modules/ImportNoImportClause.module.js deleted file mode 100644 index e83308df8d..0000000000 --- a/test/fixtures/traceur/Modules/ImportNoImportClause.module.js +++ /dev/null @@ -1,4 +0,0 @@ -this.sideEffect = 1; -import './resources/side-effect.js'; -assert.equal(2, this.sideEffect); -this.sideEffect = 1; \ No newline at end of file diff --git a/test/fixtures/traceur/Modules/ImportReExportDefault.module.js b/test/fixtures/traceur/Modules/ImportReExportDefault.module.js deleted file mode 100644 index 383f8241c6..0000000000 --- a/test/fixtures/traceur/Modules/ImportReExportDefault.module.js +++ /dev/null @@ -1,2 +0,0 @@ -import x from './resources/re-export-default.js'; -assert.equal(x, 42); diff --git a/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js b/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js deleted file mode 100644 index 75071473a5..0000000000 --- a/test/fixtures/traceur/Modules/ImportReExportDefaultAs.module.js +++ /dev/null @@ -1,2 +0,0 @@ -import {x} from './resources/re-export-default-as.js'; -assert.equal(x, 42); diff --git a/test/fixtures/traceur/Modules/ModuleDefault.module.js b/test/fixtures/traceur/Modules/ModuleDefault.module.js deleted file mode 100644 index e2fe225850..0000000000 --- a/test/fixtures/traceur/Modules/ModuleDefault.module.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as m from './resources/default.js'; - -assert.equal(m.default, 42); diff --git a/test/fixtures/traceur/Modules/StaticMethod.module.js b/test/fixtures/traceur/Modules/StaticMethod.module.js deleted file mode 100644 index cc37654001..0000000000 --- a/test/fixtures/traceur/Modules/StaticMethod.module.js +++ /dev/null @@ -1,2 +0,0 @@ -import {TestClass} from './resources/TestClass.js'; -assert.equal(TestClass.method(), 42); diff --git a/test/fixtures/traceur/Modules/ThisInModules.module.js b/test/fixtures/traceur/Modules/ThisInModules.module.js deleted file mode 100644 index 0056ac4272..0000000000 --- a/test/fixtures/traceur/Modules/ThisInModules.module.js +++ /dev/null @@ -1,4 +0,0 @@ -var global = this; - -import * as m from './resources/f.js'; -assert.equal(global, m.f()); diff --git a/test/fixtures/traceur/Modules/resources/TestClass.js b/test/fixtures/traceur/Modules/resources/TestClass.js deleted file mode 100644 index 723df2b773..0000000000 --- a/test/fixtures/traceur/Modules/resources/TestClass.js +++ /dev/null @@ -1,5 +0,0 @@ -export class TestClass { - static method() { - return 42; - } -} diff --git a/test/fixtures/traceur/Modules/resources/a.js b/test/fixtures/traceur/Modules/resources/a.js deleted file mode 100644 index d0ba61cbde..0000000000 --- a/test/fixtures/traceur/Modules/resources/a.js +++ /dev/null @@ -1 +0,0 @@ -export var a = 'A'; diff --git a/test/fixtures/traceur/Modules/resources/a2.js b/test/fixtures/traceur/Modules/resources/a2.js deleted file mode 100644 index da6520dad9..0000000000 --- a/test/fixtures/traceur/Modules/resources/a2.js +++ /dev/null @@ -1 +0,0 @@ -export var a = 'A2'; diff --git a/test/fixtures/traceur/Modules/resources/b.js b/test/fixtures/traceur/Modules/resources/b.js deleted file mode 100644 index e7d0cc71ec..0000000000 --- a/test/fixtures/traceur/Modules/resources/b.js +++ /dev/null @@ -1 +0,0 @@ -import * as c from './c.js'; diff --git a/test/fixtures/traceur/Modules/resources/c.js b/test/fixtures/traceur/Modules/resources/c.js deleted file mode 100644 index fc55ed1488..0000000000 --- a/test/fixtures/traceur/Modules/resources/c.js +++ /dev/null @@ -1 +0,0 @@ -export var c = 'C'; diff --git a/test/fixtures/traceur/Modules/resources/clockwise.js b/test/fixtures/traceur/Modules/resources/clockwise.js deleted file mode 100644 index 02e22761f8..0000000000 --- a/test/fixtures/traceur/Modules/resources/clockwise.js +++ /dev/null @@ -1,4 +0,0 @@ -import {counterclockwise} from '../ImportCircular.module.js'; -export function clockwise() { - return 'The circle is complete'; -} diff --git a/test/fixtures/traceur/Modules/resources/d.js b/test/fixtures/traceur/Modules/resources/d.js deleted file mode 100644 index 4a9ab8813e..0000000000 --- a/test/fixtures/traceur/Modules/resources/d.js +++ /dev/null @@ -1 +0,0 @@ -export * from './a.js'; diff --git a/test/fixtures/traceur/Modules/resources/default-class-expression.js b/test/fixtures/traceur/Modules/resources/default-class-expression.js deleted file mode 100644 index 4dcbb96368..0000000000 --- a/test/fixtures/traceur/Modules/resources/default-class-expression.js +++ /dev/null @@ -1,5 +0,0 @@ -export default class { - n() { - return 'n'; - } -} diff --git a/test/fixtures/traceur/Modules/resources/default-class.js b/test/fixtures/traceur/Modules/resources/default-class.js deleted file mode 100644 index 8c1e65c3be..0000000000 --- a/test/fixtures/traceur/Modules/resources/default-class.js +++ /dev/null @@ -1,7 +0,0 @@ -export default class C { - m() { - return 'm'; - } -} - -assert.instanceOf(C, Function); diff --git a/test/fixtures/traceur/Modules/resources/default-function-expression.js b/test/fixtures/traceur/Modules/resources/default-function-expression.js deleted file mode 100644 index 442eb2ccac..0000000000 --- a/test/fixtures/traceur/Modules/resources/default-function-expression.js +++ /dev/null @@ -1,3 +0,0 @@ -export default function() { - return 456; -} diff --git a/test/fixtures/traceur/Modules/resources/default-function.js b/test/fixtures/traceur/Modules/resources/default-function.js deleted file mode 100644 index 3522838092..0000000000 --- a/test/fixtures/traceur/Modules/resources/default-function.js +++ /dev/null @@ -1,5 +0,0 @@ -export default function f() { - return 123; -} - -assert.instanceOf(f, Function); diff --git a/test/fixtures/traceur/Modules/resources/default-name.js b/test/fixtures/traceur/Modules/resources/default-name.js deleted file mode 100644 index fc9ffb7a38..0000000000 --- a/test/fixtures/traceur/Modules/resources/default-name.js +++ /dev/null @@ -1,2 +0,0 @@ -var p = 4; -export {p as default}; diff --git a/test/fixtures/traceur/Modules/resources/default.js b/test/fixtures/traceur/Modules/resources/default.js deleted file mode 100644 index 7a4e8a723a..0000000000 --- a/test/fixtures/traceur/Modules/resources/default.js +++ /dev/null @@ -1 +0,0 @@ -export default 42; diff --git a/test/fixtures/traceur/Modules/resources/export-conflict.js b/test/fixtures/traceur/Modules/resources/export-conflict.js deleted file mode 100644 index 830463412f..0000000000 --- a/test/fixtures/traceur/Modules/resources/export-conflict.js +++ /dev/null @@ -1,2 +0,0 @@ -export var a = 'a'; -export * from './a.js'; // also exports a diff --git a/test/fixtures/traceur/Modules/resources/f.js b/test/fixtures/traceur/Modules/resources/f.js deleted file mode 100644 index dff8ba2f28..0000000000 --- a/test/fixtures/traceur/Modules/resources/f.js +++ /dev/null @@ -1 +0,0 @@ -export var f = () => this; diff --git a/test/fixtures/traceur/Modules/resources/i.js b/test/fixtures/traceur/Modules/resources/i.js deleted file mode 100644 index 1096ab76ca..0000000000 --- a/test/fixtures/traceur/Modules/resources/i.js +++ /dev/null @@ -1,4 +0,0 @@ -export var i = 0; -export function inc() { - i++; -} diff --git a/test/fixtures/traceur/Modules/resources/m.js b/test/fixtures/traceur/Modules/resources/m.js deleted file mode 100644 index 0b0c3304ff..0000000000 --- a/test/fixtures/traceur/Modules/resources/m.js +++ /dev/null @@ -1,2 +0,0 @@ -export var a = 1; -export var b = 2; diff --git a/test/fixtures/traceur/Modules/resources/m2.js b/test/fixtures/traceur/Modules/resources/m2.js deleted file mode 100644 index 4fce0644f6..0000000000 --- a/test/fixtures/traceur/Modules/resources/m2.js +++ /dev/null @@ -1,2 +0,0 @@ -var z = 'z'; -export {z as var}; diff --git a/test/fixtures/traceur/Modules/resources/m3.js b/test/fixtures/traceur/Modules/resources/m3.js deleted file mode 100644 index d0b61d8faf..0000000000 --- a/test/fixtures/traceur/Modules/resources/m3.js +++ /dev/null @@ -1,2 +0,0 @@ -import {var as x} from './m2.js'; -export {x}; diff --git a/test/fixtures/traceur/Modules/resources/n.js b/test/fixtures/traceur/Modules/resources/n.js deleted file mode 100644 index bb41d4610f..0000000000 --- a/test/fixtures/traceur/Modules/resources/n.js +++ /dev/null @@ -1,2 +0,0 @@ -export var c = 3; -export var d = 4; diff --git a/test/fixtures/traceur/Modules/resources/o.js b/test/fixtures/traceur/Modules/resources/o.js deleted file mode 100644 index e0a1758a6a..0000000000 --- a/test/fixtures/traceur/Modules/resources/o.js +++ /dev/null @@ -1,2 +0,0 @@ -export * from './m.js'; -export * from './n.js'; diff --git a/test/fixtures/traceur/Modules/resources/re-export-default-as.js b/test/fixtures/traceur/Modules/resources/re-export-default-as.js deleted file mode 100644 index d6ee20f83c..0000000000 --- a/test/fixtures/traceur/Modules/resources/re-export-default-as.js +++ /dev/null @@ -1 +0,0 @@ -export {default as x} from './default.js'; diff --git a/test/fixtures/traceur/Modules/resources/re-export-default.js b/test/fixtures/traceur/Modules/resources/re-export-default.js deleted file mode 100644 index a2229f0904..0000000000 --- a/test/fixtures/traceur/Modules/resources/re-export-default.js +++ /dev/null @@ -1 +0,0 @@ -export {default} from './default.js'; diff --git a/test/fixtures/traceur/Modules/resources/side-effect.js b/test/fixtures/traceur/Modules/resources/side-effect.js deleted file mode 100644 index cff3fea11b..0000000000 --- a/test/fixtures/traceur/Modules/resources/side-effect.js +++ /dev/null @@ -1 +0,0 @@ -this.sideEffect++; diff --git a/test/fixtures/traceur/Modules/resources/side-effect2.js b/test/fixtures/traceur/Modules/resources/side-effect2.js deleted file mode 100644 index 23cc5b9c39..0000000000 --- a/test/fixtures/traceur/Modules/resources/side-effect2.js +++ /dev/null @@ -1,3 +0,0 @@ -this.sideEffect++; - - diff --git a/test/fixtures/traceur/Modules/resources/x.js b/test/fixtures/traceur/Modules/resources/x.js deleted file mode 100644 index 7e0623ea76..0000000000 --- a/test/fixtures/traceur/Modules/resources/x.js +++ /dev/null @@ -1 +0,0 @@ -export var x = 'X'; diff --git a/test/fixtures/traceur/Number/EPSILON.module.js b/test/fixtures/traceur/Number/EPSILON.module.js deleted file mode 100644 index 8bb6716b37..0000000000 --- a/test/fixtures/traceur/Number/EPSILON.module.js +++ /dev/null @@ -1,10 +0,0 @@ -import {EPSILON} from '../../../src/runtime/polyfills/Number.js'; - -function testEpsilon(epsilon) { - assert.equal(epsilon, Math.pow(2, -52)); - assert.equal(1 + epsilon - 1, epsilon); - assert.equal(1 + epsilon / 2 - 1, 0); -} - -testEpsilon(EPSILON); -testEpsilon(Number.EPSILON); diff --git a/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js b/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js deleted file mode 100644 index 44f20fb78b..0000000000 --- a/test/fixtures/traceur/Number/MAX_SAFE_INTEGER.module.js +++ /dev/null @@ -1,4 +0,0 @@ -import {MAX_SAFE_INTEGER} from '../../../src/runtime/polyfills/Number.js'; - -assert.equal(MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); -assert.equal(Number.MAX_SAFE_INTEGER, Math.pow(2, 53) - 1); diff --git a/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js b/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js deleted file mode 100644 index 450d5b0b07..0000000000 --- a/test/fixtures/traceur/Number/MIN_SAFE_INTEGER.module.js +++ /dev/null @@ -1,4 +0,0 @@ -import {MIN_SAFE_INTEGER} from '../../../src/runtime/polyfills/Number.js'; - -assert.equal(MIN_SAFE_INTEGER, -Math.pow(2, 53) + 1); -assert.equal(Number.MIN_SAFE_INTEGER, -Math.pow(2, 53) + 1); diff --git a/test/fixtures/traceur/Number/isFinite.module.js b/test/fixtures/traceur/Number/isFinite.module.js deleted file mode 100644 index 51e5d5d66f..0000000000 --- a/test/fixtures/traceur/Number/isFinite.module.js +++ /dev/null @@ -1,30 +0,0 @@ -import {isFinite} from '../../../src/runtime/polyfills/Number.js'; - -function testIsFinite(isFinite) { - assert.isTrue(isFinite(-0)); - assert.isTrue(isFinite(0)); - assert.isTrue(isFinite(Number.EPSILON)); - assert.isTrue(isFinite(Number.MAX_SAFE_INTEGER + 23)); - assert.isTrue(isFinite(Number.MAX_VALUE)); - assert.isTrue(isFinite(Number.MIN_SAFE_INTEGER - 13)); - assert.isTrue(isFinite(Number.MIN_VALUE)); - - assert.isFalse(isFinite('-0')); - assert.isFalse(isFinite('0')); - assert.isFalse(isFinite('x')); - assert.isFalse(isFinite(-Infinity)); - assert.isFalse(isFinite(-NaN)); - assert.isFalse(isFinite(Infinity)); - assert.isFalse(isFinite(NaN)); - assert.isFalse(isFinite(Number.NEGATIVE_INFINITY)); - assert.isFalse(isFinite(Number.POSITIVE_INFINITY)); - assert.isFalse(isFinite(false)); - assert.isFalse(isFinite(new Number(1))); - assert.isFalse(isFinite(null)); - assert.isFalse(isFinite(true)); - assert.isFalse(isFinite(undefined)); - assert.isFalse(isFinite({valueOf() { return 1; }})); -} - -testIsFinite(isFinite); -testIsFinite(Number.isFinite); diff --git a/test/fixtures/traceur/Number/isInteger.module.js b/test/fixtures/traceur/Number/isInteger.module.js deleted file mode 100644 index 73df049c1d..0000000000 --- a/test/fixtures/traceur/Number/isInteger.module.js +++ /dev/null @@ -1,30 +0,0 @@ -import {isInteger} from '../../../src/runtime/polyfills/Number.js'; - -function testIsInteger(isInteger) { - assert.isTrue(isInteger(-0)); - assert.isTrue(isInteger(0)); - assert.isTrue(isInteger(Number.MAX_SAFE_INTEGER + 23)); - assert.isTrue(isInteger(Number.MAX_VALUE)); - assert.isTrue(isInteger(Number.MIN_SAFE_INTEGER - 13)); - - assert.isFalse(isInteger('-0')); - assert.isFalse(isInteger('0')); - assert.isFalse(isInteger('x')); - assert.isFalse(isInteger(-Infinity)); - assert.isFalse(isInteger(-NaN)); - assert.isFalse(isInteger(Infinity)); - assert.isFalse(isInteger(NaN)); - assert.isFalse(isInteger(Number.EPSILON)); - assert.isFalse(isInteger(Number.MIN_VALUE)); - assert.isFalse(isInteger(Number.NEGATIVE_INFINITY)); - assert.isFalse(isInteger(Number.POSITIVE_INFINITY)); - assert.isFalse(isInteger(false)); - assert.isFalse(isInteger(new Number(1))); - assert.isFalse(isInteger(null)); - assert.isFalse(isInteger(true)); - assert.isFalse(isInteger(undefined)); - assert.isFalse(isInteger({valueOf() { return 1; }})); -} - -testIsInteger(isInteger); -testIsInteger(Number.isInteger); diff --git a/test/fixtures/traceur/Number/isNaN.module.js b/test/fixtures/traceur/Number/isNaN.module.js deleted file mode 100644 index 037696594e..0000000000 --- a/test/fixtures/traceur/Number/isNaN.module.js +++ /dev/null @@ -1,30 +0,0 @@ -import {isNaN} from '../../../src/runtime/polyfills/Number.js'; - -function testIsNaN(isNaN) { - assert.isTrue(isNaN(NaN)); - assert.isTrue(isNaN(-NaN)); - - assert.isFalse(isNaN('-0')); - assert.isFalse(isNaN('0')); - assert.isFalse(isNaN('NaN')); - assert.isFalse(isNaN('x')); - assert.isFalse(isNaN(-0)); - assert.isFalse(isNaN(0)); - assert.isFalse(isNaN(Infinity)); - assert.isFalse(isNaN(Number.EPSILON)); - assert.isFalse(isNaN(Number.MAX_SAFE_INTEGER + 23)); - assert.isFalse(isNaN(Number.MAX_VALUE)); - assert.isFalse(isNaN(Number.MIN_SAFE_INTEGER - 13)); - assert.isFalse(isNaN(Number.MIN_VALUE)); - assert.isFalse(isNaN(Number.NEGATIVE_INFINITY)); - assert.isFalse(isNaN(Number.POSITIVE_INFINITY)); - assert.isFalse(isNaN(false)); - assert.isFalse(isNaN(new Number(NaN))); - assert.isFalse(isNaN(null)); - assert.isFalse(isNaN(true)); - assert.isFalse(isNaN(undefined)); - assert.isFalse(isNaN({valueOf() { return NaN; }})); -} - -testIsNaN(isNaN); -testIsNaN(Number.isNaN); diff --git a/test/fixtures/traceur/Number/isSafeInteger.module.js b/test/fixtures/traceur/Number/isSafeInteger.module.js deleted file mode 100644 index 285ce2a8f2..0000000000 --- a/test/fixtures/traceur/Number/isSafeInteger.module.js +++ /dev/null @@ -1,33 +0,0 @@ -import {isSafeInteger} from '../../../src/runtime/polyfills/Number.js'; - -function testIsSafeInteger(isSafeInteger) { - assert.isTrue(isSafeInteger(-0)); - assert.isTrue(isSafeInteger(0)); - assert.isTrue(isSafeInteger(Number.MAX_SAFE_INTEGER - 23)); - assert.isTrue(isSafeInteger(Number.MAX_SAFE_INTEGER)); - assert.isTrue(isSafeInteger(Number.MIN_SAFE_INTEGER + 13)); - - assert.isFalse(isSafeInteger('-0')); - assert.isFalse(isSafeInteger('0')); - assert.isFalse(isSafeInteger('x')); - assert.isFalse(isSafeInteger(-Infinity)); - assert.isFalse(isSafeInteger(-NaN)); - assert.isFalse(isSafeInteger(Infinity)); - assert.isFalse(isSafeInteger(NaN)); - assert.isFalse(isSafeInteger(Number.EPSILON)); - assert.isFalse(isSafeInteger(Number.MAX_SAFE_INTEGER + 23)); - assert.isFalse(isSafeInteger(Number.MAX_VALUE)); - assert.isFalse(isSafeInteger(Number.MIN_SAFE_INTEGER - 13)); - assert.isFalse(isSafeInteger(Number.MIN_VALUE)); - assert.isFalse(isSafeInteger(Number.NEGATIVE_INFINITY)); - assert.isFalse(isSafeInteger(Number.POSITIVE_INFINITY)); - assert.isFalse(isSafeInteger(false)); - assert.isFalse(isSafeInteger(new Number(1))); - assert.isFalse(isSafeInteger(null)); - assert.isFalse(isSafeInteger(true)); - assert.isFalse(isSafeInteger(undefined)); - assert.isFalse(isSafeInteger({valueOf() { return 1; }})); -} - -testIsSafeInteger(isSafeInteger); -testIsSafeInteger(Number.isSafeInteger); diff --git a/test/fixtures/traceur/NumericLiteral/Error_Disabled.js b/test/fixtures/traceur/NumericLiteral/Error_Disabled.js deleted file mode 100644 index dd9ad409cd..0000000000 --- a/test/fixtures/traceur/NumericLiteral/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --numeric-literals=false -// Error: :4:2: Semi-colon expected - -0b11; diff --git a/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js b/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js deleted file mode 100644 index 4f64b8794f..0000000000 --- a/test/fixtures/traceur/NumericLiteral/Error_NoBinaryDigits.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --numeric-literals -// Error: :4:3: Binary Integer Literal must contain at least one digit - -0b; diff --git a/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js b/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js deleted file mode 100644 index 362fff7613..0000000000 --- a/test/fixtures/traceur/NumericLiteral/Error_NoOctalDigits.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --numeric-literals -// Error: :4:3: Octal Integer Literal must contain at least one digit - -0o; diff --git a/test/fixtures/traceur/NumericLiteral/Simple.js b/test/fixtures/traceur/NumericLiteral/Simple.js deleted file mode 100644 index 082038ccb7..0000000000 --- a/test/fixtures/traceur/NumericLiteral/Simple.js +++ /dev/null @@ -1,88 +0,0 @@ -// Options: --numeric-literals - -(function() { - assert.equal(0, 0b0); - assert.equal(1, 0b1); - assert.equal(3, 0b11); - assert.equal(3, 0b011); - assert.equal(0, 0B0); - assert.equal(1, 0B1); - assert.equal(3, 0B11); - assert.equal(3, 0B011); - - assert.equal(0, 0o0); - assert.equal(1, 0o1); - assert.equal(7, 0o7); - assert.equal(8, 0o10); - assert.equal(8, 0o010); - assert.equal(63, 0o77); - assert.equal(0, 0O0); - assert.equal(1, 0O1); - assert.equal(7, 0O7); - assert.equal(8, 0O10); - assert.equal(8, 0O010); - assert.equal(63, 0O77); - - var o = { - 0b0: 0, - 0b1: 1, - 0b10: 2, - 0B11: 3, - 0B0100: 4 - }; - assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); - - var o = { - 0o0: 0, - 0o1: 1, - 0o7: 7, - 0O10: 8, - 0O011: 9 - }; - assertArrayEquals(['0', '1', '7', '8', '9'], Object.keys(o)); - - var o = { - get 0b0() {}, - get 0b1() {}, - get 0b10() {}, - get 0B11() {}, - get 0B0100() {} - }; - assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); - - var o = { - set 0o0(v) {}, - set 0o1(v) {}, - set 0o7(v) {}, - set 0O10(v) {}, - set 0O011(v) {} - }; - assertArrayEquals(['0', '1', '7', '8', '9'], Object.keys(o)); - - var o = { - 0b0() {}, - 0b1() {}, - 0b10() {}, - 0B11() {}, - 0B0100() {} - }; - assertArrayEquals(['0', '1', '2', '3', '4'], Object.keys(o)); - - class C { - 0b0() {} - get 0b1() {} - set 0b10(v) {} - static 0B11() {} - static get 0B100() {} - static set 0B101(v) {} - - 0o6() {} - get 0o7() {} - set 0o10(v) {} - static 0O11() {} - static get 0O12() {} - static set 0O13(v) {} - } - assertArrayEquals(['0', '1', '2', '6', '7', '8'], Object.keys(C.prototype)); - assertArrayEquals(['3', '4', '5', '9', '10', '11'], Object.keys(C)); -})(); \ No newline at end of file diff --git a/test/fixtures/traceur/ObjectAssign.js b/test/fixtures/traceur/ObjectAssign.js deleted file mode 100644 index 05841a614c..0000000000 --- a/test/fixtures/traceur/ObjectAssign.js +++ /dev/null @@ -1,11 +0,0 @@ -var target = {a: 0, b: 2}; -var source = {a: 1, c: 3, get d() { return this.b || this.a + 64; }}; -var assigned = Object.assign(target, source); - -// ---------------------------------------------------------------------------- - -assert.isTrue(Object.hasOwnProperty("assign")); -assert.equal(assigned.a, source.a); -assert.equal(assigned.b, target.b); -assert.equal(assigned.c, source.c); -assert.equal(assigned.d, source.d); diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js deleted file mode 100644 index 069c869b11..0000000000 --- a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Disabled.js +++ /dev/null @@ -1,5 +0,0 @@ -// Options: --property-name-shorthand=false -// Error: :5:16: Unexpected token x - -var x = 42; -var object = {x}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js deleted file mode 100644 index 4d3f5644cb..0000000000 --- a/test/fixtures/traceur/ObjectInitializerShorthand/Error_Keyword.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:18: Unexpected token var - -var object = {var}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js b/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js deleted file mode 100644 index e7c4d29fe4..0000000000 --- a/test/fixtures/traceur/ObjectInitializerShorthand/Error_MissingVar.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: missingVarObjectInitializerShorthand is not defined - -var object = {missingVarObjectInitializerShorthand}; diff --git a/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js b/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js deleted file mode 100644 index 591866b272..0000000000 --- a/test/fixtures/traceur/ObjectInitializerShorthand/Ok.js +++ /dev/null @@ -1,8 +0,0 @@ -var x = 42; -var y = 43; -var object = {x, y}; - -// ---------------------------------------------------------------------------- - -assert.equal(42, object.x); -assert.equal(43, object.y); diff --git a/test/fixtures/traceur/ObjectIs.js b/test/fixtures/traceur/ObjectIs.js deleted file mode 100644 index 2f19b0edda..0000000000 --- a/test/fixtures/traceur/ObjectIs.js +++ /dev/null @@ -1,34 +0,0 @@ -assert.isTrue(Object.is(1, 1)); -assert.isTrue(Object.is(0, 0)); -assert.isTrue(Object.is(-0, -0)); -assert.isTrue(Object.is(NaN, NaN)); -assert.isTrue(Object.is(Infinity, Infinity)); -assert.isTrue(Object.is(-Infinity, -Infinity)); - -assert.isFalse(Object.is(0, -0)); -assert.isFalse(Object.is(-0, 0)); -assert.isFalse(Object.is(Infinity, -Infinity)); -assert.isFalse(Object.is(-Infinity, Infinity)); - -assert.isTrue(Object.is(true, true)); -assert.isTrue(Object.is(false, false)); - -assert.isTrue(Object.is(null, null)); -assert.isTrue(Object.is(undefined, undefined)); - -assert.isTrue(Object.is('', '')); -assert.isTrue(Object.is('a', 'a')); - -{ - var object = {}; - assert.isTrue(Object.is(object, object)); -} - -assert.isFalse(Object.is(new String('a'), new String('a'))); -assert.isFalse(Object.is(new Boolean, new Boolean)); -assert.isFalse(Object.is(new Number, new Number)); -assert.isFalse(Object.is(new Date(0), new Date(0))); -assert.isFalse(Object.is(/re/, /re/)); -assert.isFalse(Object.is({}, {})); -assert.isFalse(Object.is([], [])); -assert.isFalse(Object.is(function() {}, function() {})); diff --git a/test/fixtures/traceur/ObjectMixin.js b/test/fixtures/traceur/ObjectMixin.js deleted file mode 100644 index 372984f92a..0000000000 --- a/test/fixtures/traceur/ObjectMixin.js +++ /dev/null @@ -1,11 +0,0 @@ -var target = {a: 0, b: 2}; -var source = {a: 1, c: 3, get d() { return this.b || this.a + 64; }}; -var mixed = Object.mixin(target, source); - -// ---------------------------------------------------------------------------- - -assert.isTrue(Object.hasOwnProperty("mixin")); -assert.equal(mixed.a, source.a); -assert.equal(mixed.b, target.b); -assert.equal(mixed.c, source.c); -assert.notEqual(mixed.d, source.d); diff --git a/test/fixtures/traceur/Promise.js b/test/fixtures/traceur/Promise.js deleted file mode 100644 index a5f7679209..0000000000 --- a/test/fixtures/traceur/Promise.js +++ /dev/null @@ -1,9 +0,0 @@ -// Async. - -var p = new Promise((resolve, reject) => { - resolve(42); -}); -p.then((v) => { - assert.equal(v, 42); - done(); -}); diff --git a/test/fixtures/traceur/PromiseAll.js b/test/fixtures/traceur/PromiseAll.js deleted file mode 100644 index 04ffbd74d8..0000000000 --- a/test/fixtures/traceur/PromiseAll.js +++ /dev/null @@ -1,13 +0,0 @@ -// Async. - -function* gen() { - yield 1; - yield 2; -} - -var p2 = Promise.all(gen()); - -p2.then((v) => { - assert.deepEqual(v, [1,2]); - done(); -}); diff --git a/test/fixtures/traceur/PromiseResolve.js b/test/fixtures/traceur/PromiseResolve.js deleted file mode 100644 index 69c9aadd3c..0000000000 --- a/test/fixtures/traceur/PromiseResolve.js +++ /dev/null @@ -1,3 +0,0 @@ -var p = Promise.resolve(42); - -assert.equal(p, Promise.resolve(p)); diff --git a/test/fixtures/traceur/PromiseThrowInResolve.js b/test/fixtures/traceur/PromiseThrowInResolve.js deleted file mode 100644 index e380f26948..0000000000 --- a/test/fixtures/traceur/PromiseThrowInResolve.js +++ /dev/null @@ -1,15 +0,0 @@ -// Async. - -var message = 'testing'; -var throwInResolve = new Promise((resolve, reject) => { - resolve(42); -}); -throwInResolve.then((v) => { - throw new Error(message); -}).catch(function(ex) { - // When catch() is used in testing, these asserts would - // not be called, just the done() to avoid timeout. - assert(ex instanceof Error); - assert(ex.toString().indexOf(message) !== -1); - done(); -}).catch(done); diff --git a/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js b/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js deleted file mode 100644 index 4badc9f2cf..0000000000 --- a/test/fixtures/traceur/PropertyMethodAssignment/Error_Disabled.js +++ /dev/null @@ -1,8 +0,0 @@ -// Options: --property-methods=false -// Error: :5:9: Unexpected token ( - -var object = { - method() { - return 42; - } -}; diff --git a/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js b/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js deleted file mode 100644 index dbb08846de..0000000000 --- a/test/fixtures/traceur/PropertyMethodAssignment/Error_NotNamed.js +++ /dev/null @@ -1,8 +0,0 @@ -assert.throws(() => { - var object = { - "notNamedField"() { - return notNamedField; - } - }; - object.notNamedField(); -}, ReferenceError); diff --git a/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js b/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js deleted file mode 100644 index a913227b1b..0000000000 --- a/test/fixtures/traceur/PropertyMethodAssignment/PropertyMethodAssignment.js +++ /dev/null @@ -1,71 +0,0 @@ -var object = { - x: { - j() { - return this.j; - } - }, - f() { - return this.f; - }, - 'g'() {}, - "h"() {}, - 42() {}, - null() {}, - true() {}, - false() {}, - function() {}, - var() {}, - 'class'() {} // NodeJS incorrectly flags {class: ...} as an error. -}; - -// ---------------------------------------------------------------------------- - -assertArrayEquals([ - '42', - 'x', - 'f', - 'g', - 'h', - 'null', - 'true', - 'false', - 'function', - 'var', - 'class' -], Object.keys(object)); - -function assertMethod(object, name) { - assert.isTrue(object.hasOwnProperty(name)); - var descriptor = Object.getOwnPropertyDescriptor(object, name); - assert.equal('object', typeof descriptor); - assert.isTrue(descriptor.enumerable); - assert.equal('function', typeof object[name]); - // IE does not have a name property on functions. - assert.isTrue(object[name].name === '' || object[name].name === undefined); -} - -assertMethod(object, 'f'); -assertMethod(object, 'g'); -assertMethod(object, 'h'); -assertMethod(object, '42'); -assertMethod(object, 'null'); -assertMethod(object, 'true'); -assertMethod(object, 'false'); -assertMethod(object, 'function'); -assertMethod(object, 'var'); -assertMethod(object, 'class'); - -assert.equal(object.f, object.f()); - -// Test the nested object. -assertArrayEquals(['j'], Object.keys(object.x)); -assertMethod(object.x, 'j'); - -// Test name binding. -var m = 42; -class C { - m() { - return m; - } -} -assert.equal(42, new C().m()) diff --git a/test/fixtures/traceur/README b/test/fixtures/traceur/README deleted file mode 100644 index aebbfed8cd..0000000000 --- a/test/fixtures/traceur/README +++ /dev/null @@ -1,23 +0,0 @@ -This directory contains the "feature" tests. Each script here is a Traceur -script that uses a feature and then validates its behavior. These scripts can -be executed by running "/test/alltests.html" or "node testfeature.js" - -If any of the first lines of a feature script starts with "// Should not -compile." then that script intentionally contains an error that should *not* -successfully compile. The test harness will validate that attempting to compile -it generates an error. By convention, feature scripts like this are named -starting with "Error_". - -If any of the first lines of a feature script starts with "// Skip." we ignore -the test. - -If any of the first lines of a feature script starts with "// Async." there -will be a global function called 'done' that is expected to be called when the -test is done. - -If any of the first lines of a feature script starts with "// Only in browser." -we ignore the test if it is run using the Node.js test runner. - -If any of the first lines of a feature script starts with "// Options: " the -rest of that line is treated as a command line. The options is set as if passed -on the command line. diff --git a/test/fixtures/traceur/RegularExpression/Simple.js b/test/fixtures/traceur/RegularExpression/Simple.js deleted file mode 100644 index f425a4317c..0000000000 --- a/test/fixtures/traceur/RegularExpression/Simple.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --unicode-expressions - -// Only test if the transformation worked or not. For everything else, defer -// to regexpu's test suite: -// https://github.com/mathiasbynens/regexpu/blob/master/tests/tests.js -(function() { - assert(/a/u.source === 'a'); - assert(/a.b/u.source === 'a(?:[\\0-\\t\\x0B\\f\\x0E-\\u2027\\u202A-\\uD7FF\\uDC00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF])b'); -})(); diff --git a/test/fixtures/traceur/Rest/Error_NotLast.js b/test/fixtures/traceur/Rest/Error_NotLast.js deleted file mode 100644 index e6ff97f3cf..0000000000 --- a/test/fixtures/traceur/Rest/Error_NotLast.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: :3:46: Unexpected token , - -function invalidParam(noDefault, ...restParam, noRestAgain) { - // Should fail to parse since non rest param is not allowed after - // param. -} \ No newline at end of file diff --git a/test/fixtures/traceur/Rest/Error_SetAccessor.js b/test/fixtures/traceur/Rest/Error_SetAccessor.js deleted file mode 100644 index 754e2be8ea..0000000000 --- a/test/fixtures/traceur/Rest/Error_SetAccessor.js +++ /dev/null @@ -1,7 +0,0 @@ -// Error: :4:9: Unexpected token ... - -var object = { - set x(...rest) { - // rest is not allowed for set accessor - } -}; diff --git a/test/fixtures/traceur/Rest/Simple.js b/test/fixtures/traceur/Rest/Simple.js deleted file mode 100644 index 00350014e1..0000000000 --- a/test/fixtures/traceur/Rest/Simple.js +++ /dev/null @@ -1,16 +0,0 @@ -function f(...p) { - return p; -} - -function g(a, ...p) { - return p; -} - -assertArrayEquals([], f()); -assertArrayEquals([0], f(0)); -assertArrayEquals([0, 1], f(0, 1)); - -assertArrayEquals([], g()); -assertArrayEquals([], g(0)); -assertArrayEquals([1], g(0, 1)); -assertArrayEquals([1, 2], g(0, 1, 2)); diff --git a/test/fixtures/traceur/Scope/BlockBinding10.js b/test/fixtures/traceur/Scope/BlockBinding10.js deleted file mode 100644 index d7500efcfd..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding10.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --block-binding - -function f() { - return 'outer'; -} - -{ - var f = function f() { - return 'inner'; - }; - - assert.equal('inner', f()); -} - -assert.equal('inner', f()); diff --git a/test/fixtures/traceur/Scope/BlockBinding11.js b/test/fixtures/traceur/Scope/BlockBinding11.js deleted file mode 100644 index 07ac0a07f1..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding11.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --block-binding - -let result = []; -let obj = {a : 'hello a', b : 'hello b', c : 'hello c' }; -let keys = Object.keys(obj); - -// NOTE: Do not fix the deviation from Google JS coding style. This was done in -// order to check codegen for single statements in the body of 'for' loops. -for (let i = 0; i < keys.length; i++) - result.push( - function() { return obj[keys[i]]; } - ); - -// ---------------------------------------------------------------------------- - -assert.equal('hello a', result[0]()); -assert.equal('hello b', result[1]()); -assert.equal('hello c', result[2]()); diff --git a/test/fixtures/traceur/Scope/BlockBinding2.js b/test/fixtures/traceur/Scope/BlockBinding2.js deleted file mode 100644 index afb64e1664..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding2.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --block-binding - -let result = []; -let obj = {a : 'hello a', b : 'hello b', c : 'hello c' }; -for (let x in obj) { - result.push( - function() { return obj[x]; } - ); -} - -// ---------------------------------------------------------------------------- - -assert.equal('hello a', result[0]()); -assert.equal('hello b', result[1]()); -assert.equal('hello c', result[2]()); diff --git a/test/fixtures/traceur/Scope/BlockBinding3.js b/test/fixtures/traceur/Scope/BlockBinding3.js deleted file mode 100644 index 4d620100ca..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding3.js +++ /dev/null @@ -1,17 +0,0 @@ -// Options: --block-binding - -var f1, f2; - -{ - let z = 'z1 value'; - f1 = function() { return z; }; -} -{ - let z = 'z2 value'; - f2 = function() { return z; }; -} - -// ---------------------------------------------------------------------------- - -assert.equal('z1 value', f1()); -assert.equal('z2 value', f2()); diff --git a/test/fixtures/traceur/Scope/BlockBinding4.js b/test/fixtures/traceur/Scope/BlockBinding4.js deleted file mode 100644 index b22f6af158..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding4.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -let result = []; -for (let a = 1; a < 3; a++) { - result.push( - function() { return 'for ' + a; } - ); -} - -// ---------------------------------------------------------------------------- - -assert.equal('for 1', result[0]()); -assert.equal('for 2', result[1]()); -assert.equal(2, result.length); diff --git a/test/fixtures/traceur/Scope/BlockBinding5.js b/test/fixtures/traceur/Scope/BlockBinding5.js deleted file mode 100644 index 92284dc856..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding5.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --block-binding - -let result = []; -for (let i = 1; i < 3; i ++) { - for (let j = 9; j > 7; j --) { - result.push( - function() { return i + ':' + j; } - ); - } -} - -// ---------------------------------------------------------------------------- - -assert.equal('1:9', result[0]()); -assert.equal('1:8', result[1]()); -assert.equal('2:9', result[2]()); -assert.equal('2:8', result[3]()); -assert.equal(4, result.length); diff --git a/test/fixtures/traceur/Scope/BlockBinding6.js b/test/fixtures/traceur/Scope/BlockBinding6.js deleted file mode 100644 index abaf0feb5d..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding6.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -function testBlock() { - // Test function expressions. - { - var x = function g() { return 'g'; } || function h() { return 'h'; }; - return x; - } -} - -// ---------------------------------------------------------------------------- - -var result = testBlock(); -assert.equal('g', result()); diff --git a/test/fixtures/traceur/Scope/BlockBinding7.js b/test/fixtures/traceur/Scope/BlockBinding7.js deleted file mode 100644 index b3fa8ddd15..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding7.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --block-binding - -function blockTest() { - { - let x = 'let x value'; - function g() { - return x; - } - return g; - } -} - -// ---------------------------------------------------------------------------- - -assert.equal('let x value', blockTest()()); diff --git a/test/fixtures/traceur/Scope/BlockBinding8.js b/test/fixtures/traceur/Scope/BlockBinding8.js deleted file mode 100644 index ed1f6877b0..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding8.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --block-binding - -function f() { - return 'outer'; -} - -{ - function f() { - return 'inner'; - } - - assert.equal('inner', f()); -} - -assert.equal('outer', f()); diff --git a/test/fixtures/traceur/Scope/BlockBinding9.js b/test/fixtures/traceur/Scope/BlockBinding9.js deleted file mode 100644 index 3a88b3b819..0000000000 --- a/test/fixtures/traceur/Scope/BlockBinding9.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --block-binding - -function f() { - return 'outer'; -} - -{ - (function f() { - return 'inner'; - }); - - assert.equal('outer', f()); -} - -assert.equal('outer', f()); diff --git a/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js b/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js deleted file mode 100644 index 7db18e2948..0000000000 --- a/test/fixtures/traceur/Scope/BlockBindingSiblingRefenceError.js +++ /dev/null @@ -1,6 +0,0 @@ -assert.throws(() => { - { - let inner = 'inner value'; - } - var x = inner; -}, ReferenceError); diff --git a/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js b/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js deleted file mode 100644 index 3f679a351d..0000000000 --- a/test/fixtures/traceur/Scope/DeconstructingBlockBinding.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --block-binding - -if (true) { - let [a,b] = [1,2]; - const [c,d] = [4,5]; -} -if (true) { - let {x: [{e}, f], g} = {x: [{e:4}, 5], g: 6}; - const a = 0, [b, {c, x: [d]}] = [1, {c: 2, x: [3]}]; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLet.js b/test/fixtures/traceur/Scope/DeepNestedLet.js deleted file mode 100644 index c7433749ca..0000000000 --- a/test/fixtures/traceur/Scope/DeepNestedLet.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --block-binding - -var a = 'var a'; -{ - var b = 'var b'; - { - var c = 'var c'; - let d = 'let d'; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetConst.js b/test/fixtures/traceur/Scope/DeepNestedLetConst.js deleted file mode 100644 index 3bf59e93d6..0000000000 --- a/test/fixtures/traceur/Scope/DeepNestedLetConst.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -var a = 'var a'; -{ - var b = 'var b'; - { - let c = 'let c'; - { - const d = 'const d'; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetVar.js b/test/fixtures/traceur/Scope/DeepNestedLetVar.js deleted file mode 100644 index fb459cb060..0000000000 --- a/test/fixtures/traceur/Scope/DeepNestedLetVar.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -var a = 'var a'; -{ - var b = 'var b'; - { - let c = 'let c'; - { - var d = 'var d'; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js b/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js deleted file mode 100644 index e70b8eb3fc..0000000000 --- a/test/fixtures/traceur/Scope/DeepNestedLetVarNoInit.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -var var_a; -{ - var var_b; - { - let let_c = 'let c'; - { - var var_d; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js b/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js deleted file mode 100644 index ca13528d06..0000000000 --- a/test/fixtures/traceur/Scope/Error_ConstMissingInitializer.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --block-binding -// Error: :4:15: const variables must have an initializer - -const x = 1, y; diff --git a/test/fixtures/traceur/Scope/Error_Disabled.js b/test/fixtures/traceur/Scope/Error_Disabled.js deleted file mode 100644 index 2a4950fa44..0000000000 --- a/test/fixtures/traceur/Scope/Error_Disabled.js +++ /dev/null @@ -1,6 +0,0 @@ -// Options: --block-binding=false -// Error: :5:3: Unexpected token let - -{ - let x = 42; -} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js deleted file mode 100644 index 751de8a5d5..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForInWithInitializerConst.js +++ /dev/null @@ -1,5 +0,0 @@ -// Options: --block-binding -// Error: :4:18: Unexpected token in - -for (const i = 0 in {}) { -} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js deleted file mode 100644 index 9f5fb459e6..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForInWithInitializerLet.js +++ /dev/null @@ -1,5 +0,0 @@ -// Options: --block-binding -// Error: :4:16: Unexpected token in - -for (let i = 0 in {}) { -} diff --git a/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js b/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js deleted file mode 100644 index f154d2202e..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForInWithInitializerVar.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding -// Error: :7:22: Unexpected token in - -var x = 0; - -// ES6 does not allow this. -for (var i = (x = 1) in {}) { -} - -assert.equal(1, x); diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js deleted file mode 100644 index d6498c8a36..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerConst.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding -// Error: :8:18: Unexpected token of - -function* gen() { - yield 1; -} - -for (const i = 0 of gen()) { -} diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js deleted file mode 100644 index b7578b9060..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerLet.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding -// Error: :8:16: Unexpected token of - -function* gen() { - yield 1; -} - -for (let i = 0 of gen()) { -} diff --git a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js b/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js deleted file mode 100644 index c41cf1aff9..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForOfWithInitializerVar.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding -// Error: :8:16: Unexpected token of - -function* gen() { - yield 1; -} - -for (var i = 0 of gen()) { -} diff --git a/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js b/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js deleted file mode 100644 index 41fe8df2f3..0000000000 --- a/test/fixtures/traceur/Scope/Error_ForWithoutInitializerConst.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --block-binding -// Error: :5:13: const variables must have an initializer - -var i = 0; -for (const x; i < 3; i++) { - -} diff --git a/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js b/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js deleted file mode 100644 index 58ca667d5c..0000000000 --- a/test/fixtures/traceur/Scope/Error_FunctionExpressionInBlock.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding -// Error: functionExpression is not defined - -{ - (function functionExpression() { - return 'inner'; - }); - - functionExpression; // function expression doesn't add name to the scope. -} diff --git a/test/fixtures/traceur/Scope/LetForInInitializers1.js b/test/fixtures/traceur/Scope/LetForInInitializers1.js deleted file mode 100644 index c4f02e7790..0000000000 --- a/test/fixtures/traceur/Scope/LetForInInitializers1.js +++ /dev/null @@ -1,22 +0,0 @@ -// Options: --block-binding - -var result; -{ - let let_result = []; - let let_array = ['one', 'two', 'three']; - for (var index in let_array) { - let let_index = index; - let let_value = let_array[let_index]; - let_result.push( - function() { - return [let_index, let_value]; - }); - } - result = let_result; -} - -// ---------------------------------------------------------------------------- - -assertArrayEquals(['0', 'one'], result[0]()); -assertArrayEquals(['1', 'two'], result[1]()); -assertArrayEquals(['2', 'three'], result[2]()); diff --git a/test/fixtures/traceur/Scope/LetForInitializers1.js b/test/fixtures/traceur/Scope/LetForInitializers1.js deleted file mode 100644 index 19dbcfcab4..0000000000 --- a/test/fixtures/traceur/Scope/LetForInitializers1.js +++ /dev/null @@ -1,14 +0,0 @@ -// Options: --block-binding - -var result; -{ - let let_x = 'let x'; - let let_l = []; - for (var var_x = 1, var_y = 2, var_z = 3; var_x < 10; var_x ++) { - let l_x = var_x, l_y = var_y, l_z = var_z; - let_l.push( function() { return [ l_x, l_y, l_z ]; } ); - } - result = let_l; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInClass.js b/test/fixtures/traceur/Scope/LetInClass.js deleted file mode 100644 index fa248e8257..0000000000 --- a/test/fixtures/traceur/Scope/LetInClass.js +++ /dev/null @@ -1,19 +0,0 @@ -// Options: --block-binding - -class LetInClass { - get z() { - let let_z = 10; - return let_z; - } - - set z(v) { - let let_zv = v; - } - - distance() { - let dist = this.y - this.x; - return dist; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInClosure.js b/test/fixtures/traceur/Scope/LetInClosure.js deleted file mode 100644 index 9d2e89dd76..0000000000 --- a/test/fixtures/traceur/Scope/LetInClosure.js +++ /dev/null @@ -1,25 +0,0 @@ -// Options: --block-binding - -function letInClosure(n) { - var l = []; - for (var i = 0; i < n; i ++) { - let let_i = i; - if (i % 3 == 0) { - continue; - } - l.push(function() { - return let_i; - }); - } - return l; -} - -// ---------------------------------------------------------------------------- - -var result = letInClosure(10); -assert.equal(1, result[0]()); -assert.equal(2, result[1]()); -assert.equal(4, result[2]()); -assert.equal(5, result[3]()); -assert.equal(7, result[4]()); -assert.equal(8, result[5]()); diff --git a/test/fixtures/traceur/Scope/LetInFor.js b/test/fixtures/traceur/Scope/LetInFor.js deleted file mode 100644 index c7347c3fea..0000000000 --- a/test/fixtures/traceur/Scope/LetInFor.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x ++) { - let y = 'let y'; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreak.js b/test/fixtures/traceur/Scope/LetInForBreak.js deleted file mode 100644 index 5ccde528d6..0000000000 --- a/test/fixtures/traceur/Scope/LetInForBreak.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x ++) { - let y = 'let y'; - if (x % 2 == 0) { - break; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreakInner.js b/test/fixtures/traceur/Scope/LetInForBreakInner.js deleted file mode 100644 index b0374fecac..0000000000 --- a/test/fixtures/traceur/Scope/LetInForBreakInner.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - break; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForBreakNamed.js b/test/fixtures/traceur/Scope/LetInForBreakNamed.js deleted file mode 100644 index 4b72973f4a..0000000000 --- a/test/fixtures/traceur/Scope/LetInForBreakNamed.js +++ /dev/null @@ -1,13 +0,0 @@ -// Options: --block-binding - -outer: -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - break outer; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinue.js b/test/fixtures/traceur/Scope/LetInForContinue.js deleted file mode 100644 index 0d3e0318f7..0000000000 --- a/test/fixtures/traceur/Scope/LetInForContinue.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x ++) { - let y = 'let y'; - if (x % 2 == 0) { - continue; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinueInner.js b/test/fixtures/traceur/Scope/LetInForContinueInner.js deleted file mode 100644 index 7231db3399..0000000000 --- a/test/fixtures/traceur/Scope/LetInForContinueInner.js +++ /dev/null @@ -1,12 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - continue; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInForContinueNamed.js b/test/fixtures/traceur/Scope/LetInForContinueNamed.js deleted file mode 100644 index 5907676016..0000000000 --- a/test/fixtures/traceur/Scope/LetInForContinueNamed.js +++ /dev/null @@ -1,13 +0,0 @@ -// Options: --block-binding - -outer: -for (var x = 0; x < 10; x ++) { - for (var y = 0; y < 10; y ++) { - let z = 'let z'; - if (x == 7) { - continue outer; - } - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInProperties.js b/test/fixtures/traceur/Scope/LetInProperties.js deleted file mode 100644 index 22c2378e9e..0000000000 --- a/test/fixtures/traceur/Scope/LetInProperties.js +++ /dev/null @@ -1,19 +0,0 @@ -// Options: --block-binding - -var object = { - get x() { - while (true) { - let let_x = 'let x'; - return let_x; - } - }, - - set x(v) { - do { - let let_v = v; - this.v = let_v; - } while (false); - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor1.js b/test/fixtures/traceur/Scope/LetInitializerFor1.js deleted file mode 100644 index dd3ac7cc70..0000000000 --- a/test/fixtures/traceur/Scope/LetInitializerFor1.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --block-binding - -for (let x = 1; x < 10; x++) { - x; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor2.js b/test/fixtures/traceur/Scope/LetInitializerFor2.js deleted file mode 100644 index 46f0c97ad5..0000000000 --- a/test/fixtures/traceur/Scope/LetInitializerFor2.js +++ /dev/null @@ -1,8 +0,0 @@ -// Options: --block-binding - -for (let x = 1, y = 2, z = 3; x < 10; x ++) { - y++; - z++; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerFor3.js b/test/fixtures/traceur/Scope/LetInitializerFor3.js deleted file mode 100644 index ff742b3cdc..0000000000 --- a/test/fixtures/traceur/Scope/LetInitializerFor3.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding - -for (let x = 1, y = x + 1; x < 10 && y != 0; x ++, y *= 2) { - if (y > 300) { - continue; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetInitializerForIn.js b/test/fixtures/traceur/Scope/LetInitializerForIn.js deleted file mode 100644 index 8bab17d1a6..0000000000 --- a/test/fixtures/traceur/Scope/LetInitializerForIn.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding - -let sum = 0; -let a = [1,2,3]; -for (let x in a) { - sum = sum + a[x]; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetNoInitializer.js b/test/fixtures/traceur/Scope/LetNoInitializer.js deleted file mode 100644 index 3018218fc8..0000000000 --- a/test/fixtures/traceur/Scope/LetNoInitializer.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -var x = 1; -{ - let x; - assert.equal(undefined, x); - x = 2; - assert.equal(2, x); -} -assert.equal(1, x); diff --git a/test/fixtures/traceur/Scope/LetNoInitializerGlobal.js b/test/fixtures/traceur/Scope/LetNoInitializerGlobal.js deleted file mode 100644 index 58426a151e..0000000000 --- a/test/fixtures/traceur/Scope/LetNoInitializerGlobal.js +++ /dev/null @@ -1,6 +0,0 @@ -// Options: --block-binding - -let x2; -assert.equal(undefined, x2); -x2 = 2; -assert.equal(2, x2); diff --git a/test/fixtures/traceur/Scope/LetReinitializeInLoop.js b/test/fixtures/traceur/Scope/LetReinitializeInLoop.js deleted file mode 100644 index c16bd2326d..0000000000 --- a/test/fixtures/traceur/Scope/LetReinitializeInLoop.js +++ /dev/null @@ -1,9 +0,0 @@ -(function() { - var i = 0; - while (i < 3) { - let x; - assert.equal(undefined, x); - x = i; - i++; - } -})(); diff --git a/test/fixtures/traceur/Scope/LetWithFor.js b/test/fixtures/traceur/Scope/LetWithFor.js deleted file mode 100644 index f6ac1982eb..0000000000 --- a/test/fixtures/traceur/Scope/LetWithFor.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -for (var x = 0; x < 10; x++) { - let let_y = 'let y'; - for (var for_z = 0; for_z < 2; for_z ++) { - break; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithForIn.js b/test/fixtures/traceur/Scope/LetWithForIn.js deleted file mode 100644 index 6b75ebf3b9..0000000000 --- a/test/fixtures/traceur/Scope/LetWithForIn.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -for (var x in [1,2,3]) { - let let_y = x; - for (var for_in_z in [4,5,6]) { - continue; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithSwitch.js b/test/fixtures/traceur/Scope/LetWithSwitch.js deleted file mode 100644 index 756d7ecba7..0000000000 --- a/test/fixtures/traceur/Scope/LetWithSwitch.js +++ /dev/null @@ -1,16 +0,0 @@ -// Options: --block-binding - -for (var i = 0; i < 5; i ++) { - let let_x = 'let x'; - - switch (i) { - case 0: - break; - case 2: - break; - default: - break; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/LetWithSwitch2.js b/test/fixtures/traceur/Scope/LetWithSwitch2.js deleted file mode 100644 index ea92dbf7c8..0000000000 --- a/test/fixtures/traceur/Scope/LetWithSwitch2.js +++ /dev/null @@ -1,16 +0,0 @@ -// Options: --block-binding - -for (var i = 0; i < 5; i ++) { - let let_x = 'let x'; - - switch (i) { - case 0: - continue; - case 2: - break; - default: - break; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NameBindingInFunction.js b/test/fixtures/traceur/Scope/NameBindingInFunction.js deleted file mode 100644 index 3bc7634018..0000000000 --- a/test/fixtures/traceur/Scope/NameBindingInFunction.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -{ - function f() { - return f; - } - var g = f; - f = 42; - assert.equal(42, g()); -} diff --git a/test/fixtures/traceur/Scope/NestedFunction1.js b/test/fixtures/traceur/Scope/NestedFunction1.js deleted file mode 100644 index 297042dd57..0000000000 --- a/test/fixtures/traceur/Scope/NestedFunction1.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding - -function nestedFunction1() { - return function() { - let let_x = 'let x'; - } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedFunction2.js b/test/fixtures/traceur/Scope/NestedFunction2.js deleted file mode 100644 index 85238bc29e..0000000000 --- a/test/fixtures/traceur/Scope/NestedFunction2.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --block-binding - -function nestedFunction2() { - let let_func = function() { - let let_x = 'let x'; - } - return let_func; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedFunction3.js b/test/fixtures/traceur/Scope/NestedFunction3.js deleted file mode 100644 index 3ffda64978..0000000000 --- a/test/fixtures/traceur/Scope/NestedFunction3.js +++ /dev/null @@ -1,8 +0,0 @@ -// Options: --block-binding - -function nestedFunction3() { - let let_x = 'let x'; - function function_foo() { } -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedLet.js b/test/fixtures/traceur/Scope/NestedLet.js deleted file mode 100644 index 54b2e91afa..0000000000 --- a/test/fixtures/traceur/Scope/NestedLet.js +++ /dev/null @@ -1,11 +0,0 @@ -// Options: --block-binding - -var x = 'var'; -{ - let y = 'let 1'; -} -{ - let y = 'let 2'; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Scope/NestedLetConflict.js b/test/fixtures/traceur/Scope/NestedLetConflict.js deleted file mode 100644 index 808a556509..0000000000 --- a/test/fixtures/traceur/Scope/NestedLetConflict.js +++ /dev/null @@ -1,12 +0,0 @@ -(function() { - var x = 1; - function f() { - assert.equal(x, 1); - { - let x = 2; - assert.equal(x, 2); - } - assert.equal(x, 1); - } - f(); -})(); diff --git a/test/fixtures/traceur/Scope/Regress1381.js b/test/fixtures/traceur/Scope/Regress1381.js deleted file mode 100644 index ab64e59a9b..0000000000 --- a/test/fixtures/traceur/Scope/Regress1381.js +++ /dev/null @@ -1,8 +0,0 @@ -function test() { - let ret = true; - while (false) - for (let i = 0; i < 1; i++) - ret = () => i; - return ret -} -assert.isTrue(test()); diff --git a/test/fixtures/traceur/Scope/SiblingScopes.js b/test/fixtures/traceur/Scope/SiblingScopes.js deleted file mode 100644 index c3e230e98c..0000000000 --- a/test/fixtures/traceur/Scope/SiblingScopes.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --free-variable-checker=false - -assert.throws(() => { - { - let testVariable = 1; - assert.equal(testVariable, 1); - } - - { - let testVariable = 2; - assert.equal(testVariable, 2); - } - - testVariable; -}, ReferenceError); diff --git a/test/fixtures/traceur/Scope/TopLevelLet.js b/test/fixtures/traceur/Scope/TopLevelLet.js deleted file mode 100644 index 0f2db5940b..0000000000 --- a/test/fixtures/traceur/Scope/TopLevelLet.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --block-binding - -let x = 'let'; - -// ---------------------------------------------------------------------------- - -assert.equal(x, 'let'); \ No newline at end of file diff --git a/test/fixtures/traceur/Scope/TopLevelLetConst.js b/test/fixtures/traceur/Scope/TopLevelLetConst.js deleted file mode 100644 index 3b3adfbcfc..0000000000 --- a/test/fixtures/traceur/Scope/TopLevelLetConst.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding - -let x = 'let'; -const y = 'const'; - -// ---------------------------------------------------------------------------- - -assert.equal('let', x); -assert.equal('const', y); diff --git a/test/fixtures/traceur/Scope/TopLevelLetVar.js b/test/fixtures/traceur/Scope/TopLevelLetVar.js deleted file mode 100644 index a90a4d5397..0000000000 --- a/test/fixtures/traceur/Scope/TopLevelLetVar.js +++ /dev/null @@ -1,9 +0,0 @@ -// Options: --block-binding - -let x = 'let'; -var y = 'var'; - -// ---------------------------------------------------------------------------- - -assert.equal('let', x); -assert.equal('var', y); diff --git a/test/fixtures/traceur/Spread/Array.js b/test/fixtures/traceur/Spread/Array.js deleted file mode 100644 index 0819b914e1..0000000000 --- a/test/fixtures/traceur/Spread/Array.js +++ /dev/null @@ -1,14 +0,0 @@ -var a = []; -var b = [0, ...a]; -var c = [...b, ...b]; -var d; -var e = [0, ...d = [1, 2], 3]; -var f = [0, ...[[1, 2], [3, 4]], 5]; - -// ---------------------------------------------------------------------------- - -assertArrayEquals([0], b); -assertArrayEquals([0, 0], c); -assertArrayEquals([1, 2], d); -assertArrayEquals([0, 1, 2, 3], e); -assertArrayEquals([0, [1, 2], [3, 4], 5], f); diff --git a/test/fixtures/traceur/Spread/Call.js b/test/fixtures/traceur/Spread/Call.js deleted file mode 100644 index 34ad14fdac..0000000000 --- a/test/fixtures/traceur/Spread/Call.js +++ /dev/null @@ -1,14 +0,0 @@ -function* G() { - yield 'hi'; - yield 'there'; -} - -function f(...args) { - return args; -} - -var result = f(0, ...[1, 2], 3, ...G()); -assertArrayEquals([0, 1, 2, 3, 'hi', 'there'], result); - -result = f(...G()); -assertArrayEquals(['hi', 'there'], result); diff --git a/test/fixtures/traceur/Spread/CallWithUndefined.js b/test/fixtures/traceur/Spread/CallWithUndefined.js deleted file mode 100644 index 1243fa0e79..0000000000 --- a/test/fixtures/traceur/Spread/CallWithUndefined.js +++ /dev/null @@ -1,8 +0,0 @@ -function f(...args) { - return args; -} - -assert.throw(function() { - // Should throw due to ToObject(undefined) - f(0, ...undefined, 1); -}, TypeError) diff --git a/test/fixtures/traceur/Spread/Class.js b/test/fixtures/traceur/Spread/Class.js deleted file mode 100644 index 7d9bafc2d3..0000000000 --- a/test/fixtures/traceur/Spread/Class.js +++ /dev/null @@ -1,17 +0,0 @@ -class SpreadTestClass { - constructor(x, y) { - this.SpreadTestClass = SpreadTestClass; - this.self = this; - this.x = x; - this.y = y; - } -} - -var object = new SpreadTestClass(...[0, 1]); - -// ---------------------------------------------------------------------------- - -assert.equal(object.x, 0); -assert.equal(object.y, 1); -assert.equal(object.self, object); -assert.isTrue(object instanceof object.SpreadTestClass); diff --git a/test/fixtures/traceur/Spread/Error_Disabled.js b/test/fixtures/traceur/Spread/Error_Disabled.js deleted file mode 100644 index 75b75b251a..0000000000 --- a/test/fixtures/traceur/Spread/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --spread=false -// Error: :4:8: Unexpected token ... - -[0, 1, ...[2, 3]]; diff --git a/test/fixtures/traceur/Spread/Iterators.js b/test/fixtures/traceur/Spread/Iterators.js deleted file mode 100644 index af5dae5f0b..0000000000 --- a/test/fixtures/traceur/Spread/Iterators.js +++ /dev/null @@ -1,17 +0,0 @@ -function* G() { - yield 1; - yield 2; - yield 3; -} - -var a = [...G()]; -var b = [4, ...G()]; -var c = [...G(), 4]; -var d = [4, ...G(), 5]; - -// ---------------------------------------------------------------------------- - -assertArrayEquals([1, 2, 3], a); -assertArrayEquals([4, 1, 2, 3], b); -assertArrayEquals([1, 2, 3, 4], c); -assertArrayEquals([4, 1, 2, 3, 5], d); diff --git a/test/fixtures/traceur/Spread/MethodCall.js b/test/fixtures/traceur/Spread/MethodCall.js deleted file mode 100644 index 72f08531f7..0000000000 --- a/test/fixtures/traceur/Spread/MethodCall.js +++ /dev/null @@ -1,18 +0,0 @@ -var obj = { - method: function(...args) { - return { - self: this, - args: args - }; - } -}; - -var result = { - obj: obj, - result: obj.method(0, ...[1, 2], 3) -}; - -// ---------------------------------------------------------------------------- - -assert.equal(result.obj, result.result.self); -assertArrayEquals([0, 1, 2, 3], result.result.args); diff --git a/test/fixtures/traceur/Spread/MethodCallQuotedName.js b/test/fixtures/traceur/Spread/MethodCallQuotedName.js deleted file mode 100644 index 7440fd9b97..0000000000 --- a/test/fixtures/traceur/Spread/MethodCallQuotedName.js +++ /dev/null @@ -1,18 +0,0 @@ -var obj = { - method: function(...args) { - return { - self: this, - args: args - }; - } -}; - -var result = { - obj: obj, - result: obj['meth' + 'od'](0, ...[1, 2], 3) -}; - -// ---------------------------------------------------------------------------- - -assert.equal(result.obj, result.result.self); -assertArrayEquals([0, 1, 2, 3], result.result.args); diff --git a/test/fixtures/traceur/Spread/New.js b/test/fixtures/traceur/Spread/New.js deleted file mode 100644 index edd3204077..0000000000 --- a/test/fixtures/traceur/Spread/New.js +++ /dev/null @@ -1,26 +0,0 @@ -function* G() { - yield 3; - yield 4; -} - -function F(x, y, z, a, b) { - this.x = x; - this.y = y; - this.z = z; - this.a = a; - this.b = b; - this.self = this; - this.F = F; -} - -var object = new F(0, ...[1, 2], ...G()); - -// ---------------------------------------------------------------------------- - -assert.equal(0, object.x); -assert.equal(1, object.y); -assert.equal(2, object.z); -assert.equal(3, object.a); -assert.equal(4, object.b); -assert.equal(object, object.self); -assert.isTrue(object instanceof object.F); diff --git a/test/fixtures/traceur/Spread/New2.js b/test/fixtures/traceur/Spread/New2.js deleted file mode 100644 index 79e9484727..0000000000 --- a/test/fixtures/traceur/Spread/New2.js +++ /dev/null @@ -1,23 +0,0 @@ -function G() {} - -function F(x, y, z) { - var obj = new G; - obj.x = x; - obj.y = y; - obj.z = z; - obj.f = this; - obj.G = G; - obj.F = F; - return obj; -} - -var object = new F(0, ...[1, 2]); - -// ---------------------------------------------------------------------------- - -assert.equal(0, object.x); -assert.equal(1, object.y); -assert.equal(2, object.z); -assert.isFalse(object instanceof object.F); -assert.isTrue(object instanceof object.G); -assert.isTrue(object.f instanceof object.F); diff --git a/test/fixtures/traceur/Spread/NewBuiltin.js b/test/fixtures/traceur/Spread/NewBuiltin.js deleted file mode 100644 index c718932b90..0000000000 --- a/test/fixtures/traceur/Spread/NewBuiltin.js +++ /dev/null @@ -1,7 +0,0 @@ -var d = new Date(...[2011, 4, 3]); - -// ---------------------------------------------------------------------------- - -assert.equal(2011, d.getFullYear()); -assert.equal(4, d.getMonth()); -assert.equal(3, d.getDate()); diff --git a/test/fixtures/traceur/Spread/NoIterator.js b/test/fixtures/traceur/Spread/NoIterator.js deleted file mode 100644 index d9f757f408..0000000000 --- a/test/fixtures/traceur/Spread/NoIterator.js +++ /dev/null @@ -1 +0,0 @@ -assert.throw(() => [...{}], TypeError); diff --git a/test/fixtures/traceur/Spread/NotAnObject.js b/test/fixtures/traceur/Spread/NotAnObject.js deleted file mode 100644 index 4b68c2c9e1..0000000000 --- a/test/fixtures/traceur/Spread/NotAnObject.js +++ /dev/null @@ -1 +0,0 @@ -assert.throw(() => [...null], TypeError); diff --git a/test/fixtures/traceur/Spread/String.js b/test/fixtures/traceur/Spread/String.js deleted file mode 100644 index fcef0b86f5..0000000000 --- a/test/fixtures/traceur/Spread/String.js +++ /dev/null @@ -1,13 +0,0 @@ -var a = ''; -var b = ['b', ...a]; -var c = [...b, ...b]; -var d; -var e = [0, ...d = '12', 3]; -var f = [... new String('abc')]; - -// ---------------------------------------------------------------------------- - -assertArrayEquals(['b'], b); -assertArrayEquals(['b', 'b'], c); -assertArrayEquals([0, '1', '2', 3], e); -assertArrayEquals(['a', 'b', 'c'], f); diff --git a/test/fixtures/traceur/Spread/Type.js b/test/fixtures/traceur/Spread/Type.js deleted file mode 100644 index bd46c4200d..0000000000 --- a/test/fixtures/traceur/Spread/Type.js +++ /dev/null @@ -1,29 +0,0 @@ - -assert.throw(() => { - [0, ...{}, 1]; -}, TypeError); - -assert.throw(() => { - [0, ...{0: 1, 1: 2, length: 2}, 3]; -}, TypeError); - -assert.throw(() => { - [0, ...true, 1]; -}, TypeError); - -assert.throw(() => { - [0, ...1, 1]; -}, TypeError); - -assert.throw(() => { - [0, ...function() {}, 1]; -}, TypeError); - -assert.throw(function() { - [0, ...null, 1]; -}, TypeError); - -assert.throw(function() { - [0, ...undefined, 1]; -}, TypeError); - diff --git a/test/fixtures/traceur/StringExtras/CodePointAt.js b/test/fixtures/traceur/StringExtras/CodePointAt.js deleted file mode 100644 index 54369eb5a8..0000000000 --- a/test/fixtures/traceur/StringExtras/CodePointAt.js +++ /dev/null @@ -1,76 +0,0 @@ -// Tests taken from https://mths.be/codepointat - -assert.equal(String.prototype.codePointAt.length, 1); - -// String that starts with a BMP symbol -assert.equal('abc\uD834\uDF06def'.codePointAt(''), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt('_'), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(-Infinity), undefined); -assert.equal('abc\uD834\uDF06def'.codePointAt(-1), undefined); -assert.equal('abc\uD834\uDF06def'.codePointAt(-0), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(0), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(3), 0x1D306); -assert.equal('abc\uD834\uDF06def'.codePointAt(4), 0xDF06); -assert.equal('abc\uD834\uDF06def'.codePointAt(5), 0x64); -assert.equal('abc\uD834\uDF06def'.codePointAt(42), undefined); -assert.equal('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); -assert.equal('abc\uD834\uDF06def'.codePointAt(Infinity), undefined); -assert.equal('abc\uD834\uDF06def'.codePointAt(NaN), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(false), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(null), 0x61); -assert.equal('abc\uD834\uDF06def'.codePointAt(undefined), 0x61); - -// String that starts with an astral symbol -assert.equal('\uD834\uDF06def'.codePointAt(''), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt('1'), 0xDF06); -assert.equal('\uD834\uDF06def'.codePointAt('_'), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(-1), undefined); -assert.equal('\uD834\uDF06def'.codePointAt(-0), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(0), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(1), 0xDF06); -assert.equal('\uD834\uDF06def'.codePointAt(42), undefined); -assert.equal('\uD834\uDF06def'.codePointAt(false), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(null), 0x1D306); -assert.equal('\uD834\uDF06def'.codePointAt(undefined), 0x1D306); - -// Lone high surrogates -assert.equal('\uD834abc'.codePointAt(''), 0xD834); -assert.equal('\uD834abc'.codePointAt('_'), 0xD834); -assert.equal('\uD834abc'.codePointAt(), 0xD834); -assert.equal('\uD834abc'.codePointAt(-1), undefined); -assert.equal('\uD834abc'.codePointAt(-0), 0xD834); -assert.equal('\uD834abc'.codePointAt(0), 0xD834); -assert.equal('\uD834abc'.codePointAt(false), 0xD834); -assert.equal('\uD834abc'.codePointAt(NaN), 0xD834); -assert.equal('\uD834abc'.codePointAt(null), 0xD834); -assert.equal('\uD834abc'.codePointAt(undefined), 0xD834); - -// Lone low surrogates -assert.equal('\uDF06abc'.codePointAt(''), 0xDF06); -assert.equal('\uDF06abc'.codePointAt('_'), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(-1), undefined); -assert.equal('\uDF06abc'.codePointAt(-0), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(0), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(false), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(NaN), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(null), 0xDF06); -assert.equal('\uDF06abc'.codePointAt(undefined), 0xDF06); - -assert.throw(function() { String.prototype.codePointAt.call(undefined); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.call(undefined, 4); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.call(null); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.call(null, 4); }, TypeError); -assert.equal(String.prototype.codePointAt.call(42, 0), 0x34); -assert.equal(String.prototype.codePointAt.call(42, 1), 0x32); -assert.equal(String.prototype.codePointAt.call({ 'toString': function() { return 'abc'; } }, 2), 0x63); - -assert.throw(function() { String.prototype.codePointAt.apply(undefined); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.apply(undefined, [4]); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.apply(null); }, TypeError); -assert.throw(function() { String.prototype.codePointAt.apply(null, [4]); }, TypeError); -assert.equal(String.prototype.codePointAt.apply(42, [0]), 0x34); -assert.equal(String.prototype.codePointAt.apply(42, [1]), 0x32); -assert.equal(String.prototype.codePointAt.apply({ 'toString': function() { return 'abc'; } }, [2]), 0x63); diff --git a/test/fixtures/traceur/StringExtras/EndsWith.js b/test/fixtures/traceur/StringExtras/EndsWith.js deleted file mode 100644 index b4585b2e8d..0000000000 --- a/test/fixtures/traceur/StringExtras/EndsWith.js +++ /dev/null @@ -1,217 +0,0 @@ -// Tests taken from https://mths.be/endswith - -assert.equal(String.prototype.endsWith.length, 1); - -assert.equal('undefined'.endsWith(), true); -assert.equal('undefined'.endsWith(undefined), true); -assert.equal('undefined'.endsWith(null), false); -assert.equal('null'.endsWith(), false); -assert.equal('null'.endsWith(undefined), false); -assert.equal('null'.endsWith(null), true); - -assert.equal('abc'.endsWith(), false); -assert.equal('abc'.endsWith(''), true); -assert.equal('abc'.endsWith('\0'), false); -assert.equal('abc'.endsWith('c'), true); -assert.equal('abc'.endsWith('b'), false); -assert.equal('abc'.endsWith('ab'), false); -assert.equal('abc'.endsWith('bc'), true); -assert.equal('abc'.endsWith('abc'), true); -assert.equal('abc'.endsWith('bcd'), false); -assert.equal('abc'.endsWith('abcd'), false); -assert.equal('abc'.endsWith('bcde'), false); - -assert.equal('abc'.endsWith('', NaN), true); -assert.equal('abc'.endsWith('\0', NaN), false); -assert.equal('abc'.endsWith('c', NaN), false); -assert.equal('abc'.endsWith('b', NaN), false); -assert.equal('abc'.endsWith('ab', NaN), false); -assert.equal('abc'.endsWith('bc', NaN), false); -assert.equal('abc'.endsWith('abc', NaN), false); -assert.equal('abc'.endsWith('bcd', NaN), false); -assert.equal('abc'.endsWith('abcd', NaN), false); -assert.equal('abc'.endsWith('bcde', NaN), false); - -assert.equal('abc'.endsWith('', false), true); -assert.equal('abc'.endsWith('\0', false), false); -assert.equal('abc'.endsWith('c', false), false); -assert.equal('abc'.endsWith('b', false), false); -assert.equal('abc'.endsWith('ab', false), false); -assert.equal('abc'.endsWith('bc', false), false); -assert.equal('abc'.endsWith('abc', false), false); -assert.equal('abc'.endsWith('bcd', false), false); -assert.equal('abc'.endsWith('abcd', false), false); -assert.equal('abc'.endsWith('bcde', false), false); - -assert.equal('abc'.endsWith('', undefined), true); -assert.equal('abc'.endsWith('\0', undefined), false); -assert.equal('abc'.endsWith('c', undefined), true); -assert.equal('abc'.endsWith('b', undefined), false); -assert.equal('abc'.endsWith('ab', undefined), false); -assert.equal('abc'.endsWith('bc', undefined), true); -assert.equal('abc'.endsWith('abc', undefined), true); -assert.equal('abc'.endsWith('bcd', undefined), false); -assert.equal('abc'.endsWith('abcd', undefined), false); -assert.equal('abc'.endsWith('bcde', undefined), false); - -assert.equal('abc'.endsWith('', null), true); -assert.equal('abc'.endsWith('\0', null), false); -assert.equal('abc'.endsWith('c', null), false); -assert.equal('abc'.endsWith('b', null), false); -assert.equal('abc'.endsWith('ab', null), false); -assert.equal('abc'.endsWith('bc', null), false); -assert.equal('abc'.endsWith('abc', null), false); -assert.equal('abc'.endsWith('bcd', null), false); -assert.equal('abc'.endsWith('abcd', null), false); -assert.equal('abc'.endsWith('bcde', null), false); - -assert.equal('abc'.endsWith('', -Infinity), true); -assert.equal('abc'.endsWith('\0', -Infinity), false); -assert.equal('abc'.endsWith('c', -Infinity), false); -assert.equal('abc'.endsWith('b', -Infinity), false); -assert.equal('abc'.endsWith('ab', -Infinity), false); -assert.equal('abc'.endsWith('bc', -Infinity), false); -assert.equal('abc'.endsWith('abc', -Infinity), false); -assert.equal('abc'.endsWith('bcd', -Infinity), false); -assert.equal('abc'.endsWith('abcd', -Infinity), false); -assert.equal('abc'.endsWith('bcde', -Infinity), false); - -assert.equal('abc'.endsWith('', -1), true); -assert.equal('abc'.endsWith('\0', -1), false); -assert.equal('abc'.endsWith('c', -1), false); -assert.equal('abc'.endsWith('b', -1), false); -assert.equal('abc'.endsWith('ab', -1), false); -assert.equal('abc'.endsWith('bc', -1), false); -assert.equal('abc'.endsWith('abc', -1), false); -assert.equal('abc'.endsWith('bcd', -1), false); -assert.equal('abc'.endsWith('abcd', -1), false); -assert.equal('abc'.endsWith('bcde', -1), false); - -assert.equal('abc'.endsWith('', -0), true); -assert.equal('abc'.endsWith('\0', -0), false); -assert.equal('abc'.endsWith('c', -0), false); -assert.equal('abc'.endsWith('b', -0), false); -assert.equal('abc'.endsWith('ab', -0), false); -assert.equal('abc'.endsWith('bc', -0), false); -assert.equal('abc'.endsWith('abc', -0), false); -assert.equal('abc'.endsWith('bcd', -0), false); -assert.equal('abc'.endsWith('abcd', -0), false); -assert.equal('abc'.endsWith('bcde', -0), false); - -assert.equal('abc'.endsWith('', +0), true); -assert.equal('abc'.endsWith('\0', +0), false); -assert.equal('abc'.endsWith('c', +0), false); -assert.equal('abc'.endsWith('b', +0), false); -assert.equal('abc'.endsWith('ab', +0), false); -assert.equal('abc'.endsWith('bc', +0), false); -assert.equal('abc'.endsWith('abc', +0), false); -assert.equal('abc'.endsWith('bcd', +0), false); -assert.equal('abc'.endsWith('abcd', +0), false); -assert.equal('abc'.endsWith('bcde', +0), false); - -assert.equal('abc'.endsWith('', 1), true); -assert.equal('abc'.endsWith('\0', 1), false); -assert.equal('abc'.endsWith('c', 1), false); -assert.equal('abc'.endsWith('b', 1), false); -assert.equal('abc'.endsWith('ab', 1), false); -assert.equal('abc'.endsWith('bc', 1), false); -assert.equal('abc'.endsWith('abc', 1), false); -assert.equal('abc'.endsWith('bcd', 1), false); -assert.equal('abc'.endsWith('abcd', 1), false); -assert.equal('abc'.endsWith('bcde', 1), false); - -assert.equal('abc'.endsWith('', 2), true); -assert.equal('abc'.endsWith('\0', 2), false); -assert.equal('abc'.endsWith('c', 2), false); -assert.equal('abc'.endsWith('b', 2), true); -assert.equal('abc'.endsWith('ab', 2), true); -assert.equal('abc'.endsWith('bc', 2), false); -assert.equal('abc'.endsWith('abc', 2), false); -assert.equal('abc'.endsWith('bcd', 2), false); -assert.equal('abc'.endsWith('abcd', 2), false); -assert.equal('abc'.endsWith('bcde', 2), false); - -assert.equal('abc'.endsWith('', +Infinity), true); -assert.equal('abc'.endsWith('\0', +Infinity), false); -assert.equal('abc'.endsWith('c', +Infinity), true); -assert.equal('abc'.endsWith('b', +Infinity), false); -assert.equal('abc'.endsWith('ab', +Infinity), false); -assert.equal('abc'.endsWith('bc', +Infinity), true); -assert.equal('abc'.endsWith('abc', +Infinity), true); -assert.equal('abc'.endsWith('bcd', +Infinity), false); -assert.equal('abc'.endsWith('abcd', +Infinity), false); -assert.equal('abc'.endsWith('bcde', +Infinity), false); - -assert.equal('abc'.endsWith('', true), true); -assert.equal('abc'.endsWith('\0', true), false); -assert.equal('abc'.endsWith('c', true), false); -assert.equal('abc'.endsWith('b', true), false); -assert.equal('abc'.endsWith('ab', true), false); -assert.equal('abc'.endsWith('bc', true), false); -assert.equal('abc'.endsWith('abc', true), false); -assert.equal('abc'.endsWith('bcd', true), false); -assert.equal('abc'.endsWith('abcd', true), false); -assert.equal('abc'.endsWith('bcde', true), false); - -assert.equal('abc'.endsWith('', 'x'), true); -assert.equal('abc'.endsWith('\0', 'x'), false); -assert.equal('abc'.endsWith('c', 'x'), false); -assert.equal('abc'.endsWith('b', 'x'), false); -assert.equal('abc'.endsWith('ab', 'x'), false); -assert.equal('abc'.endsWith('bc', 'x'), false); -assert.equal('abc'.endsWith('abc', 'x'), false); -assert.equal('abc'.endsWith('bcd', 'x'), false); -assert.equal('abc'.endsWith('abcd', 'x'), false); -assert.equal('abc'.endsWith('bcde', 'x'), false); - -assert.equal('[a-z]+(bar)?'.endsWith('(bar)?'), true); -assert.throw(function() { '[a-z]+(bar)?'.endsWith(/(bar)?/); }, TypeError); -assert.equal('[a-z]+(bar)?'.endsWith('[a-z]+', 6), true); -assert.throw(function() { '[a-z]+(bar)?'.endsWith(/(bar)?/); }, TypeError); -assert.throw(function() { '[a-z]+/(bar)?/'.endsWith(/(bar)?/); }, TypeError); - -// https://mathiasbynens.be/notes/javascript-unicode#poo-test -var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; -assert.equal(string.endsWith(''), true); -assert.equal(string.endsWith('\xF1t\xEBr'), false); -assert.equal(string.endsWith('\xF1t\xEBr', 5), true); -assert.equal(string.endsWith('\xE0liz\xE6'), false); -assert.equal(string.endsWith('\xE0liz\xE6', 16), true); -assert.equal(string.endsWith('\xF8n\u2603\uD83D\uDCA9'), true); -assert.equal(string.endsWith('\xF8n\u2603\uD83D\uDCA9', 23), true); -assert.equal(string.endsWith('\u2603'), false); -assert.equal(string.endsWith('\u2603', 21), true); -assert.equal(string.endsWith('\uD83D\uDCA9'), true); -assert.equal(string.endsWith('\uD83D\uDCA9', 23), true); - -assert.throw(function() { String.prototype.endsWith.call(undefined); }, TypeError); -assert.throw(function() { String.prototype.endsWith.call(undefined, 'b'); }, TypeError); -assert.throw(function() { String.prototype.endsWith.call(undefined, 'b', 4); }, TypeError); -assert.throw(function() { String.prototype.endsWith.call(null); }, TypeError); -assert.throw(function() { String.prototype.endsWith.call(null, 'b'); }, TypeError); -assert.throw(function() { String.prototype.endsWith.call(null, 'b', 4); }, TypeError); -assert.equal(String.prototype.endsWith.call(42, '2'), true); -assert.equal(String.prototype.endsWith.call(42, '4'), false); -assert.equal(String.prototype.endsWith.call(42, 'b', 4), false); -assert.equal(String.prototype.endsWith.call(42, '2', 1), false); -assert.equal(String.prototype.endsWith.call(42, '2', 4), true); -assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 0), false); -assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 1), false); -assert.equal(String.prototype.endsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 2), true); -assert.throw(function() { String.prototype.endsWith.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); - -assert.throw(function() { String.prototype.endsWith.apply(undefined); }, TypeError); -assert.throw(function() { String.prototype.endsWith.apply(undefined, ['b']); }, TypeError); -assert.throw(function() { String.prototype.endsWith.apply(undefined, ['b', 4]); }, TypeError); -assert.throw(function() { String.prototype.endsWith.apply(null); }, TypeError); -assert.throw(function() { String.prototype.endsWith.apply(null, ['b']); }, TypeError); -assert.throw(function() { String.prototype.endsWith.apply(null, ['b', 4]); }, TypeError); -assert.equal(String.prototype.endsWith.apply(42, ['2']), true); -assert.equal(String.prototype.endsWith.apply(42, ['4']), false); -assert.equal(String.prototype.endsWith.apply(42, ['b', 4]), false); -assert.equal(String.prototype.endsWith.apply(42, ['2', 1]), false); -assert.equal(String.prototype.endsWith.apply(42, ['2', 4]), true); -assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), false); -assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), false); -assert.equal(String.prototype.endsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), true); -assert.throw(function() { String.prototype.endsWith.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); diff --git a/test/fixtures/traceur/StringExtras/FromCodePoint.js b/test/fixtures/traceur/StringExtras/FromCodePoint.js deleted file mode 100644 index 0a0adffa90..0000000000 --- a/test/fixtures/traceur/StringExtras/FromCodePoint.js +++ /dev/null @@ -1,25 +0,0 @@ -// Tests taken from https://mths.be/fromcodepoint - -assert.equal(String.fromCodePoint.length, 0); - -assert.equal(String.fromCodePoint(''), '\0'); -assert.equal(String.fromCodePoint(), ''); -assert.equal(String.fromCodePoint(-0), '\0'); -assert.equal(String.fromCodePoint(0), '\0'); -assert.equal(String.fromCodePoint(0x1D306), '\uD834\uDF06'); -assert.equal(String.fromCodePoint(0x1D306, 0x61, 0x1D307), '\uD834\uDF06a\uD834\uDF07'); -assert.equal(String.fromCodePoint(0x61, 0x62, 0x1D307), 'ab\uD834\uDF07'); -assert.equal(String.fromCodePoint(false), '\0'); -assert.equal(String.fromCodePoint(null), '\0'); - -assert.throw(function() { String.fromCodePoint('_'); }, RangeError); -assert.throw(function() { String.fromCodePoint('+Infinity'); }, RangeError); -assert.throw(function() { String.fromCodePoint('-Infinity'); }, RangeError); -assert.throw(function() { String.fromCodePoint(-1); }, RangeError); -assert.throw(function() { String.fromCodePoint(0x10FFFF + 1); }, RangeError); -assert.throw(function() { String.fromCodePoint(3.14); }, RangeError); -assert.throw(function() { String.fromCodePoint(3e-2); }, RangeError); -assert.throw(function() { String.fromCodePoint(Infinity); }, RangeError); -assert.throw(function() { String.fromCodePoint(NaN); }, RangeError); -assert.throw(function() { String.fromCodePoint(undefined); }, RangeError); -assert.throw(function() { String.fromCodePoint({}); }, RangeError); diff --git a/test/fixtures/traceur/StringExtras/Includes.js b/test/fixtures/traceur/StringExtras/Includes.js deleted file mode 100644 index b5cf58373d..0000000000 --- a/test/fixtures/traceur/StringExtras/Includes.js +++ /dev/null @@ -1,114 +0,0 @@ -// Tests taken from https://mths.be/includes - -assert.equal(String.prototype.includes.length, 1); -assert.equal(String.prototype.propertyIsEnumerable('includes'), false); - -assert.equal('abc'.includes(), false); -assert.equal('aundefinedb'.includes(), true); -assert.equal('abc'.includes(undefined), false); -assert.equal('aundefinedb'.includes(undefined), true); -assert.equal('abc'.includes(null), false); -assert.equal('anullb'.includes(null), true); -assert.equal('abc'.includes(false), false); -assert.equal('afalseb'.includes(false), true); -assert.equal('abc'.includes(NaN), false); -assert.equal('aNaNb'.includes(NaN), true); -assert.equal('abc'.includes('abc'), true); -assert.equal('abc'.includes('def'), false); -assert.equal('abc'.includes(''), true); -assert.equal(''.includes(''), true); - -assert.equal('abc'.includes('b', -Infinity), true); -assert.equal('abc'.includes('b', -1), true); -assert.equal('abc'.includes('b', -0), true); -assert.equal('abc'.includes('b', +0), true); -assert.equal('abc'.includes('b', NaN), true); -assert.equal('abc'.includes('b', 'x'), true); -assert.equal('abc'.includes('b', false), true); -assert.equal('abc'.includes('b', undefined), true); -assert.equal('abc'.includes('b', null), true); -assert.equal('abc'.includes('b', 1), true); -assert.equal('abc'.includes('b', 2), false); -assert.equal('abc'.includes('b', 3), false); -assert.equal('abc'.includes('b', 4), false); -assert.equal('abc'.includes('b', +Infinity), false); -assert.equal('abc'.includes('bc'), true); -assert.equal('abc'.includes('bc\0'), false); - -assert.equal('abc123def'.includes(1, -Infinity), true); -assert.equal('abc123def'.includes(1, -1), true); -assert.equal('abc123def'.includes(1, -0), true); -assert.equal('abc123def'.includes(1, +0), true); -assert.equal('abc123def'.includes(1, NaN), true); -assert.equal('abc123def'.includes(1, 'x'), true); -assert.equal('abc123def'.includes(1, false), true); -assert.equal('abc123def'.includes(1, undefined), true); -assert.equal('abc123def'.includes(1, null), true); -assert.equal('abc123def'.includes(1, 1), true); -assert.equal('abc123def'.includes(1, 2), true); -assert.equal('abc123def'.includes(1, 3), true); -assert.equal('abc123def'.includes(1, 4), false); -assert.equal('abc123def'.includes(1, 5), false); -assert.equal('abc123def'.includes(1, +Infinity), false); - -assert.equal('abc123def'.includes(9, -Infinity), false); -assert.equal('abc123def'.includes(9, -1), false); -assert.equal('abc123def'.includes(9, -0), false); -assert.equal('abc123def'.includes(9, +0), false); -assert.equal('abc123def'.includes(9, NaN), false); -assert.equal('abc123def'.includes(9, 'x'), false); -assert.equal('abc123def'.includes(9, false), false); -assert.equal('abc123def'.includes(9, undefined), false); -assert.equal('abc123def'.includes(9, null), false); -assert.equal('abc123def'.includes(9, 1), false); -assert.equal('abc123def'.includes(9, 2), false); -assert.equal('abc123def'.includes(9, 3), false); -assert.equal('abc123def'.includes(9, 4), false); -assert.equal('abc123def'.includes(9, 5), false); -assert.equal('abc123def'.includes(9, +Infinity), false); - -assert.equal('foo[a-z]+(bar)?'.includes('[a-z]+'), true); -assert.throw(function() { 'foo[a-z]+(bar)?'.includes(/[a-z]+/); }, TypeError); -assert.throw(function() { 'foo/[a-z]+/(bar)?'.includes(/[a-z]+/); }, TypeError); -assert.equal('foo[a-z]+(bar)?'.includes('(bar)?'), true); -assert.throw(function() { 'foo[a-z]+(bar)?'.includes(/(bar)?/); }, TypeError); -assert.throw(function() { 'foo[a-z]+/(bar)?/'.includes(/(bar)?/); }, TypeError); - -// https://mathiasbynens.be/notes/javascript-unicode#poo-test -var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; -assert.equal(string.includes(''), true); -assert.equal(string.includes('\xF1t\xEBr'), true); -assert.equal(string.includes('\xE0liz\xE6'), true); -assert.equal(string.includes('\xF8n\u2603\uD83D\uDCA9'), true); -assert.equal(string.includes('\u2603'), true); -assert.equal(string.includes('\uD83D\uDCA9'), true); - -assert.throw(function() { String.prototype.includes.call(undefined); }, TypeError); -assert.throw(function() { String.prototype.includes.call(undefined, 'b'); }, TypeError); -assert.throw(function() { String.prototype.includes.call(undefined, 'b', 4); }, TypeError); -assert.throw(function() { String.prototype.includes.call(null); }, TypeError); -assert.throw(function() { String.prototype.includes.call(null, 'b'); }, TypeError); -assert.throw(function() { String.prototype.includes.call(null, 'b', 4); }, TypeError); -assert.equal(String.prototype.includes.call(42, '2'), true); -assert.equal(String.prototype.includes.call(42, 'b', 4), false); -assert.equal(String.prototype.includes.call(42, '2', 4), false); -assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 0), true); -assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 1), true); -assert.equal(String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, 'b', 2), false); -assert.throw(function() { String.prototype.includes.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); -assert.throw(function() { String.prototype.includes.call({ 'toString': function() { return 'abc'; } }, /./); }, TypeError); - -assert.throw(function() { String.prototype.includes.apply(undefined); }, TypeError); -assert.throw(function() { String.prototype.includes.apply(undefined, ['b']); }, TypeError); -assert.throw(function() { String.prototype.includes.apply(undefined, ['b', 4]); }, TypeError); -assert.throw(function() { String.prototype.includes.apply(null); }, TypeError); -assert.throw(function() { String.prototype.includes.apply(null, ['b']); }, TypeError); -assert.throw(function() { String.prototype.includes.apply(null, ['b', 4]); }, TypeError); -assert.equal(String.prototype.includes.apply(42, ['2']), true); -assert.equal(String.prototype.includes.apply(42, ['b', 4]), false); -assert.equal(String.prototype.includes.apply(42, ['2', 4]), false); -assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), true); -assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), true); -assert.equal(String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), false); -assert.throw(function() { String.prototype.includes.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); -assert.throw(function() { String.prototype.includes.apply({ 'toString': function() { return 'abc'; } }, [/./]); }, TypeError); diff --git a/test/fixtures/traceur/StringExtras/Repeat.js b/test/fixtures/traceur/StringExtras/Repeat.js deleted file mode 100644 index 08c5d02ae9..0000000000 --- a/test/fixtures/traceur/StringExtras/Repeat.js +++ /dev/null @@ -1,33 +0,0 @@ -// Tests taken from https://mths.be/repeat - -assert.equal(String.prototype.repeat.length, 1); - -assert.equal('abc'.repeat(), ''); -assert.equal('abc'.repeat(undefined), ''); -assert.equal('abc'.repeat(null), ''); -assert.equal('abc'.repeat(false), ''); -assert.equal('abc'.repeat(NaN), ''); -assert.equal('abc'.repeat('abc'), ''); -assert.throw(function() { 'abc'.repeat(-Infinity); }, RangeError); -assert.throw(function() { 'abc'.repeat(-1); }, RangeError); -assert.equal('abc'.repeat(-0), ''); -assert.equal('abc'.repeat(+0), ''); -assert.equal('abc'.repeat(1), 'abc'); -assert.equal('abc'.repeat(2), 'abcabc'); -assert.equal('abc'.repeat(3), 'abcabcabc'); -assert.equal('abc'.repeat(4), 'abcabcabcabc'); -assert.throw(function() { 'abc'.repeat(+Infinity); }, RangeError); - -assert.throw(function() { String.prototype.repeat.call(undefined); }, TypeError); -assert.throw(function() { String.prototype.repeat.call(undefined, 4); }, TypeError); -assert.throw(function() { String.prototype.repeat.call(null); }, TypeError); -assert.throw(function() { String.prototype.repeat.call(null, 4); }, TypeError); -assert.equal(String.prototype.repeat.call(42, 4), '42424242'); -assert.equal(String.prototype.repeat.call({ 'toString': function() { return 'abc'; } }, 2), 'abcabc'); - -assert.throw(function() { String.prototype.repeat.apply(undefined); }, TypeError); -assert.throw(function() { String.prototype.repeat.apply(undefined, [4]); }, TypeError); -assert.throw(function() { String.prototype.repeat.apply(null); }, TypeError); -assert.throw(function() { String.prototype.repeat.apply(null, [4]); }, TypeError); -assert.equal(String.prototype.repeat.apply(42, [4]), '42424242'); -assert.equal(String.prototype.repeat.apply({ 'toString': function() { return 'abc'; } }, [2]), 'abcabc'); diff --git a/test/fixtures/traceur/StringExtras/StartsWith.js b/test/fixtures/traceur/StringExtras/StartsWith.js deleted file mode 100644 index 4128e27345..0000000000 --- a/test/fixtures/traceur/StringExtras/StartsWith.js +++ /dev/null @@ -1,210 +0,0 @@ -// Tests taken from https://mths.be/startswith - -//Object.prototype[1] = 2; // try to break `arguments[1]` - -//assert.equal(String.prototype.startsWith.length, 1); - -assert.equal('undefined'.startsWith(), true); -assert.equal('undefined'.startsWith(undefined), true); -assert.equal('undefined'.startsWith(null), false); -assert.equal('null'.startsWith(), false); -assert.equal('null'.startsWith(undefined), false); -assert.equal('null'.startsWith(null), true); - -assert.equal('abc'.startsWith(), false); -assert.equal('abc'.startsWith(''), true); -assert.equal('abc'.startsWith('\0'), false); -assert.equal('abc'.startsWith('a'), true); -assert.equal('abc'.startsWith('b'), false); -assert.equal('abc'.startsWith('ab'), true); -assert.equal('abc'.startsWith('bc'), false); -assert.equal('abc'.startsWith('abc'), true); -assert.equal('abc'.startsWith('bcd'), false); -assert.equal('abc'.startsWith('abcd'), false); -assert.equal('abc'.startsWith('bcde'), false); - -assert.equal('abc'.startsWith('', NaN), true); -assert.equal('abc'.startsWith('\0', NaN), false); -assert.equal('abc'.startsWith('a', NaN), true); -assert.equal('abc'.startsWith('b', NaN), false); -assert.equal('abc'.startsWith('ab', NaN), true); -assert.equal('abc'.startsWith('bc', NaN), false); -assert.equal('abc'.startsWith('abc', NaN), true); -assert.equal('abc'.startsWith('bcd', NaN), false); -assert.equal('abc'.startsWith('abcd', NaN), false); -assert.equal('abc'.startsWith('bcde', NaN), false); - -assert.equal('abc'.startsWith('', false), true); -assert.equal('abc'.startsWith('\0', false), false); -assert.equal('abc'.startsWith('a', false), true); -assert.equal('abc'.startsWith('b', false), false); -assert.equal('abc'.startsWith('ab', false), true); -assert.equal('abc'.startsWith('bc', false), false); -assert.equal('abc'.startsWith('abc', false), true); -assert.equal('abc'.startsWith('bcd', false), false); -assert.equal('abc'.startsWith('abcd', false), false); -assert.equal('abc'.startsWith('bcde', false), false); - -assert.equal('abc'.startsWith('', undefined), true); -assert.equal('abc'.startsWith('\0', undefined), false); -assert.equal('abc'.startsWith('a', undefined), true); -assert.equal('abc'.startsWith('b', undefined), false); -assert.equal('abc'.startsWith('ab', undefined), true); -assert.equal('abc'.startsWith('bc', undefined), false); -assert.equal('abc'.startsWith('abc', undefined), true); -assert.equal('abc'.startsWith('bcd', undefined), false); -assert.equal('abc'.startsWith('abcd', undefined), false); -assert.equal('abc'.startsWith('bcde', undefined), false); - -assert.equal('abc'.startsWith('', null), true); -assert.equal('abc'.startsWith('\0', null), false); -assert.equal('abc'.startsWith('a', null), true); -assert.equal('abc'.startsWith('b', null), false); -assert.equal('abc'.startsWith('ab', null), true); -assert.equal('abc'.startsWith('bc', null), false); -assert.equal('abc'.startsWith('abc', null), true); -assert.equal('abc'.startsWith('bcd', null), false); -assert.equal('abc'.startsWith('abcd', null), false); -assert.equal('abc'.startsWith('bcde', null), false); - -assert.equal('abc'.startsWith('', -Infinity), true); -assert.equal('abc'.startsWith('\0', -Infinity), false); -assert.equal('abc'.startsWith('a', -Infinity), true); -assert.equal('abc'.startsWith('b', -Infinity), false); -assert.equal('abc'.startsWith('ab', -Infinity), true); -assert.equal('abc'.startsWith('bc', -Infinity), false); -assert.equal('abc'.startsWith('abc', -Infinity), true); -assert.equal('abc'.startsWith('bcd', -Infinity), false); -assert.equal('abc'.startsWith('abcd', -Infinity), false); -assert.equal('abc'.startsWith('bcde', -Infinity), false); - -assert.equal('abc'.startsWith('', -1), true); -assert.equal('abc'.startsWith('\0', -1), false); -assert.equal('abc'.startsWith('a', -1), true); -assert.equal('abc'.startsWith('b', -1), false); -assert.equal('abc'.startsWith('ab', -1), true); -assert.equal('abc'.startsWith('bc', -1), false); -assert.equal('abc'.startsWith('abc', -1), true); -assert.equal('abc'.startsWith('bcd', -1), false); -assert.equal('abc'.startsWith('abcd', -1), false); -assert.equal('abc'.startsWith('bcde', -1), false); - -assert.equal('abc'.startsWith('', -0), true); -assert.equal('abc'.startsWith('\0', -0), false); -assert.equal('abc'.startsWith('a', -0), true); -assert.equal('abc'.startsWith('b', -0), false); -assert.equal('abc'.startsWith('ab', -0), true); -assert.equal('abc'.startsWith('bc', -0), false); -assert.equal('abc'.startsWith('abc', -0), true); -assert.equal('abc'.startsWith('bcd', -0), false); -assert.equal('abc'.startsWith('abcd', -0), false); -assert.equal('abc'.startsWith('bcde', -0), false); - -assert.equal('abc'.startsWith('', +0), true); -assert.equal('abc'.startsWith('\0', +0), false); -assert.equal('abc'.startsWith('a', +0), true); -assert.equal('abc'.startsWith('b', +0), false); -assert.equal('abc'.startsWith('ab', +0), true); -assert.equal('abc'.startsWith('bc', +0), false); -assert.equal('abc'.startsWith('abc', +0), true); -assert.equal('abc'.startsWith('bcd', +0), false); -assert.equal('abc'.startsWith('abcd', +0), false); -assert.equal('abc'.startsWith('bcde', +0), false); - -assert.equal('abc'.startsWith('', 1), true); -assert.equal('abc'.startsWith('\0', 1), false); -assert.equal('abc'.startsWith('a', 1), false); -assert.equal('abc'.startsWith('b', 1), true); -assert.equal('abc'.startsWith('ab', 1), false); -assert.equal('abc'.startsWith('bc', 1), true); -assert.equal('abc'.startsWith('abc', 1), false); -assert.equal('abc'.startsWith('bcd', 1), false); -assert.equal('abc'.startsWith('abcd', 1), false); -assert.equal('abc'.startsWith('bcde', 1), false); - -assert.equal('abc'.startsWith('', +Infinity), true); -assert.equal('abc'.startsWith('\0', +Infinity), false); -assert.equal('abc'.startsWith('a', +Infinity), false); -assert.equal('abc'.startsWith('b', +Infinity), false); -assert.equal('abc'.startsWith('ab', +Infinity), false); -assert.equal('abc'.startsWith('bc', +Infinity), false); -assert.equal('abc'.startsWith('abc', +Infinity), false); -assert.equal('abc'.startsWith('bcd', +Infinity), false); -assert.equal('abc'.startsWith('abcd', +Infinity), false); -assert.equal('abc'.startsWith('bcde', +Infinity), false); - -assert.equal('abc'.startsWith('', true), true); -assert.equal('abc'.startsWith('\0', true), false); -assert.equal('abc'.startsWith('a', true), false); -assert.equal('abc'.startsWith('b', true), true); -assert.equal('abc'.startsWith('ab', true), false); -assert.equal('abc'.startsWith('bc', true), true); -assert.equal('abc'.startsWith('abc', true), false); -assert.equal('abc'.startsWith('bcd', true), false); -assert.equal('abc'.startsWith('abcd', true), false); -assert.equal('abc'.startsWith('bcde', true), false); - -assert.equal('abc'.startsWith('', 'x'), true); -assert.equal('abc'.startsWith('\0', 'x'), false); -assert.equal('abc'.startsWith('a', 'x'), true); -assert.equal('abc'.startsWith('b', 'x'), false); -assert.equal('abc'.startsWith('ab', 'x'), true); -assert.equal('abc'.startsWith('bc', 'x'), false); -assert.equal('abc'.startsWith('abc', 'x'), true); -assert.equal('abc'.startsWith('bcd', 'x'), false); -assert.equal('abc'.startsWith('abcd', 'x'), false); -assert.equal('abc'.startsWith('bcde', 'x'), false); - -assert.equal('[a-z]+(bar)?'.startsWith('[a-z]+'), true); -assert.throw(function() { '[a-z]+(bar)?'.startsWith(/[a-z]+/); }, TypeError); -assert.equal('[a-z]+(bar)?'.startsWith('(bar)?', 6), true); -assert.throw(function() { '[a-z]+(bar)?'.startsWith(/(bar)?/); }, TypeError); -assert.throw(function() { '[a-z]+/(bar)?/'.startsWith(/(bar)?/); }, TypeError); - -// https://mathiasbynens.be/notes/javascript-unicode#poo-test -var string = 'I\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\u2603\uD83D\uDCA9'; -assert.equal(string.startsWith(''), true); -assert.equal(string.startsWith('\xF1t\xEBr'), false); -assert.equal(string.startsWith('\xF1t\xEBr', 1), true); -assert.equal(string.startsWith('\xE0liz\xE6'), false); -assert.equal(string.startsWith('\xE0liz\xE6', 11), true); -assert.equal(string.startsWith('\xF8n\u2603\uD83D\uDCA9'), false); -assert.equal(string.startsWith('\xF8n\u2603\uD83D\uDCA9', 18), true); -assert.equal(string.startsWith('\u2603'), false); -assert.equal(string.startsWith('\u2603', 20), true); -assert.equal(string.startsWith('\uD83D\uDCA9'), false); -assert.equal(string.startsWith('\uD83D\uDCA9', 21), true); - -assert.throw(function() { String.prototype.startsWith.call(undefined); }, TypeError); -assert.throw(function() { String.prototype.startsWith.call(undefined, 'b'); }, TypeError); -assert.throw(function() { String.prototype.startsWith.call(undefined, 'b', 4); }, TypeError); -assert.throw(function() { String.prototype.startsWith.call(null); }, TypeError); -assert.throw(function() { String.prototype.startsWith.call(null, 'b'); }, TypeError); -assert.throw(function() { String.prototype.startsWith.call(null, 'b', 4); }, TypeError); -assert.equal(String.prototype.startsWith.call(42, '2'), false); -assert.equal(String.prototype.startsWith.call(42, '4'), true); -assert.equal(String.prototype.startsWith.call(42, 'b', 4), false); -assert.equal(String.prototype.startsWith.call(42, '2', 1), true); -assert.equal(String.prototype.startsWith.call(42, '2', 4), false); -assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 0), false); -assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 1), true); -assert.equal(String.prototype.startsWith.call({ 'toString': function() { return 'abc'; } }, 'b', 2), false); -assert.throw(function() { String.prototype.startsWith.call({ 'toString': function() { throw RangeError(); } }, /./); }, RangeError); - -assert.throw(function() { String.prototype.startsWith.apply(undefined); }, TypeError); -assert.throw(function() { String.prototype.startsWith.apply(undefined, ['b']); }, TypeError); -assert.throw(function() { String.prototype.startsWith.apply(undefined, ['b', 4]); }, TypeError); -assert.throw(function() { String.prototype.startsWith.apply(null); }, TypeError); -assert.throw(function() { String.prototype.startsWith.apply(null, ['b']); }, TypeError); -assert.throw(function() { String.prototype.startsWith.apply(null, ['b', 4]); }, TypeError); -assert.equal(String.prototype.startsWith.apply(42, ['2']), false); -assert.equal(String.prototype.startsWith.apply(42, ['4']), true); -assert.equal(String.prototype.startsWith.apply(42, ['b', 4]), false); -assert.equal(String.prototype.startsWith.apply(42, ['2', 1]), true); -assert.equal(String.prototype.startsWith.apply(42, ['2', 4]), false); -assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 0]), false); -assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 1]), true); -assert.equal(String.prototype.startsWith.apply({ 'toString': function() { return 'abc'; } }, ['b', 2]), false); -assert.throw(function() { String.prototype.startsWith.apply({ 'toString': function() { throw RangeError(); } }, [/./]); }, RangeError); - -delete Object.prototype[1]; diff --git a/test/fixtures/traceur/StringIterator.js b/test/fixtures/traceur/StringIterator.js deleted file mode 100644 index 8b5dc5ccfa..0000000000 --- a/test/fixtures/traceur/StringIterator.js +++ /dev/null @@ -1,15 +0,0 @@ -var s = 'abc 💩 def'; - -var expected = ['a', 'b', 'c', ' ', '💩', ' ', 'd', 'e', 'f']; -var actual = []; -for (var x of s) { - actual.push(x); -} -assert.deepEqual(actual, expected); - -var newS = new String('abc'); -var res = []; -for (var x of newS) { - res.push(x); -} -assert.deepEqual(res, ['a', 'b', 'c']); diff --git a/test/fixtures/traceur/Symbol/Inherited.js b/test/fixtures/traceur/Symbol/Inherited.js deleted file mode 100644 index 98d3841e3d..0000000000 --- a/test/fixtures/traceur/Symbol/Inherited.js +++ /dev/null @@ -1,28 +0,0 @@ -// Options: --symbols -'use strict'; - -var s = Symbol(); -var p = {}; -Object.defineProperty(p, s, { - get: function() { - return 42; - }, - configurable: true -}); - -var o = Object.create(p); -assert.equal(42, o[s]); -assert.throws(function() { - o[s] = 1; -}, TypeError); - -var val; -Object.defineProperty(p, s, { - set: function(v) { - val = v; - }, - configurable: true -}); - -o[s] = 33; -assert.equal(33, val); diff --git a/test/fixtures/traceur/Symbol/Object.js b/test/fixtures/traceur/Symbol/Object.js deleted file mode 100644 index 903f9871de..0000000000 --- a/test/fixtures/traceur/Symbol/Object.js +++ /dev/null @@ -1,31 +0,0 @@ -// Options: --symbols - -var s = Symbol(); -var object = {}; -object[s] = 42; -assert.equal(42, object[s]); -// Native Symbol throws for ToString. -// assert.isUndefined(object[s + '']); -assertArrayEquals([], Object.getOwnPropertyNames(object)); -assert.isTrue(object.hasOwnProperty(s)); - -assert.equal(32, object[s] -= 10); -assert.equal(16, object[s] /= 2); -assert.equal(16, object[s]); - -var n = Symbol(); -assert.equal(object[n] = 1, 1); -assert.equal(object[n] += 2, 3); - -assert.isTrue(Object.getOwnPropertyDescriptor(object, n).enumerable); - -assert.isTrue(n in object); -assert.isTrue(delete object[n]); -assert.isFalse(n in object); - -var keys = []; -for (var k in object) { - keys.push(k); -} -assert.equal(0, keys.length, keys + ''); -assert.equal(0, Object.keys(object).length); diff --git a/test/fixtures/traceur/Symbol/ObjectModel.js b/test/fixtures/traceur/Symbol/ObjectModel.js deleted file mode 100644 index 5a2fd4dbf6..0000000000 --- a/test/fixtures/traceur/Symbol/ObjectModel.js +++ /dev/null @@ -1,13 +0,0 @@ -// Options: --symbols - -var s = Symbol('s'); -assert.equal(typeof s, 'symbol'); -assert.equal(s.constructor, Symbol); -assert.isFalse(s instanceof Symbol); - -assert.throws(() => { - new Symbol; -}); - -assert.equal(s.toString(), 'Symbol(s)'); -assert.equal(s.valueOf(), s); diff --git a/test/fixtures/traceur/Symbol/TransformationOff.js b/test/fixtures/traceur/Symbol/TransformationOff.js deleted file mode 100644 index 81d3bb64cc..0000000000 --- a/test/fixtures/traceur/Symbol/TransformationOff.js +++ /dev/null @@ -1,10 +0,0 @@ -// Options: --symbols=false - -var s = Symbol(); -var s2 = Symbol(); -var object = {}; -object[s] = 1; -object[s2] = 2; - -assert.equal(object[s], 1); -assert.equal(object[s2], 2); diff --git a/test/fixtures/traceur/Syntax/ArrayWithHoles.js b/test/fixtures/traceur/Syntax/ArrayWithHoles.js deleted file mode 100644 index 47477ebe94..0000000000 --- a/test/fixtures/traceur/Syntax/ArrayWithHoles.js +++ /dev/null @@ -1,10 +0,0 @@ -var arr = [,1, ,3,]; -assert.equal(4, arr.length); - -var arr2 = [,1, ,...[3],]; -assert.equal(4, arr.length); - -var x, y; -[x, , y] = [0, 1, 2]; -assert.equal(0, x); -assert.equal(2, y); diff --git a/test/fixtures/traceur/Syntax/Empty.js b/test/fixtures/traceur/Syntax/Empty.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/test/fixtures/traceur/Syntax/Error_Arguments.js b/test/fixtures/traceur/Syntax/Error_Arguments.js deleted file mode 100644 index bb2d410758..0000000000 --- a/test/fixtures/traceur/Syntax/Error_Arguments.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: :6:6: Unexpected token ) - -function f(x) { -} - -f(x, ); diff --git a/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js b/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js deleted file mode 100644 index 39072eeec4..0000000000 --- a/test/fixtures/traceur/Syntax/Error_ForInLoopTooManyVariableDeclarations.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:15: Unexpected token in - -for (var i, j in {}) {} diff --git a/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js b/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js deleted file mode 100644 index 47300cbe20..0000000000 --- a/test/fixtures/traceur/Syntax/Error_ForOfLoopTooManyVariableDeclarations.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:15: Unexpected token of - -for (var i, j of []) {} diff --git a/test/fixtures/traceur/Syntax/Error_FunctionParam.js b/test/fixtures/traceur/Syntax/Error_FunctionParam.js deleted file mode 100644 index 4f7b7741e5..0000000000 --- a/test/fixtures/traceur/Syntax/Error_FunctionParam.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :3:14: Unexpected token ) - -function f(x,) { - return x; -} diff --git a/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js b/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js deleted file mode 100644 index da9ad46a47..0000000000 --- a/test/fixtures/traceur/Syntax/Error_NoLineTerminatorPostfix.js +++ /dev/null @@ -1,7 +0,0 @@ -// Error: 6:7: Unexpected token ; - -function f(x) { - var x = 0; - x - ++; -} diff --git a/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js b/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js deleted file mode 100644 index 04c19e18b1..0000000000 --- a/test/fixtures/traceur/Syntax/Error_RegExpNotClosed.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:2: Expected '/' in regular expression literal - -/ \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js b/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js deleted file mode 100644 index 3e35a4d5cc..0000000000 --- a/test/fixtures/traceur/Syntax/Error_UnicodeEscapeSequenceInName.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:5: Character code '48' is not a valid identifier start char - -var \u0030ab = 42; // 0ab diff --git a/test/fixtures/traceur/Syntax/Error_WithInClass.js b/test/fixtures/traceur/Syntax/Error_WithInClass.js deleted file mode 100644 index 3015ee964f..0000000000 --- a/test/fixtures/traceur/Syntax/Error_WithInClass.js +++ /dev/null @@ -1,7 +0,0 @@ -// Error: :5:5: Strict mode code may not include a with statement - -class C { - method() { - with ({}) {} - } -} \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/Error_WithInModule.module.js b/test/fixtures/traceur/Syntax/Error_WithInModule.module.js deleted file mode 100644 index 31172a46bc..0000000000 --- a/test/fixtures/traceur/Syntax/Error_WithInModule.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:1: Strict mode code may not include a with statement - -with ({}) {} diff --git a/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js b/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js deleted file mode 100644 index 9c7ddee6f1..0000000000 --- a/test/fixtures/traceur/Syntax/Error_YieldStarNewLine.js +++ /dev/null @@ -1,6 +0,0 @@ -// Error: :5:7: Unexpected token * - -function* yieldStarNewLine() { - yield - *42; -} diff --git a/test/fixtures/traceur/Syntax/ExpressionValidation.js b/test/fixtures/traceur/Syntax/ExpressionValidation.js deleted file mode 100644 index 37548d8231..0000000000 --- a/test/fixtures/traceur/Syntax/ExpressionValidation.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -// test MemberLookupExpression -function f(a) { - var b = [42]; - return (a||b)[0]; -} - -assert.equal(42, f(null)); -assert.equal(43, f([43])); - -// test NewExpression -var a, b = function() { this.ans = 42; }; -assert.equal(new (a||b)().ans, 42); - -a = function() { this.ans = 43; }; -assert.equal(new (a||b)().ans, 43); - -// test CallExpression -a = undefined; -b = function() { return 42; } -assert.equal((a||b)(), 42); - -a = function() { return 43; } -assert.equal((a||b)(), 43); diff --git a/test/fixtures/traceur/Syntax/ImplicitSemiColon.js b/test/fixtures/traceur/Syntax/ImplicitSemiColon.js deleted file mode 100644 index af00da62c4..0000000000 --- a/test/fixtures/traceur/Syntax/ImplicitSemiColon.js +++ /dev/null @@ -1,6 +0,0 @@ -function f() { - return - 42; -} - -assert.isUndefined(f()); \ No newline at end of file diff --git a/test/fixtures/traceur/Syntax/ImportFromTypo.module.js b/test/fixtures/traceur/Syntax/ImportFromTypo.module.js deleted file mode 100644 index 4ae054a80e..0000000000 --- a/test/fixtures/traceur/Syntax/ImportFromTypo.module.js +++ /dev/null @@ -1,3 +0,0 @@ -// Error: :3:11: Unexpected token FROM - -import {} FROM 'abc'; diff --git a/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js b/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js deleted file mode 100644 index 43b6ab7fdf..0000000000 --- a/test/fixtures/traceur/Syntax/NumberLiteralMemberExpression.js +++ /dev/null @@ -1,4 +0,0 @@ -assert.equal(1 .toString(), '1'); -assert.equal(1.1.toString(), '1.1'); -assert.equal(1e1.toString(), '10'); -assert.equal(1E1.toString(), '10'); diff --git a/test/fixtures/traceur/Syntax/RegularExpression.js b/test/fixtures/traceur/Syntax/RegularExpression.js deleted file mode 100644 index 527ece6961..0000000000 --- a/test/fixtures/traceur/Syntax/RegularExpression.js +++ /dev/null @@ -1,8 +0,0 @@ -var re1 = /a*b/; -var re2 = /=a+/; -var re3 = /\//; -var re4 = /=/; -var re5 = /a*b/g; -var re6 = /=a+/g; -var re7 = /\//g; -var re8 = /=/g; diff --git a/test/fixtures/traceur/Syntax/StringEscapes.js b/test/fixtures/traceur/Syntax/StringEscapes.js deleted file mode 100644 index 335c142dbe..0000000000 --- a/test/fixtures/traceur/Syntax/StringEscapes.js +++ /dev/null @@ -1,13 +0,0 @@ -var o1 = { - '\\\'': 42, - '\0\b\f\n\r\t\v\x42\u1234': 1234 -}; -var o2 = { - '\\\'\ -': 42, - '\0\b\f\n\r\t\v\x42\u1234': 1234 -}; - -assertArrayEquals(Object.keys(o1), Object.keys(o2)); -assert.equal(42, o1['\\\'']); -assert.equal(42, o2['\\\'']); diff --git a/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js b/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js deleted file mode 100644 index 9f2dd2d23a..0000000000 --- a/test/fixtures/traceur/Syntax/UnicodeEscapeSequenceInName.js +++ /dev/null @@ -1,5 +0,0 @@ -var a\u0062c = 1; -assert.equal(1, abc); - -var λ = 2; -assert.equal(2, \u03bb); diff --git a/test/fixtures/traceur/Syntax/null.js b/test/fixtures/traceur/Syntax/null.js deleted file mode 100644 index ec747fa47d..0000000000 --- a/test/fixtures/traceur/Syntax/null.js +++ /dev/null @@ -1 +0,0 @@ -null \ No newline at end of file diff --git a/test/fixtures/traceur/TemplateLiterals/CallExpression.js b/test/fixtures/traceur/TemplateLiterals/CallExpression.js deleted file mode 100644 index 69ab401dba..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/CallExpression.js +++ /dev/null @@ -1,18 +0,0 @@ -// Options: --block-binding - -{ - let i = 0, called = 0; - function f() { - called++; - return function() { - return ++i; - }; - } - - assert.equal(1, f() `whatevs`); - assert.equal(1, called); - assert.equal(2, f `abc` `def`); - assert.equal(2, called); - assert.equal(3, f `ghi` ()); - assert.equal(3, called); -} diff --git a/test/fixtures/traceur/TemplateLiterals/CommaExpression.js b/test/fixtures/traceur/TemplateLiterals/CommaExpression.js deleted file mode 100644 index c6749db6db..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/CommaExpression.js +++ /dev/null @@ -1,10 +0,0 @@ -assert.equal('24', `${ 1, 2 }${ 3, 4 }`); -assert.equal('6', `${ 5, 6 }`); - -function templateLiteralCommaTest(callsite, x, y) { - assert.equal(2, x); - assert.equal(4, y); - return x + y; -} - -assert.equal(6, templateLiteralCommaTest`${ 1, 2 }${ 3, 4 }`); diff --git a/test/fixtures/traceur/TemplateLiterals/Default.js b/test/fixtures/traceur/TemplateLiterals/Default.js deleted file mode 100644 index 7b9326f29e..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Default.js +++ /dev/null @@ -1,95 +0,0 @@ -// Options: --block-binding - -assert.equal('', ``); -assert.equal('a', `a`); -assert.equal('"', `"`); -assert.equal("'", `'`); -assert.equal("`", `\``); -assert.equal('"', `\"`); - -assert.equal('\\"', `\\"`); -assert.equal('"\\', `"\\`); - -assert.equal('\n', `\n`); -assert.equal('\r', `\r`); -assert.equal('\r\n', `\r\n`); -assert.equal('\t', `\t`); -assert.equal('\u2028', `\u2028`); -assert.equal('\u2029', `\u2029`); - -assert.equal('$', `$`); -assert.equal('$ a', `$ a`); -assert.equal('$ {a}', `$ {a}`); - -assert.equal('undefined', `${ undefined }`); -assert.equal('null', `${ null }`); - -{ - let $ = 'DOLLAR'; - let $$ = 'DD' - assert.equal('$$', `$$`); - assert.equal('DOLLAR', `${$}`); - assert.equal('$$$', `$$$`); - assert.equal('DOLLARDOLLAR', `${$}${$}`); - assert.equal('DOLLAR$$', `${$}$$`); - assert.equal('$$DOLLAR', `$$${$}`); - assert.equal('$$$', `\$$$`); - - let a = 'A'; - let b = 'B'; - assert.equal('aAbB', `a${a}b${b}`); - assert.equal('aAb$b', `a${a}b$b`); - assert.equal('$a.$b', `$a.$b`); - - let x = 3; - let y = 5; - - assert.equal('3 + 5 = 8', `${x} + ${y} = ${ x + y}`); - - // nested - assert.equal('3 + 5 = 8', `${x} + ${ `${y} = ${ `${x + y}` }` }`); - - assert.equal('3', `${x}`); - assert.equal(' 3', ` ${x}`); - assert.equal('3 ', `${x} `); - assert.equal('35', `${x}${y}`); - assert.equal(' 35', ` ${x}${y}`); - assert.equal('3 5', `${x} ${y}`); - assert.equal('35 ', `${x}${y} `); - assert.equal(' 3 5 ', ` ${x} ${y} `); - - // def s(x): - // return ' ' if x else '' - // for i in range(16): - // v = (s(i&8), s(i&4), s(i&2), s(i&1)) - // print "assert.equal('%s3%s5%s8%s', `%s${x}%s${y}%s${x+y}%s`);" % (v+v) - assert.equal('358', `${x}${y}${x+y}`); - assert.equal('358 ', `${x}${y}${x+y} `); - assert.equal('35 8', `${x}${y} ${x+y}`); - assert.equal('35 8 ', `${x}${y} ${x+y} `); - assert.equal('3 58', `${x} ${y}${x+y}`); - assert.equal('3 58 ', `${x} ${y}${x+y} `); - assert.equal('3 5 8', `${x} ${y} ${x+y}`); - assert.equal('3 5 8 ', `${x} ${y} ${x+y} `); - assert.equal(' 358', ` ${x}${y}${x+y}`); - assert.equal(' 358 ', ` ${x}${y}${x+y} `); - assert.equal(' 35 8', ` ${x}${y} ${x+y}`); - assert.equal(' 35 8 ', ` ${x}${y} ${x+y} `); - assert.equal(' 3 58', ` ${x} ${y}${x+y}`); - assert.equal(' 3 58 ', ` ${x} ${y}${x+y} `); - assert.equal(' 3 5 8', ` ${x} ${y} ${x+y}`); - assert.equal(' 3 5 8 ', ` ${x} ${y} ${x+y} `); -} - -// Line continuations -assert.equal('ab', `a\ -b`); -assert.equal('ab', `a\ -\ -b`); - -assert.equal('\n', ` -`); -assert.equal('\n\n', ` - -`); diff --git a/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js b/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js deleted file mode 100644 index 75f41d16f3..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --template-literals=false -// Error: :4:1: Unexpected token ` - -`abc`; diff --git a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js deleted file mode 100644 index 781d8d0298..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :6:1: Unterminated template literal - -function f() {} - -f`a${ ` diff --git a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js b/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js deleted file mode 100644 index 89df2eb6d3..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Error_InvalidSubstitution2.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :5:7: Unexpected token } - -function f() {} - -f`a${ }` diff --git a/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js b/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js deleted file mode 100644 index 00acb1154a..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Error_NotClosed.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :6:1: Unterminated template literal - -function f() {} - -f`not closed \` diff --git a/test/fixtures/traceur/TemplateLiterals/InBlock.js b/test/fixtures/traceur/TemplateLiterals/InBlock.js deleted file mode 100644 index 61e8073ac3..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/InBlock.js +++ /dev/null @@ -1,9 +0,0 @@ -// This just tests that we do not get any compile errors. - -{ - `abc` -} - -(function() { - `def` -}); \ No newline at end of file diff --git a/test/fixtures/traceur/TemplateLiterals/MemberExpression.js b/test/fixtures/traceur/TemplateLiterals/MemberExpression.js deleted file mode 100644 index dfa14f4661..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/MemberExpression.js +++ /dev/null @@ -1,25 +0,0 @@ -// Options: --block-binding - -{ - let a = [function() { - return 1; - }]; - - assert.equal(1, a[0] `whatevs`); - - function f() { - return [function() { - return 2; - }]; - } - - assert.equal(2, f `abc` [0] `def`); - - let o = { - g: function() { - return 3; - } - }; - - assert.equal(3, o.g `ghi`); -} diff --git a/test/fixtures/traceur/TemplateLiterals/StringRaw.js b/test/fixtures/traceur/TemplateLiterals/StringRaw.js deleted file mode 100644 index 29a55675df..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/StringRaw.js +++ /dev/null @@ -1,10 +0,0 @@ -assert.equal('', String.raw ``); -assert.equal('\n', String.raw ` -`); -assert.equal('\\n', String.raw `\n`); -assert.equal('\\n42\\t', String.raw `\n${ 40 + 2 }\t`); -assert.equal('\n42\t', String.raw ` -${42} `); -assert.equal('\\\n42\\\n', String.raw `\ -${42}\ -`); diff --git a/test/fixtures/traceur/TemplateLiterals/Tag.js b/test/fixtures/traceur/TemplateLiterals/Tag.js deleted file mode 100644 index 727b8a8977..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/Tag.js +++ /dev/null @@ -1,87 +0,0 @@ -// Options: --block-binding - -{ - function expose(callSite, var_args) { - assert.isTrue(Array.isArray(callSite)); - assert.isTrue(Object.isFrozen(callSite)); - var rawDescr = Object.getOwnPropertyDescriptor(callSite, 'raw'); - assert.isTrue(rawDescr !== undefined); - assert.isTrue('value' in rawDescr); - assert.isFalse(rawDescr.enumerable); - assert.isFalse(rawDescr.writable); - assert.isFalse(rawDescr.configurable); - assert.isTrue(Object.isFrozen(callSite.raw)); - assert.isTrue(Array.isArray(callSite.raw)); - assert.isTrue(Object.isFrozen(callSite.raw)); - assert.equal(callSite.raw.length, callSite.length); - - // The number of the literal portions is always same or one greater than the - // number of substitutions - var literalPortionCount = callSite.raw.length; - var substitutionCount = arguments.length - 1; - assert.isTrue(literalPortionCount == substitutionCount || - literalPortionCount == substitutionCount + 1); - - return arguments; - } - - let x = 3; - let y = 5; - - assert.equal(1, expose``.length); - assert.equal(1, expose`a`.length); - assert.equal(2, expose`a${x}`.length); - assert.equal(2, expose`a${x} b`.length); - assert.equal(3, expose`a${x} ${y}`.length); - assert.equal(3, expose`${x}${y}`.length); - assert.equal(2, expose`${x}a`.length); - - assert.equal(1, expose``[0].length); - assert.equal(1, expose``[0].raw.length); - - assertArrayEquals(['a'], expose`a`[0].raw); - assertArrayEquals(['a'], expose`a`[0]); - - assertArrayEquals(['\\n'], expose`\n`[0].raw); - assertArrayEquals(['\n'], expose`\n`[0]); - - assertArrayEquals(['\\r'], expose`\r`[0].raw); - assertArrayEquals(['\r'], expose`\r`[0]); - - assertArrayEquals(['\\f'], expose`\f`[0].raw); - assertArrayEquals(['\f'], expose`\f`[0]); - - assertArrayEquals(['\\b'], expose`\b`[0].raw); - assertArrayEquals(['\b'], expose`\b`[0]); - - assertArrayEquals(['\\u2028'], expose`\u2028`[0].raw); - assertArrayEquals(['\u2028'], expose`\u2028`[0]); - - assertArrayEquals(['\\u2029'], expose`\u2029`[0].raw); - assertArrayEquals(['\u2029'], expose`\u2029`[0]); - - assertArrayEquals(['a', 'b'], expose`a${x}b`[0].raw); - assertArrayEquals(['a', 'b'], expose`a${x}b`[0]); - - // These have tab characters in them. - assertArrayEquals(['\t', '\\t'], expose` ${x}\t`[0].raw); - assertArrayEquals(['\t', '\t'], expose` ${x}\t`[0]); - - assertArrayEquals(['\n', '\\n'], expose` -${x}\n`[0].raw); - assertArrayEquals(['\n', '\n'], expose` -${x}\n`[0]); - - // These contains the ES new line chars \u2028 and \u2029 - assertArrayEquals(['\u2028', '\\u2028'], expose`
${x}\u2028`[0].raw); - assertArrayEquals(['\u2028', '\u2028'], expose`
${x}\u2028`[0]); - - assertArrayEquals(['\u2029', '\\u2029'], expose`
${x}\u2029`[0].raw); - assertArrayEquals(['\u2029', '\u2029'], expose`
${x}\u2029`[0]); - - assertArrayEquals(['a/*b*/c'], expose`a/*b*/c`[0].raw); - assertArrayEquals(['a/*b*/c'], expose`a/*b*/c`[0]); - - assertArrayEquals(['a'], expose/* comment */`a`[0].raw); - assertArrayEquals(['a'], expose/* comment */`a`[0]); -} diff --git a/test/fixtures/traceur/TemplateLiterals/resources/f.js b/test/fixtures/traceur/TemplateLiterals/resources/f.js deleted file mode 100644 index f78d33206e..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/resources/f.js +++ /dev/null @@ -1,3 +0,0 @@ -export function f(...args) { - return args; -} diff --git a/test/fixtures/traceur/TemplateLiterals/resources/m.js b/test/fixtures/traceur/TemplateLiterals/resources/m.js deleted file mode 100644 index 364751373a..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/resources/m.js +++ /dev/null @@ -1,3 +0,0 @@ -import {f} from './f.js'; - -assert.equal('a', (f `a`)[0][0]); diff --git a/test/fixtures/traceur/TemplateLiterals/resources/n.js b/test/fixtures/traceur/TemplateLiterals/resources/n.js deleted file mode 100644 index 108fed14bf..0000000000 --- a/test/fixtures/traceur/TemplateLiterals/resources/n.js +++ /dev/null @@ -1,3 +0,0 @@ -import {f} from './f.js'; - -assert.equal('b', (f `b`)[0][0]); diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js deleted file mode 100644 index 13c5e86850..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_CodePointTooHigh.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences -// Error: :4:12: The code point in a Unicode escape sequence cannot exceed 10FFFF - -"\u{1000000}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js deleted file mode 100644 index 1a36396b2a..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_Disabled.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences=false -// Error: :4:4: Hex digit expected - -"\u{0}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js deleted file mode 100644 index ccffc71d37..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences -// Error: :4:5: Hex digit expected - -"\u{"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js deleted file mode 100644 index aae0133dcf..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected2.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences -// Error: :4:6: Hex digit expected - -"\u{1"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js deleted file mode 100644 index 29efadfc29..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected3.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences -// Error: :4:5: Hex digit expected - -"\u{ diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js b/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js deleted file mode 100644 index 1ac1390cf4..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Error_HexDigitExpected4.js +++ /dev/null @@ -1,4 +0,0 @@ -// Options: --unicode-escape-sequences -// Error: :4:5: Hex digit expected - -"\u{}"; diff --git a/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js b/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js deleted file mode 100644 index fbc1c788a7..0000000000 --- a/test/fixtures/traceur/UnicodeEscapeSequence/Simple.js +++ /dev/null @@ -1,15 +0,0 @@ -// Options: --unicode-escape-sequences - -(function() { - assert.equal("\u{0}", "\u0000"); - assert.equal("\u{000000001}", "\u0001"); - assert.equal("\u{FFFF}", "\uFFFF"); - - assert.equal("\u{10000}", "\uD800\uDC00"); - assert.equal("\u{10FFFF}", "\uDBFF\uDFFF"); - - assert.equal("\\u{1}", "\\u{1}"); - assert.equal("\\\u{1}", "\\\u0001"); - - assert.equal("\U{1}", "\U{1}"); -})(); diff --git a/test/fixtures/traceur/Yield/Arguments.js b/test/fixtures/traceur/Yield/Arguments.js deleted file mode 100644 index 6e02361a44..0000000000 --- a/test/fixtures/traceur/Yield/Arguments.js +++ /dev/null @@ -1,8 +0,0 @@ -function* f() { - yield [arguments[0], arguments[1]]; -} - -for (var arr of f(1, 2)) { - assert.equal(1, arr[0]); - assert.equal(2, arr[1]); -} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/BinaryOperator.js b/test/fixtures/traceur/Yield/BinaryOperator.js deleted file mode 100644 index 49a63ff271..0000000000 --- a/test/fixtures/traceur/Yield/BinaryOperator.js +++ /dev/null @@ -1,9 +0,0 @@ -function* f(x) { - var a = (yield x) + (yield x + 1); - return a; -} - -var g = f(1); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(1), {value: 2, done: false}); -assert.deepEqual(g.next(2), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/Break.js b/test/fixtures/traceur/Yield/Break.js deleted file mode 100644 index 1fd1b2c46d..0000000000 --- a/test/fixtures/traceur/Yield/Break.js +++ /dev/null @@ -1,48 +0,0 @@ -var x = ':'; - -function* f() { - label1: { - x += 'a'; - yield 1; - x += 'b' - while (true && true) { - break label1; - } - x += 'c'; - } - x += 'd' -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assert.equal(x, ':abd'); - - -x = ':'; - -function* f2() { - label1: { - x += 'a'; - while(true) { - x += 'b'; - label2: { - x += 'c'; - yield 3; - x += 'd'; - while (true) { - break label1; - } - x += 'e'; - } - x += 'f'; - } - x += 'g'; - } - x += 'h'; -} - -g = f2(); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assert.equal(x, ':abcdh'); diff --git a/test/fixtures/traceur/Yield/CommaOperator.js b/test/fixtures/traceur/Yield/CommaOperator.js deleted file mode 100644 index 1747a62dff..0000000000 --- a/test/fixtures/traceur/Yield/CommaOperator.js +++ /dev/null @@ -1,9 +0,0 @@ -function* f(x, y) { - yield x, yield y; - return x + y; -} - -var g = f(1, 2); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(1), {value: 2, done: false}); -assert.deepEqual(g.next(2), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/Continue.js b/test/fixtures/traceur/Yield/Continue.js deleted file mode 100644 index 61d392e093..0000000000 --- a/test/fixtures/traceur/Yield/Continue.js +++ /dev/null @@ -1,18 +0,0 @@ -var x = ':'; - -function* f() { - yield 1; - var j = 0; - label1: for (var i = 0; i < 3; i++) { - x += 'i:' + i; - x += 'j:' + j; - if (j++ > 4) return; - continue label1; - x += 'x'; - } -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assert.equal(x, ':i:0j:0i:1j:1i:2j:2'); diff --git a/test/fixtures/traceur/Yield/DefaultArguments.js b/test/fixtures/traceur/Yield/DefaultArguments.js deleted file mode 100644 index 9a009aa806..0000000000 --- a/test/fixtures/traceur/Yield/DefaultArguments.js +++ /dev/null @@ -1,7 +0,0 @@ -function* f(x = 1) { - yield x; -} - -for (var x of f(42)) { - assert.equal(42, x); -} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/DoGenerator.js b/test/fixtures/traceur/Yield/DoGenerator.js deleted file mode 100644 index 42f901fc00..0000000000 --- a/test/fixtures/traceur/Yield/DoGenerator.js +++ /dev/null @@ -1,19 +0,0 @@ -function* doGenerator() { - var i = 0; - do { - if (++i % 2 == 0) continue; - yield i; - } while (i < 6); -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('135', accumulate(doGenerator())); diff --git a/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js b/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js deleted file mode 100644 index 967aba4264..0000000000 --- a/test/fixtures/traceur/Yield/DoWhileStatementWithYield.js +++ /dev/null @@ -1,33 +0,0 @@ -function* f() { - var x = 0; - do { - yield x++; - } while (yield 'test'); -} - -var g = f(); -assert.deepEqual(g.next(), {value: 0, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(true), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(true), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(false), {value: undefined, done: true}); - -function* f2() { - var x = 0; - do { - yield x++; - } while ((yield 'a') || (yield 'b')); -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 0, done: false}); -assert.deepEqual(g2.next(), {value: 'a', done: false}); -assert.deepEqual(g2.next(true), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 'a', done: false}); -assert.deepEqual(g2.next(false), {value: 'b', done: false}); -assert.deepEqual(g2.next(true), {value: 2, done: false}); -assert.deepEqual(g2.next(false), {value: 'a', done: false}); -assert.deepEqual(g2.next(false), {value: 'b', done: false}); -assert.deepEqual(g2.next(), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/EmptyGenerator.js b/test/fixtures/traceur/Yield/EmptyGenerator.js deleted file mode 100644 index 0fd11a4e7a..0000000000 --- a/test/fixtures/traceur/Yield/EmptyGenerator.js +++ /dev/null @@ -1,5 +0,0 @@ -function* f() { -} - -var g = f(); -assert.deepEqual(g.next(), {done: true, value: undefined}); diff --git a/test/fixtures/traceur/Yield/Error_Disabled.js b/test/fixtures/traceur/Yield/Error_Disabled.js deleted file mode 100644 index 6add24ed19..0000000000 --- a/test/fixtures/traceur/Yield/Error_Disabled.js +++ /dev/null @@ -1,8 +0,0 @@ -// Options: --generators=false -// Error: :4:9: Unexpected token * - -function* range(start, end) { - for (var i = start; i < end; i++) { - yield i; - } -} diff --git a/test/fixtures/traceur/Yield/Error_Disabled2.js b/test/fixtures/traceur/Yield/Error_Disabled2.js deleted file mode 100644 index 303c0eb057..0000000000 --- a/test/fixtures/traceur/Yield/Error_Disabled2.js +++ /dev/null @@ -1,7 +0,0 @@ -// Options: --forOf=false -// Error: :5:12: Unexpected token of - -var s = []; -for (var i of yieldFor()) { - s.push(i); -} diff --git a/test/fixtures/traceur/Yield/Error_MissingStar.js b/test/fixtures/traceur/Yield/Error_MissingStar.js deleted file mode 100644 index 4023645a9e..0000000000 --- a/test/fixtures/traceur/Yield/Error_MissingStar.js +++ /dev/null @@ -1,5 +0,0 @@ -// Error: :4:9: Semi-colon expected - -function simpleGenerator() { - yield 1; -} diff --git a/test/fixtures/traceur/Yield/Finally.js b/test/fixtures/traceur/Yield/Finally.js deleted file mode 100644 index e4519b74f4..0000000000 --- a/test/fixtures/traceur/Yield/Finally.js +++ /dev/null @@ -1,22 +0,0 @@ -var finallyVisited = false; - -function* test() { - try { - yield 42; - } finally { - finallyVisited = true; - } -} - -var it = test(); -assert.deepEqual({value: 42, done: false}, it.next()); -assert.isFalse(finallyVisited); - -assert.deepEqual({value: undefined, done: true}, it.next()); -assert.isTrue(finallyVisited); - -finallyVisited = false; -for (var i of test()) { - assert.equal(42, i); -} -assert.isTrue(finallyVisited); diff --git a/test/fixtures/traceur/Yield/ForEmptyGenerator.js b/test/fixtures/traceur/Yield/ForEmptyGenerator.js deleted file mode 100644 index 760f40ad6a..0000000000 --- a/test/fixtures/traceur/Yield/ForEmptyGenerator.js +++ /dev/null @@ -1,15 +0,0 @@ -function* forEmptyGenerator() { - yield* []; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('', accumulate(forEmptyGenerator())); diff --git a/test/fixtures/traceur/Yield/ForGenerator.js b/test/fixtures/traceur/Yield/ForGenerator.js deleted file mode 100644 index 526e9e5e06..0000000000 --- a/test/fixtures/traceur/Yield/ForGenerator.js +++ /dev/null @@ -1,25 +0,0 @@ -function* forGenerator() { - var a = 1, b = 1; - for (var i = 0; i < 4; i++) { - // TODO(jmesserly): this was changed until we get destructing - //[a, b] = [b, a + b]; - var t0 = b; - var t1 = a + b; - a = t0; - b = t1; - - yield a; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('1235', accumulate(forGenerator())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator.js b/test/fixtures/traceur/Yield/ForInGenerator.js deleted file mode 100644 index 09b6a0f9c7..0000000000 --- a/test/fixtures/traceur/Yield/ForInGenerator.js +++ /dev/null @@ -1,27 +0,0 @@ -function* forInGenerator() { - var object = { - a: 0, - b: 1, - c: 2 - }; - for (var key in object) { - if (key == 'a') { - delete object.b; - object.d = 3; - } - yield key; - yield object[key]; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('a0c2',accumulate(forInGenerator())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator2.js b/test/fixtures/traceur/Yield/ForInGenerator2.js deleted file mode 100644 index 47c3f9bcfd..0000000000 --- a/test/fixtures/traceur/Yield/ForInGenerator2.js +++ /dev/null @@ -1,28 +0,0 @@ -function* forInGenerator2() { - var object = { - a: 0, - b: 1, - c: 2 - }; - var key; - for (key in object) { - if (key == 'a') { - delete object.b; - object.d = 3; - } - yield key; - yield object[key]; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('a0c2',accumulate(forInGenerator2())); diff --git a/test/fixtures/traceur/Yield/ForInGenerator3.js b/test/fixtures/traceur/Yield/ForInGenerator3.js deleted file mode 100644 index 093158bc11..0000000000 --- a/test/fixtures/traceur/Yield/ForInGenerator3.js +++ /dev/null @@ -1,27 +0,0 @@ -function* forInGenerator3() { - var object = { - a: 0, - b: { - c: 1, - }, - d: 2 - }; - for (var key in object) { - yield key; - for (var key2 in object[key]) { - yield key2; - } - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('abcd',accumulate(forInGenerator3())); diff --git a/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js b/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js deleted file mode 100644 index ec389c977c..0000000000 --- a/test/fixtures/traceur/Yield/ForLexicallyNestedGenerator.js +++ /dev/null @@ -1,15 +0,0 @@ -function* forLexicallyNestedGenerator() { - yield* (function*() { yield [1,2,3]; yield* [4,5,6]; })(); -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('1,2,3456', accumulate(forLexicallyNestedGenerator())); diff --git a/test/fixtures/traceur/Yield/ForMissingParts.js b/test/fixtures/traceur/Yield/ForMissingParts.js deleted file mode 100644 index 6ea2941738..0000000000 --- a/test/fixtures/traceur/Yield/ForMissingParts.js +++ /dev/null @@ -1,95 +0,0 @@ -function* f0() { - var x = 0; - for (;;) { - yield x++; - } -} - -function* f1() { - var x = 0; - for (; ; 1) { - yield x++; - } -} - -function* f2() { - var x = 0; - for (; 1; ) { - yield x++; - } -} - -function* f3() { - var x = 0; - for (; 1; 1) { - yield x++; - } -} - -function* f4() { - var x = 0; - for (1; ; ) { - yield x++; - } -} - -function* f5() { - var x = 0; - for (1; ; 1) { - yield x++; - } -} - -function* f6() { - var x = 0; - for (1; 1; ) { - yield x++; - } -} - -function* f7() { - var x = 0; - for (1; 1; 1) { - yield x++; - } -} - -var g0 = f0(); -assert.deepEqual(g0.next(), {value: 0, done: false}); -assert.deepEqual(g0.next(), {value: 1, done: false}); -assert.deepEqual(g0.next(), {value: 2, done: false}); - -var g1 = f1(); -assert.deepEqual(g1.next(), {value: 0, done: false}); -assert.deepEqual(g1.next(), {value: 1, done: false}); -assert.deepEqual(g1.next(), {value: 2, done: false}); - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 0, done: false}); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 2, done: false}); - -var g3 = f3(); -assert.deepEqual(g3.next(), {value: 0, done: false}); -assert.deepEqual(g3.next(), {value: 1, done: false}); -assert.deepEqual(g3.next(), {value: 2, done: false}); - -var g4 = f4(); -assert.deepEqual(g4.next(), {value: 0, done: false}); -assert.deepEqual(g4.next(), {value: 1, done: false}); -assert.deepEqual(g4.next(), {value: 2, done: false}); - -var g5 = f5(); -assert.deepEqual(g5.next(), {value: 0, done: false}); -assert.deepEqual(g5.next(), {value: 1, done: false}); -assert.deepEqual(g5.next(), {value: 2, done: false}); - -var g6 = f6(); -assert.deepEqual(g6.next(), {value: 0, done: false}); -assert.deepEqual(g6.next(), {value: 1, done: false}); -assert.deepEqual(g6.next(), {value: 2, done: false}); - -var g7 = f7(); -assert.deepEqual(g7.next(), {value: 0, done: false}); -assert.deepEqual(g7.next(), {value: 1, done: false}); -assert.deepEqual(g7.next(), {value: 2, done: false}); diff --git a/test/fixtures/traceur/Yield/ForOfGenerator.js b/test/fixtures/traceur/Yield/ForOfGenerator.js deleted file mode 100644 index 94def9e357..0000000000 --- a/test/fixtures/traceur/Yield/ForOfGenerator.js +++ /dev/null @@ -1,49 +0,0 @@ -function* forEachGenerator() { - yield* forInGenerator3(); - yield* forInGenerator2(); -} - -function* forInGenerator3() { - var object = { - a: 0, - b: { - c: 1, - }, - d: 2 - }; - for (var key in object) { - yield key; - for (var key2 in object[key]) { - yield key2; - } - } -} - -function* forInGenerator2() { - var object = { - a: 0, - b: 1, - c: 2 - }; - var key; - for (key in object) { - if (key == 'a') { - delete object.b; - object.d = 3; - } - yield key; - yield object[key]; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('abcda0c2', accumulate(forEachGenerator())); diff --git a/test/fixtures/traceur/Yield/ForStatement.js b/test/fixtures/traceur/Yield/ForStatement.js deleted file mode 100644 index 08e2b1dbf5..0000000000 --- a/test/fixtures/traceur/Yield/ForStatement.js +++ /dev/null @@ -1,46 +0,0 @@ -function* f() { - var x = 0; - for (yield 'init'; x < 3; x++) { - yield x; - } -} - -var g = f(); -assert.deepEqual(g.next(), {value: 'init', done: false}); -assert.deepEqual(g.next(), {value: 0, done: false}); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - -function* f2() { - for (var x = 0; yield 'test'; x++) { - yield x; - } -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 'test', done: false}); -assert.deepEqual(g2.next(true), {value: 0, done: false}); -assert.deepEqual(g2.next(), {value: 'test', done: false}); -assert.deepEqual(g2.next(true), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 'test', done: false}); -assert.deepEqual(g2.next(true), {value: 2, done: false}); -assert.deepEqual(g2.next(), {value: 'test', done: false}); -assert.deepEqual(g2.next(false), {value: undefined, done: true}); - -function* f3() { - for (var x = 0; x < 5; x = yield 'inc') { - yield x; - } -} - -var g3 = f3(); -assert.deepEqual(g3.next(), {value: 0, done: false}); -assert.deepEqual(g3.next(), {value: 'inc', done: false}); -assert.deepEqual(g3.next(2), {value: 2, done: false}); -assert.deepEqual(g3.next(), {value: 'inc', done: false}); -assert.deepEqual(g3.next(4), {value: 4, done: false}); -assert.deepEqual(g3.next(), {value: 'inc', done: false}); -assert.deepEqual(g3.next(1), {value: 1, done: false}); -assert.deepEqual(g3.next(), {value: 'inc', done: false}); -assert.deepEqual(g3.next(5), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/FunctionDeclaration.js b/test/fixtures/traceur/Yield/FunctionDeclaration.js deleted file mode 100644 index 2d0893d277..0000000000 --- a/test/fixtures/traceur/Yield/FunctionDeclaration.js +++ /dev/null @@ -1,12 +0,0 @@ -(function() { - - function* f() { - function g() { - return 42; - } - yield g; - } - - assert.equal(42, f().next().value()); - -})(); diff --git a/test/fixtures/traceur/Yield/GeneratorReturn.js b/test/fixtures/traceur/Yield/GeneratorReturn.js deleted file mode 100644 index b26d35f08e..0000000000 --- a/test/fixtures/traceur/Yield/GeneratorReturn.js +++ /dev/null @@ -1,86 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -//----------------------------------------------------------------------------- - -var g; - -function* G1() { - return 42; -} - -function* G2() { - return; -} - -function* G3() { - return undefined; -} - -function* G4() { - return 42; - yield 1000; -} - -function* G5() { - yield 1000; - return 42; -} - -function* G6() { - try { - yield 1000; - return 42; - yield 2000; - } catch(e) { - return 43; - } finally { - // TODO: Is 'return' allowed inside 'finally'? - // return 44; - } -} - -//---- - -function id(G) { - return G; -} - -function wrap(G) { - return function*() { - var r = yield* G(); - return r; - }; -} - -//---- - -var tests = [ - [G1, [], 42], - [G2, [], undefined], - [G3, [], undefined], - [G4, [], 42], - [G5, [1000], 42], - [G6, [1000], 42] -]; - -//----------------------------------------------------------------------------- - -[id, wrap].forEach((W) => { - - tests.forEach(([G, y, r]) => { - var g = W(G)(); - y.forEach((x) => assert.deepEqual({value: x, done: false}, g.next())); - - assert.deepEqual({value: r, done: true}, g.next()); - assertClosed(g); - }); - - //---- - - g = W(G6)(); - assert.deepEqual({value: 1000, done: false}, g.next()); - assert.deepEqual({value: 43, done: true}, g.throw()); - -}); diff --git a/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js b/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js deleted file mode 100644 index ebfaf68da9..0000000000 --- a/test/fixtures/traceur/Yield/GeneratorWithoutYieldOrReturn.js +++ /dev/null @@ -1,10 +0,0 @@ -var x = 0; - -function* f() { - x++; -} - -var g = f(); -assert.equal(x, 0); -assert.deepEqual(g.next(), {done: true, value: undefined}); -assert.equal(x, 1); diff --git a/test/fixtures/traceur/Yield/Hoisting.js b/test/fixtures/traceur/Yield/Hoisting.js deleted file mode 100644 index 5ccad05058..0000000000 --- a/test/fixtures/traceur/Yield/Hoisting.js +++ /dev/null @@ -1,13 +0,0 @@ -// f is declared at the end to test hoisting. - -var g = f(); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - -function* f() { - yield 1; -} - -function* f() { - yield 2; -} \ No newline at end of file diff --git a/test/fixtures/traceur/Yield/HoistingBlockbinding.js b/test/fixtures/traceur/Yield/HoistingBlockbinding.js deleted file mode 100644 index ffe0ac320c..0000000000 --- a/test/fixtures/traceur/Yield/HoistingBlockbinding.js +++ /dev/null @@ -1,21 +0,0 @@ -// Options: --block-binding - -{ - function* f() { - yield 1; - } - - let g = f(); - assert.deepEqual(g.next(), {value: 1, done: false}); - assert.deepEqual(g.next(), {value: undefined, done: true}); -} - -{ - function* f() { - yield 1; - } - - let g = f(); - assert.deepEqual(g.next(), {value: 1, done: false}); - assert.deepEqual(g.next(), {value: undefined, done: true}); -} diff --git a/test/fixtures/traceur/Yield/IfGenerator.js b/test/fixtures/traceur/Yield/IfGenerator.js deleted file mode 100644 index 43758965b3..0000000000 --- a/test/fixtures/traceur/Yield/IfGenerator.js +++ /dev/null @@ -1,26 +0,0 @@ -function* ifGenerator(condition) { - if (condition) { - yield 1; - } - if (!condition) { - yield 2; - } - if (condition) { - yield 3; - } else { - yield 4; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('13', accumulate(ifGenerator(true))); -assert.equal('24', accumulate(ifGenerator(false))); diff --git a/test/fixtures/traceur/Yield/IfStatementWithYield.js b/test/fixtures/traceur/Yield/IfStatementWithYield.js deleted file mode 100644 index f5b5a8a192..0000000000 --- a/test/fixtures/traceur/Yield/IfStatementWithYield.js +++ /dev/null @@ -1,14 +0,0 @@ -function* f(x) { - if (yield x) { - return 2; - } - return 3; -} - -var g = f(1); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(true), {value: 2, done: true}); - -g = f(4); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(false), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/LabelledBlockGenerator.js b/test/fixtures/traceur/Yield/LabelledBlockGenerator.js deleted file mode 100644 index c79897f816..0000000000 --- a/test/fixtures/traceur/Yield/LabelledBlockGenerator.js +++ /dev/null @@ -1,20 +0,0 @@ -var i = 0; -var s = ''; - -function* f() { - s += 'a'; - while(i++ < 3) { - s += 'b'; - label1: { - s += 'c'; - break label1; - s += 'd'; - } - s += 'e'; - } - s += 'f'; -} - -var g = f(); -g.next(); -assert.equal(s, 'abcebcebcef'); diff --git a/test/fixtures/traceur/Yield/LabelledBreakGenerator.js b/test/fixtures/traceur/Yield/LabelledBreakGenerator.js deleted file mode 100644 index c656461fb4..0000000000 --- a/test/fixtures/traceur/Yield/LabelledBreakGenerator.js +++ /dev/null @@ -1,34 +0,0 @@ -function* labelledBreakGenerator() { - var x = 1; - var y = 2; -label: - while (true) { - x++; - while (true) { - yield x * y; - y++; - if (y == 3) { - continue label; - } - yield x * y * 5; - if (y == 4) { - break label; - } - yield x * y * 13; - } - yield x * y * 11; - } - yield x * y * 7; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result += String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('496084', accumulate(labelledBreakGenerator())); diff --git a/test/fixtures/traceur/Yield/MapFilterGenerator.js b/test/fixtures/traceur/Yield/MapFilterGenerator.js deleted file mode 100644 index 5ae3d9bb52..0000000000 --- a/test/fixtures/traceur/Yield/MapFilterGenerator.js +++ /dev/null @@ -1,31 +0,0 @@ -function mapFilterGenerator() { - function* map(list, fun) { - for (var item of list) { - yield fun(item); - } - } - function* filter(list, fun) { - for (var item of list) { - if (fun(item)) { - yield item; - } - } - } - // squares even numbers. no intermediate array is created. - var numbers = [1,2,3,4,5,6,7,8,9,10]; - return map( - filter(numbers, function(x) { return x % 2 == 0; }), - function(x) { return (x * x) + ','; }); -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('4,16,36,64,100,', accumulate(mapFilterGenerator())); diff --git a/test/fixtures/traceur/Yield/ObjectModel.js b/test/fixtures/traceur/Yield/ObjectModel.js deleted file mode 100644 index 60638f6bf4..0000000000 --- a/test/fixtures/traceur/Yield/ObjectModel.js +++ /dev/null @@ -1,41 +0,0 @@ -// f is declared at the end to test hoisting. - -var GeneratorFunctionPrototype = f.__proto__; -var GeneratorFunction = GeneratorFunctionPrototype.constructor; - -assert.equal(GeneratorFunction.name, 'GeneratorFunction'); -assert.equal(GeneratorFunction.prototype, GeneratorFunctionPrototype); -assert.equal(GeneratorFunctionPrototype.prototype.constructor, - GeneratorFunctionPrototype); -assert.equal(GeneratorFunctionPrototype.prototype, f.prototype.__proto__); -assert.equal(GeneratorFunctionPrototype.__proto__, Function.prototype); - -var g = f(); -assert.instanceOf(g, f); - -assert.equal(g.__proto__, f.prototype); - -assert.deepEqual([], Object.getOwnPropertyNames(f.prototype)); -assert.deepEqual([], Object.getOwnPropertyNames(g)); - -f.prototype.x = 42; - -var g2 = f(); -assert.equal(g2.x, 42); - -var g3 = new f(); -assert.equal(g3.x, 42); - -function* f2() { - yield 1; -} - -assert.equal(f.__proto__, f2.__proto__); - -assert.isFalse(f.hasOwnProperty('constructor')); -assert.equal(f.__proto__.constructor.name, 'GeneratorFunction'); - -// Intentionally at the end to test hoisting. -function* f() { - yield this; -} diff --git a/test/fixtures/traceur/Yield/OverrideGenerator.js b/test/fixtures/traceur/Yield/OverrideGenerator.js deleted file mode 100644 index a897f02322..0000000000 --- a/test/fixtures/traceur/Yield/OverrideGenerator.js +++ /dev/null @@ -1,14 +0,0 @@ -function* f() { - yield 1; -} - -var f2 = f; - -f = 42; - -var g = f2(); - -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - -assert.instanceOf(g, f2); diff --git a/test/fixtures/traceur/Yield/ReturnInFinally.js b/test/fixtures/traceur/Yield/ReturnInFinally.js deleted file mode 100644 index fac9cb49db..0000000000 --- a/test/fixtures/traceur/Yield/ReturnInFinally.js +++ /dev/null @@ -1,33 +0,0 @@ -function* f() { - try { - yield 1; - } finally { - return 2; - } - yield 3; - return 4; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: true}); - -function* f2() { - try { - yield 1 - } catch (ex) { - yield ex; - } finally { - return 2; - } - yield 3; -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 2, done: true}); - -g2 = f2(); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.throw(42), {value: 42, done: false}); -assert.deepEqual(g2.next(), {value: 2, done: true}); diff --git a/test/fixtures/traceur/Yield/ReturnYield.js b/test/fixtures/traceur/Yield/ReturnYield.js deleted file mode 100644 index a349833743..0000000000 --- a/test/fixtures/traceur/Yield/ReturnYield.js +++ /dev/null @@ -1,55 +0,0 @@ -function* f() { - return yield 1; -} - -var g = f(); - -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(2), {value: 2, done: true}); -function* f2() { - return (yield 3) + (yield 4); -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 3, done: false}); -assert.deepEqual(g2.next(5), {value: 4, done: false}); -assert.deepEqual(g2.next(6), {value: 11, done: true}); - - -function* f3() { - return (yield 7) || (yield 8); -} - -var g3 = f3(); -assert.deepEqual(g3.next(), {value: 7, done: false}); -assert.deepEqual(g3.next(9), {value: 9, done: true}); - -g3 = f3(); -assert.deepEqual(g3.next(), {value: 7, done: false}); -assert.deepEqual(g3.next(0), {value: 8, done: false}); -assert.deepEqual(g3.next(10), {value: 10, done: true}); - -function* f4() { - return (yield 11) && (yield 12); -} - -var g4 = f4(); -assert.deepEqual(g4.next(), {value: 11, done: false}); -assert.deepEqual(g4.next(0), {value: 0, done: true}); -g4 = f4(); -assert.deepEqual(g4.next(), {value: 11, done: false}); -assert.deepEqual(g4.next(13), {value: 12, done: false}); -assert.deepEqual(g4.next(14), {value: 14, done: true}); - -function* f5() { - return (yield 15) ? (yield 16) : (yield 17); -} - -var g5 = f5(); -assert.deepEqual(g5.next(), {value: 15, done: false}); -assert.deepEqual(g5.next(true), {value: 16, done: false}); -assert.deepEqual(g5.next(18), {value: 18, done: true}); -g5 = f5(); -assert.deepEqual(g5.next(), {value: 15, done: false}); -assert.deepEqual(g5.next(false), {value: 17, done: false}); -assert.deepEqual(g5.next(19), {value: 19, done: true}); diff --git a/test/fixtures/traceur/Yield/ReturnYieldFor.js b/test/fixtures/traceur/Yield/ReturnYieldFor.js deleted file mode 100644 index 1448be3e23..0000000000 --- a/test/fixtures/traceur/Yield/ReturnYieldFor.js +++ /dev/null @@ -1,15 +0,0 @@ -function* f() { - return yield* h(); -} - -function* h() { - yield 111; - yield 222; - return 333; -} - -var g = f(); - -assert.deepEqual({value: 111, done: false}, g.next()); -assert.deepEqual({value: 222, done: false}, g.next()); -assert.deepEqual({value: 333, done: true}, g.next()); diff --git a/test/fixtures/traceur/Yield/SequenceGenerator.js b/test/fixtures/traceur/Yield/SequenceGenerator.js deleted file mode 100644 index d895985767..0000000000 --- a/test/fixtures/traceur/Yield/SequenceGenerator.js +++ /dev/null @@ -1,23 +0,0 @@ -function* sequenceGenerator() { - var i = 1; - yield i; - i = 3; - yield i + 1; - { - var x = 3; - yield i + x; - yield x; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('1463', accumulate(sequenceGenerator())); diff --git a/test/fixtures/traceur/Yield/SimpleGenerator.js b/test/fixtures/traceur/Yield/SimpleGenerator.js deleted file mode 100644 index b865e12f0c..0000000000 --- a/test/fixtures/traceur/Yield/SimpleGenerator.js +++ /dev/null @@ -1,15 +0,0 @@ -function* simpleGenerator() { - yield 1; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('1', accumulate(simpleGenerator())); diff --git a/test/fixtures/traceur/Yield/StatementTestGenerator.js b/test/fixtures/traceur/Yield/StatementTestGenerator.js deleted file mode 100644 index 74105b412c..0000000000 --- a/test/fixtures/traceur/Yield/StatementTestGenerator.js +++ /dev/null @@ -1,37 +0,0 @@ -// Options: --block-binding - -function* statementTestGenerator() { - // all of these statement constructs should be allowed - // provided that they contain no yield statements - switch (1) { - case 2: break; - default: break; - } - try { - } catch (e) {} - try { - } finally {} - do {} while (false); - for (;false;) {} - - //TODO(jmesserly): this had to be changed to "var" until we get BlockBindingTransformer - //for (let x in {}) {} - //for (let x of simpleGenerator()) {} - for (var x in {}) {} - for (var x of simpleGenerator()) {} - - if (false) {} else {} - //TODO(jmesserly): this had to be changed to "var" until we get BlockBindingTransformer - //{ let x = 1; } - { var x = 1; } - { const y = 2; } - - yield 1; -} - - -function* simpleGenerator() { - yield 1; -} - -// ---------------------------------------------------------------------------- diff --git a/test/fixtures/traceur/Yield/SwitchGenerator.js b/test/fixtures/traceur/Yield/SwitchGenerator.js deleted file mode 100644 index c516ec0131..0000000000 --- a/test/fixtures/traceur/Yield/SwitchGenerator.js +++ /dev/null @@ -1,37 +0,0 @@ -function* switchGenerator(val) { - switch (val) { - case 1: - yield val; - case 2: - yield val * 2; - break; - case 3: - break; - default: - yield val * 10; - } - - // switch without a default - switch (val) { - case 1000: - yield val; - break; - } - yield val * 5; -} - - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('125', accumulate(switchGenerator(1))); -assert.equal('410', accumulate(switchGenerator(2))); -assert.equal('15', accumulate(switchGenerator(3))); -assert.equal('4020', accumulate(switchGenerator(4))); diff --git a/test/fixtures/traceur/Yield/SwitchStatementWithYield.js b/test/fixtures/traceur/Yield/SwitchStatementWithYield.js deleted file mode 100644 index 12affe930e..0000000000 --- a/test/fixtures/traceur/Yield/SwitchStatementWithYield.js +++ /dev/null @@ -1,23 +0,0 @@ -function* f(x) { - switch (yield x) { - case 1: - return 1; - case 2: - return 2; - default: - return 3; - } - throw new Error('Unreachable'); -} - -var g = f(1); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(2), {value: 2, done: true}); - -g = f(3); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(1), {value: 1, done: true}); - -var g = f(4); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(55), {value: 3, done: true}); diff --git a/test/fixtures/traceur/Yield/This.js b/test/fixtures/traceur/Yield/This.js deleted file mode 100644 index b17bea2b69..0000000000 --- a/test/fixtures/traceur/Yield/This.js +++ /dev/null @@ -1,8 +0,0 @@ -function* f() { - yield this; -} - -var o = {}; -for (var x of f.call(o)) { - assert.equal(o, x); -} diff --git a/test/fixtures/traceur/Yield/Tree.js b/test/fixtures/traceur/Yield/Tree.js deleted file mode 100644 index ac6a5187c4..0000000000 --- a/test/fixtures/traceur/Yield/Tree.js +++ /dev/null @@ -1,75 +0,0 @@ -// Options: --symbols - -// A binary tree class. -class Tree { - constructor(label, left, right) { - this.label = label; - this.left = left; - this.right = right; - } - *[Symbol.iterator]() { - if (this.left) { - yield* this.left; - } - yield this.label; - if (this.right) { - yield* this.right; - } - } -} - -// Create a Tree from a list. -function tree(list) { - var n = list.length; - if (n == 0) { - return null; - } - var i = Math.floor(n / 2); - return new Tree(list[i], tree(list.slice(0, i)), tree(list.slice(i + 1))); -} - -// A recursive generator that generates Tree labels in in-order. -function* inorder1(t) { - if (t) { - for (var x of inorder1(t.left)) { - yield x; - } - yield t.label; - for (var x of inorder1(t.right)) { - yield x; - } - } -} - -// A non-recursive generator. -function* inorder2(node) { - var stack = []; - while (node) { - while (node.left) { - stack.push(node); - node = node.left; - } - yield node.label; - while (!node.right && stack.length) { - node = stack.pop(); - yield node.label; - } - node = node.right; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; -var root = tree(alphabet); -assert.equal(alphabet, accumulate(inorder1(root))); -assert.equal(alphabet, accumulate(inorder2(root))); -assert.equal(alphabet, accumulate(root)); diff --git a/test/fixtures/traceur/Yield/Try.js b/test/fixtures/traceur/Yield/Try.js deleted file mode 100644 index bad1941f1f..0000000000 --- a/test/fixtures/traceur/Yield/Try.js +++ /dev/null @@ -1,52 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -function* f() { - yield 1; - try { - yield 2; - yield 3; - } catch (ex) { - yield ex; - } - yield 4; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); diff --git a/test/fixtures/traceur/Yield/Try10.js b/test/fixtures/traceur/Yield/Try10.js deleted file mode 100644 index d289a199d4..0000000000 --- a/test/fixtures/traceur/Yield/Try10.js +++ /dev/null @@ -1,90 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex; - } - yield 5; - } catch (ex) { - yield 6 + ex; - } finally { - x = 7 - } - yield x; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.throw('b'), {value: '6b', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 7); diff --git a/test/fixtures/traceur/Yield/Try11.js b/test/fixtures/traceur/Yield/Try11.js deleted file mode 100644 index 3b131f46b6..0000000000 --- a/test/fixtures/traceur/Yield/Try11.js +++ /dev/null @@ -1,106 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x, y; - -function* f() { - x = 0; - y = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } finally { - x = 4; - } - yield x; - } catch (ex) { - yield 5 + ex; - } finally { - y = 6 - } - yield y; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 6); diff --git a/test/fixtures/traceur/Yield/Try12.js b/test/fixtures/traceur/Yield/Try12.js deleted file mode 100644 index edcb5e3506..0000000000 --- a/test/fixtures/traceur/Yield/Try12.js +++ /dev/null @@ -1,111 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x, y; - -function* f() { - x = 0; - y = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex; - } finally { - x = 5; - } - yield x; - } catch (ex) { - yield 6 + ex; - } finally { - y = 7 - } - yield y; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.throw('b'), {value: '6b', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 7); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 7); diff --git a/test/fixtures/traceur/Yield/Try2.js b/test/fixtures/traceur/Yield/Try2.js deleted file mode 100644 index f6ec973710..0000000000 --- a/test/fixtures/traceur/Yield/Try2.js +++ /dev/null @@ -1,57 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - yield 3; - } finally { - x = 4; - } - yield x; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try3.js b/test/fixtures/traceur/Yield/Try3.js deleted file mode 100644 index ead1617dfd..0000000000 --- a/test/fixtures/traceur/Yield/Try3.js +++ /dev/null @@ -1,56 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - yield 3; - } catch (ex) { - yield ex; - } finally { - x = 4; - } - yield x; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: 'ex', done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try4.js b/test/fixtures/traceur/Yield/Try4.js deleted file mode 100644 index 72692a4f9c..0000000000 --- a/test/fixtures/traceur/Yield/Try4.js +++ /dev/null @@ -1,80 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -function* f() { - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex; - } - yield 5; - } catch (ex) { - yield 6 + ex; - } - yield 7; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.throw('b'), {value: '6b', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); diff --git a/test/fixtures/traceur/Yield/Try5.js b/test/fixtures/traceur/Yield/Try5.js deleted file mode 100644 index 31ba02b0b8..0000000000 --- a/test/fixtures/traceur/Yield/Try5.js +++ /dev/null @@ -1,95 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } finally { - x = 4 - } - yield x; - } catch (ex) { - yield 5 + ex; - } - yield 6; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.throw('ex'), {value: '5ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 4); diff --git a/test/fixtures/traceur/Yield/Try6.js b/test/fixtures/traceur/Yield/Try6.js deleted file mode 100644 index b5fa2e2b7c..0000000000 --- a/test/fixtures/traceur/Yield/Try6.js +++ /dev/null @@ -1,74 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex - } - yield 5; - } finally { - x = 6; - } - yield x; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 6); diff --git a/test/fixtures/traceur/Yield/Try7.js b/test/fixtures/traceur/Yield/Try7.js deleted file mode 100644 index 43bc6db414..0000000000 --- a/test/fixtures/traceur/Yield/Try7.js +++ /dev/null @@ -1,78 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x, y; - -function* f() { - x = 0; - y = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } finally { - x = 4; - } - yield x; - } finally { - y = 5; - } - yield y; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assert.equal(x, 0); -assert.equal(y, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 4, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 4); -assert.equal(y, 5); diff --git a/test/fixtures/traceur/Yield/Try8.js b/test/fixtures/traceur/Yield/Try8.js deleted file mode 100644 index 19f9e621e3..0000000000 --- a/test/fixtures/traceur/Yield/Try8.js +++ /dev/null @@ -1,83 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x, y; - -function* f() { - x = 0; - y = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex; - } finally { - x = 5; - } - yield x; - } finally { - y = 6; - } - yield y; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 6, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 6); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 5); -assert.equal(y, 6); diff --git a/test/fixtures/traceur/Yield/Try9.js b/test/fixtures/traceur/Yield/Try9.js deleted file mode 100644 index 90677decc6..0000000000 --- a/test/fixtures/traceur/Yield/Try9.js +++ /dev/null @@ -1,90 +0,0 @@ -function assertClosed(g) { - assert.deepEqual({value: undefined, done: true}, g.next()); -} - -var x; - -function* f() { - x = 0; - yield 1; - try { - yield 2; - try { - yield 3; - } catch (ex) { - yield 4 + ex; - } finally { - x = 5; - } - yield x; - } catch (ex) { - yield 6 + ex; - } - yield 7; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.throws(() => g.throw('ex')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.throws(() => g.throw('b')); -assertClosed(g); -assert.equal(x, 0); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.throw('ex'), {value: '4ex', done: false}); -assert.deepEqual(g.throw('b'), {value: '6b', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 5, done: false}); -assert.deepEqual(g.throw('ex'), {value: '6ex', done: false}); -assert.deepEqual(g.next(), {value: 7, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); -assertClosed(g); -assert.equal(x, 5); diff --git a/test/fixtures/traceur/Yield/TryCatchGenerator.js b/test/fixtures/traceur/Yield/TryCatchGenerator.js deleted file mode 100644 index 2efd6c7076..0000000000 --- a/test/fixtures/traceur/Yield/TryCatchGenerator.js +++ /dev/null @@ -1,153 +0,0 @@ -function* tryCatchGenerator() { - var x; - try { - yield 1; - throw 2; - yield 3; - } catch (e) { - x = e; - } - yield x; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result += value; - } - return result; -} - -//----------------------------------------------------------------------------- - -function id(G) { - return G; -} - -function wrap(G) { - return function* () { - yield* G(); - }; -} - - -[id, wrap].forEach((W) => { // wrap_forEach - -// ---------------------------------------------------------------------------- - -assert.equal('12', accumulate(tryCatchGenerator())); - -// ---------------------------------------------------------------------------- - -function* throwGenerator() { - yield 1; - throw 2; - yield 3; -} - -function* throwFromCatchGenerator() { - try { - throw 1; - } catch(e) { - yield e; - throw 2; - yield 3; - } -} - -function* throwFromFinallyGenerator() { - try { - yield 1; - } finally { - throw 2; - } - yield 3; -} - -function accumulateCatch(iterator) { - var result = ''; - var i; - for (i = 0; i < 4; i++) { - try { - for (var value of iterator) { - result += value; - } - } catch(e) { - result += ' [' + e + ']'; - } - } - return result; -} - -function repeat(s, n) { - return Array(n + 1).join(s); -} - -// ---------------------------------------------------------------------------- - -assert.equal('1 [2]', accumulateCatch(W(throwGenerator)())); -assert.equal('1 [2]', accumulateCatch(W(throwFromCatchGenerator)())); -assert.equal('1 [2]', accumulateCatch(W(throwFromFinallyGenerator)())); - -// ---------------------------------------------------------------------------- - -// out-of-band info -var oob; - -function* throwOOBGen() { - try { - yield 1; - throw 2; - oob += 3; - } finally { - oob += 4; - } - oob += 5; - yield 6; -} - -function* throwOOB2xGen() { - try { - try { - yield 1; - throw 2; - oob += 3; - } finally { - oob += 4; - } - oob += 5; - yield 6; - } catch(e) { - yield 7 + '(' + e + ')'; - throw 8; - } finally { - oob += 9; - } -} - -function accumulateCatchOOB(iterator) { - var result = ''; - var i; - - for (i = 0; i < 4; i++) { - oob = ''; - try { - for (var value of iterator) { - result += value; - } - } catch(e) { - result += ' [' + e + ']'; - } finally { - result += ' <' + oob + '>'; - } - } - return result; -} - -// ---------------------------------------------------------------------------- - -var emptyResult = repeat(' <>', 3); -assert.equal('1 [2] <4>' + emptyResult, accumulateCatchOOB(W(throwOOBGen)())); -assert.equal('17(2) [8] <49>' + emptyResult, accumulateCatchOOB(W(throwOOB2xGen)())); - -}); // end wrap_forEach diff --git a/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js b/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js deleted file mode 100644 index ce631b33ca..0000000000 --- a/test/fixtures/traceur/Yield/TryCatchYieldGenerator.js +++ /dev/null @@ -1,21 +0,0 @@ -// yield form within a catch block -function* tryCatchYieldGenerator() { - var x = 3; - try { - throw 5; - } catch (e) { - yield e * x; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('15', accumulate(tryCatchYieldGenerator())); diff --git a/test/fixtures/traceur/Yield/TryFinallyGenerator.js b/test/fixtures/traceur/Yield/TryFinallyGenerator.js deleted file mode 100644 index b21b9bdacb..0000000000 --- a/test/fixtures/traceur/Yield/TryFinallyGenerator.js +++ /dev/null @@ -1,39 +0,0 @@ -function* tryFinallyGenerator() { - var x = 1; - var y; - - // finally inside a catch - try { - try { - yield x; - throw 7; - x = 2; - } finally { - x = 3; - } - } catch (e) { - y = e; - } - yield x * y; - - // finally with no enclosing try - try { - y = 11; - yield y; - } finally { - y = 3; - } - yield y; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('121113', accumulate(tryFinallyGenerator())); diff --git a/test/fixtures/traceur/Yield/WhileGenerator.js b/test/fixtures/traceur/Yield/WhileGenerator.js deleted file mode 100644 index c35e852381..0000000000 --- a/test/fixtures/traceur/Yield/WhileGenerator.js +++ /dev/null @@ -1,25 +0,0 @@ -function* whileGenerator(max, continueValue, breakValue) { - var i = 0; - while (i < max) { - i++; - if (i == continueValue) { - continue; - } - if (i == breakValue) { - break; - } - yield i; - } -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('13', accumulate(whileGenerator(10, 2, 4))); diff --git a/test/fixtures/traceur/Yield/WhileStatementWithYield.js b/test/fixtures/traceur/Yield/WhileStatementWithYield.js deleted file mode 100644 index a79c3127f0..0000000000 --- a/test/fixtures/traceur/Yield/WhileStatementWithYield.js +++ /dev/null @@ -1,33 +0,0 @@ -function* f() { - var x = 0; - while (yield 'test') { - yield x++; - } -} - -var g = f(); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(true), {value: 0, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(true), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(true), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: 'test', done: false}); -assert.deepEqual(g.next(false), {value: undefined, done: true}); - -function* f2() { - var x = 0; - while ((yield 'a') || (yield 'b')) { - yield x++; - } -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 'a', done: false}); -assert.deepEqual(g2.next(true), {value: 0, done: false}); -assert.deepEqual(g2.next(), {value: 'a', done: false}); -assert.deepEqual(g2.next(false), {value: 'b', done: false}); -assert.deepEqual(g2.next(true), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 'a', done: false}); -assert.deepEqual(g2.next(false), {value: 'b', done: false}); -assert.deepEqual(g2.next(false), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/YieldAssignThrow.js b/test/fixtures/traceur/Yield/YieldAssignThrow.js deleted file mode 100644 index c9247d7619..0000000000 --- a/test/fixtures/traceur/Yield/YieldAssignThrow.js +++ /dev/null @@ -1,18 +0,0 @@ -function* f() { - var x; - try { - x = yield 1; - } catch (ex) { - yield ex; - } - return 2; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: true}); - -g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.throw(3), {value: 3, done: false}); -assert.deepEqual(g.next(), {value: 2, done: true}); diff --git a/test/fixtures/traceur/Yield/YieldIdentifier.js b/test/fixtures/traceur/Yield/YieldIdentifier.js deleted file mode 100644 index 51143e7b71..0000000000 --- a/test/fixtures/traceur/Yield/YieldIdentifier.js +++ /dev/null @@ -1,29 +0,0 @@ -(function() { - - // ensure non strict mode. - function f() { return this; } - assert(f.call(undefined) !== undefined); - - var yield = 1; - assert.equal(yield, 1); - - function g(yield) { - return yield; - } - assert.equal(g(2), 2); - - var o = { - yield: yield - }; - assert.equal(o.yield, 1); - - var o2 = { - yield - }; - assert.equal(o.yield, 1); - - function h(yield) { - return yield * yield; - } - assert.equal(h(3), 9); -})(); diff --git a/test/fixtures/traceur/Yield/YieldInFinally.js b/test/fixtures/traceur/Yield/YieldInFinally.js deleted file mode 100644 index 772a1fc630..0000000000 --- a/test/fixtures/traceur/Yield/YieldInFinally.js +++ /dev/null @@ -1,41 +0,0 @@ -var x; - -function* f() { - x = 0; - try { - x++; - } finally { - yield x++; - } - yield x++; -} - -var g = f(); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(), {value: 2, done: false}); -assert.deepEqual(g.next(), {value: undefined, done: true}); - -function* f2() { - try { - yield 1 - } catch (ex) { - yield ex; - } finally { - yield 2; - } - yield 3; -} - -var g2 = f2(); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.next(), {value: 2, done: false}); -assert.deepEqual(g2.next(), {value: 3, done: false}); -assert.deepEqual(g2.next(), {value: undefined, done: true}); - -g2 = f2(); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.throw(42), {value: 42, done: false}); -assert.deepEqual(g2.next(), {value: 2, done: false}); -assert.deepEqual(g2.next(), {value: 3, done: false}); -assert.deepEqual(g2.next(), {value: undefined, done: true}); - diff --git a/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js b/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js deleted file mode 100644 index ce398ce020..0000000000 --- a/test/fixtures/traceur/Yield/YieldUndefinedGenerator.js +++ /dev/null @@ -1,24 +0,0 @@ -function* yieldUndefinedGenerator1() { - yield 1; - yield; - yield 2; -} - -function* yieldUndefinedGenerator2() { - yield 1; - yield undefined; - yield 2; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('1undefined2', accumulate(yieldUndefinedGenerator1())); -assert.equal('1undefined2', accumulate(yieldUndefinedGenerator2())); diff --git a/test/fixtures/traceur/Yield/YieldYield.js b/test/fixtures/traceur/Yield/YieldYield.js deleted file mode 100644 index 1bddfe81a6..0000000000 --- a/test/fixtures/traceur/Yield/YieldYield.js +++ /dev/null @@ -1,19 +0,0 @@ -function* f(x) { - yield (yield x); -} - -var g = f(1); -assert.deepEqual(g.next(), {value: 1, done: false}); -assert.deepEqual(g.next(2), {value: 2, done: false}); -assert.deepEqual(g.next(3), {value: undefined, done: true}); - -function* f2(x) { - yield* (yield x); -} - -g = f(1); -var g2 = f2(1); -assert.deepEqual(g2.next(), {value: 1, done: false}); -assert.deepEqual(g2.next(g), {value: 1, done: false}); -assert.deepEqual(g2.next(2), {value: 2, done: false}); -assert.deepEqual(g2.next(3), {value: undefined, done: true}); diff --git a/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js b/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js deleted file mode 100644 index d9dc2d096b..0000000000 --- a/test/fixtures/traceur/Yield/tryFinallyFinallyGenerator.js +++ /dev/null @@ -1,29 +0,0 @@ -// finally inside a try finally -function* tryFinallyFinallyGenerator() { - var y; - - try { - y = 13; - try { - yield y; - } finally { - y = 17; - } - yield y; - } finally { - y = 23; - } - yield y; -} - -function accumulate(iterator) { - var result = ''; - for (var value of iterator) { - result = result + String(value); - } - return result; -} - -// ---------------------------------------------------------------------------- - -assert.equal('131723', accumulate(tryFinallyFinallyGenerator())); From a3b30bae7a89f041a32fd542b2fa7dd705799dd9 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 01:06:16 +1100 Subject: [PATCH 08/39] better traceur test api --- test/_helper.js | 6 +++--- test/_transformation-helper.js | 22 ++++++++++++++-------- test/traceur.js | 2 +- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/test/_helper.js b/test/_helper.js index 78ff16fe0b..4e9274ea77 100644 --- a/test/_helper.js +++ b/test/_helper.js @@ -47,7 +47,7 @@ exports.get = function (entryName) { function push(taskName, taskDir) { // tracuer error tests - if (taskName.indexOf("Error_") === 0) return; + if (taskName.indexOf("Error_") >= 0) return; var actualLocAlias = suiteName + "/" + taskName + "/actual.js"; var expectLocAlias = suiteName + "/" + taskName + "/expected.js"; @@ -97,12 +97,12 @@ exports.get = function (entryName) { // traceur checks var shouldSkip = function (code) { - return code.indexOf("// Error:") === 0 || code.indexOf("// Skip.") === 0; + return code.indexOf("// Error:") >= 0 || code.indexOf("// Skip.") >= 0; }; if (shouldSkip(test.actual.code) || shouldSkip(test.exec.code)) { return; - } else if (test.exec.code.indexOf("// Async.")) { + } else if (test.exec.code.indexOf("// Async.") >= 0) { //test.options.asyncExec = true; } diff --git a/test/_transformation-helper.js b/test/_transformation-helper.js index 2cb148e236..a9620445cb 100644 --- a/test/_transformation-helper.js +++ b/test/_transformation-helper.js @@ -40,16 +40,18 @@ var run = function (task, done) { execCode = result.code; try { - var requireRelative; - if (opts.emulateNodeModule) { - var mod = new Module(exec.loc); - requireRelative = function (loc) { - return mod.require(loc); - }; - } + var fakeRequire = function (loc) { + if (loc === "../../../src/runtime/polyfills/Number.js") { + return Number; + } else if (loc === "../../../src/runtime/polyfills/Math.js") { + return Math; + } else { + return require(path.resolve(exec.loc, "..", loc)); + } + }; var fn = new Function("require", "done", execCode); - fn(requireRelative, chai.assert, done); + fn.call(global, fakeRequire, chai.assert, done); } catch (err) { err.message = exec.loc + ": " + err.message; err.message += util.codeFrame(execCode); @@ -83,6 +85,10 @@ var run = function (task, done) { }; module.exports = function (name, opts) { + if (opts && opts.requireHook) { + require("6to5/register")(opts); + } + _.each(helper.get(name), function (testSuite) { suite(name + "/" + testSuite.title, function () { _.each(testSuite.tests, function (task) { diff --git a/test/traceur.js b/test/traceur.js index b836f00b99..2dd598ffe8 100644 --- a/test/traceur.js +++ b/test/traceur.js @@ -1,5 +1,5 @@ require("./_transformation-helper")("traceur", { blacklist: ["useStrict"], - emulateNodeModule: true, + requireHook: true, experimental: true }); From 108784db20f107cdc37f5165c7169ac4ca5c7860 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 01:06:28 +1100 Subject: [PATCH 09/39] add typeof and interop-require-wildcard helpers --- lib/6to5/file.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/6to5/file.js b/lib/6to5/file.js index 73c10aef1f..82269b4a05 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -30,11 +30,14 @@ File.helpers = [ "has-own", "slice", "define-property", - "async-to-generator" + "async-to-generator", + "interop-require-wildcard", + "typeof" ]; File.excludeHelpersFromRuntime = [ - "async-to-generator" + "async-to-generator", + "typeof" ]; File.normaliseOptions = function (opts) { From 4c2b85deecedd5324519d26b20dbdb66feb7cd5f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 01:06:41 +1100 Subject: [PATCH 10/39] better NewExpression paren insertion --- lib/6to5/generation/node/index.js | 5 ++++- lib/6to5/generation/node/parentheses.js | 5 +++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/6to5/generation/node/index.js b/lib/6to5/generation/node/index.js index b0b283d853..8828ba9030 100644 --- a/lib/6to5/generation/node/index.js +++ b/lib/6to5/generation/node/index.js @@ -61,9 +61,12 @@ Node.prototype.needsParens = function () { if (!parent) return false; if (t.isNewExpression(parent) && parent.callee === node) { - return t.isCallExpression(node) || _.some(node, function (val) { + if (t.isCallExpression(node)) return true; + + var hasCall = _.some(node, function (val) { return t.isCallExpression(val); }); + if (hasCall) return true; } return find(parens, node, parent); diff --git a/lib/6to5/generation/node/parentheses.js b/lib/6to5/generation/node/parentheses.js index 6d96d78675..8415b0c9a5 100644 --- a/lib/6to5/generation/node/parentheses.js +++ b/lib/6to5/generation/node/parentheses.js @@ -13,7 +13,8 @@ _.each([ ["<", ">", "<=", ">=", "in", "instanceof"], [">>", "<<", ">>>"], ["+", "-"], - ["*", "/", "%"] + ["*", "/", "%"], + ["**"] ], function (tier, i) { _.each(tier, function (op) { PRECEDENCE[op] = i; @@ -35,7 +36,7 @@ exports.ObjectExpression = function (node, parent) { }; exports.Binary = function (node, parent) { - if (t.isCallExpression(parent) && parent.callee === node) { + if ((t.isCallExpression(parent) || t.isNewExpression(parent)) && parent.callee === node) { return true; } From 945ea145e7a9900446c1084444d69d68fc7c71a8 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:17:09 +1100 Subject: [PATCH 11/39] remove esnext from differences table --- doc/differences.md | 68 +++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/doc/differences.md b/doc/differences.md index ff27c62378..e90b2ea907 100644 --- a/doc/differences.md +++ b/doc/differences.md @@ -78,43 +78,43 @@ that when you turn it off and use your code in a full ES6 environment ### Features -| | 6to5 | Traceur | es6-transpiler | esnext | es6now | jstransform | -| ---------------------------- | ---- | ------- | -------------- | ------ | ------ | ----------- | -| Source maps | ✓ | ✓ | ✓ | ✓ | | ✓ | -| No compiler global pollution | ✓ | | ✓ | ✓ | | ✓ | -| Optional runtime | ✓ | | ✓ | | | ✓ | -| Browser compiler | ✓ | ✓ | | ✓ | | | +| | 6to5 | Traceur | es6-transpiler | es6now | jstransform | +| ---------------------------- | ---- | ------- | -------------- | ------ | ----------- | +| Source maps | ✓ | ✓ | ✓ | | ✓ | +| No compiler global pollution | ✓ | | ✓ | | ✓ | +| Optional runtime | ✓ | | ✓ | | ✓ | +| Browser compiler | ✓ | ✓ | | | | ### Language Support -| | 6to5 | Traceur | es6-transpiler | esnext | es6now | jstransform | -| ---------------------------- | ---- | ------- | -------------- | ------ | ------ | ----------- | -| Abstract references | ✓ | | | | | | -| Array comprehension | ✓ | ✓ | ✓ | | | | -| Arrow functions | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Async functions | ✓ | ✓ | | ✓ | | | -| Async generator functions | ✓ | ✓ | | | | | -| Classes | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Computed property names | ✓ | ✓ | ✓ | ✓ | ✓ | | -| Constants | ✓ | ✓ | ✓ | | | | -| Default parameters | ✓ | ✓ | ✓ | ✓ | ✓ | | -| Destructuring | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Exponentiation operator | ✓ | ✓ | | | | | -| Flow types | ✓ | | | | | ✓ | -| For-of | ✓ | ✓ | ✓ | ✓ | ✓ | | -| Generators | ✓ | ✓ | | ✓ | | | -| Generator comprehension | ✓ | ✓ | | | | | -| JSX | ✓ | | | | | | -| Let scoping | ✓ | ✓ | ✓ | | | | -| Modules | ✓ | ✓ | | | ✓ | | -| Object rest/spread | ✓ | | | | | ✓ | -| Property method assignment | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Property name shorthand | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Rest parameters | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| React | ✓ | | | | | | -| Spread | ✓ | ✓ | ✓ | ✓ | ✓ | | -| Template literals | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | -| Unicode regex | ✓ | ✓ | ✓ | | | | +| | 6to5 | Traceur | es6-transpiler | es6now | jstransform | +| ---------------------------- | ---- | ------- | -------------- | ------ | ----------- | +| Abstract references | ✓ | | | | | +| Array comprehension | ✓ | ✓ | ✓ | | | +| Arrow functions | ✓ | ✓ | ✓ | ✓ | ✓ | +| Async functions | ✓ | ✓ | | | | +| Async generator functions | ✓ | ✓ | | | | +| Classes | ✓ | ✓ | ✓ | ✓ | ✓ | +| Computed property names | ✓ | ✓ | ✓ | ✓ | | +| Constants | ✓ | ✓ | ✓ | | | +| Default parameters | ✓ | ✓ | ✓ | ✓ | | +| Destructuring | ✓ | ✓ | ✓ | ✓ | ✓ | +| Exponentiation operator | ✓ | ✓ | | | | +| Flow types | ✓ | | | | ✓ | +| For-of | ✓ | ✓ | ✓ | ✓ | | +| Generators | ✓ | ✓ | | | | +| Generator comprehension | ✓ | ✓ | | | | +| JSX | ✓ | | | | | +| Let scoping | ✓ | ✓ | ✓ | | | +| Modules | ✓ | ✓ | | ✓ | | +| Object rest/spread | ✓ | | | | ✓ | +| Property method assignment | ✓ | ✓ | ✓ | ✓ | ✓ | +| Property name shorthand | ✓ | ✓ | ✓ | ✓ | ✓ | +| Rest parameters | ✓ | ✓ | ✓ | ✓ | ✓ | +| React | ✓ | | | | | +| Spread | ✓ | ✓ | ✓ | ✓ | | +| Template literals | ✓ | ✓ | ✓ | ✓ | ✓ | +| Unicode regex | ✓ | ✓ | ✓ | | | ### [Traceur](https://github.com/google/traceur-compiler) From a8fad4b9581602aaf5506b603fc740513d1d3aa3 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:17:23 +1100 Subject: [PATCH 12/39] add traceur gits ubmodule --- .gitmodules | 3 +++ vendor/traceur | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 vendor/traceur diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000000..d5327c7e27 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "vendor/traceur"] + path = vendor/traceur + url = https://github.com/google/traceur-compiler diff --git a/vendor/traceur b/vendor/traceur new file mode 160000 index 0000000000..0c3dad3ae2 --- /dev/null +++ b/vendor/traceur @@ -0,0 +1 @@ +Subproject commit 0c3dad3ae217139b1a6b4b986cef57669e7b49c6 From 7f87ca0d436bd969d30ac66ed186bb5d6765539c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:18:30 +1100 Subject: [PATCH 13/39] move traceur test suite to a git submodule --- test/_helper.js | 5 +-- test/_transformation-helper.js | 39 ++++++++++++++++++----- test/mocha.opts | 2 -- test/traceur.js | 56 +++++++++++++++++++++++++++++++--- test/transformation.js | 4 ++- 5 files changed, 89 insertions(+), 17 deletions(-) diff --git a/test/_helper.js b/test/_helper.js index 4e9274ea77..60371d0e2f 100644 --- a/test/_helper.js +++ b/test/_helper.js @@ -16,11 +16,11 @@ var readFile = exports.readFile = function (filename) { } }; -exports.get = function (entryName) { +exports.get = function (entryName, entryLoc) { if (exports.cache[entryName]) return exports.cache[entryName]; var suites = []; - var entryLoc = __dirname + "/fixtures/" + entryName; + var entryLoc = entryLoc || __dirname + "/fixtures/" + entryName; _.each(fs.readdirSync(entryLoc), function (suiteName) { if (suiteName[0] === ".") return; @@ -133,4 +133,5 @@ try { var cache = exports.cache = {}; cache.transformation = exports.get("transformation"); cache.generation = exports.get("generation"); + cache.esnext = exports.get("esnext"); } diff --git a/test/_transformation-helper.js b/test/_transformation-helper.js index a9620445cb..0bf356e65c 100644 --- a/test/_transformation-helper.js +++ b/test/_transformation-helper.js @@ -20,6 +20,19 @@ global.assert = chai.assert; global.chai = chai; global.genHelpers = genHelpers; +// Different Traceur generator message +chai.assert._throw = chai.assert.throw; +chai.assert.throw = function (fn, msg) { + if (msg === '"throw" on executing generator' || + msg === '"next" on executing generator') { + msg = "Generator is already running"; + } else if (msg === "Sent value to newborn generator") { + msg = /^attempt to send (.*?) to newborn generator$/; + } + + return chai.assert._throw(fn, msg); +}; + var run = function (task, done) { var actual = task.actual; var expect = task.expect; @@ -84,20 +97,30 @@ var run = function (task, done) { } }; -module.exports = function (name, opts) { - if (opts && opts.requireHook) { - require("6to5/register")(opts); - } +module.exports = function (suiteOpts, taskOpts, dynamicOpts) { + taskOpts = taskOpts || {}; - _.each(helper.get(name), function (testSuite) { - suite(name + "/" + testSuite.title, function () { + require("6to5/register")(taskOpts); + + _.each(helper.get(suiteOpts.name, suiteOpts.loc), function (testSuite) { + if (_.contains(suiteOpts.ignoreSuites, testSuite.title)) return; + + suite(suiteOpts.name + "/" + testSuite.title, function () { _.each(testSuite.tests, function (task) { + if (_.contains(suiteOpts.ignoreTasks, task.title) || _.contains(suiteOpts.ignoreTasks, testSuite.title + "/" + task.title)) return; + var runTest = function (done) { var runTask = function () { - run(task, done); + try { + run(task, done); + } catch (err) { + if (task.options.after) task.options.after(); + throw err; + } }; - _.defaults(task.options, opts); + _.extend(task.options, taskOpts); + if (dynamicOpts) dynamicOpts(task.options, task); var throwMsg = task.options.throws; if (throwMsg) { diff --git a/test/mocha.opts b/test/mocha.opts index 51c30180df..850a6c2f64 100644 --- a/test/mocha.opts +++ b/test/mocha.opts @@ -1,4 +1,2 @@ --reporter dot --ui tdd ---check-leaks ---globals regeneratorRuntime diff --git a/test/traceur.js b/test/traceur.js index 2dd598ffe8..20a395d198 100644 --- a/test/traceur.js +++ b/test/traceur.js @@ -1,5 +1,53 @@ -require("./_transformation-helper")("traceur", { - blacklist: ["useStrict"], - requireHook: true, - experimental: true +var _ = require("lodash"); + +require("./_transformation-helper")({ + name: "traceur", + loc: __dirname + "/../vendor/traceur/test/feature", + + ignoreSuites: [ + "ObjectMixin", + "Annotations", + "TestRunner", + "Tools", + "TempVarTransformer", + "AtScript", + "FreeVariableChecker", + "TypeAssertions", + "MemberVariables", + "Types", + + // REENABLE THESE + "Destructuring", + "Syntax", + "StringExtras", + "Symbol", + "Yield", + "Modules", + "Spread", + "Scope", + "GeneratorComprehension" + ], + + ignoreTasks: [ + "Strict", + + // core.js doesn't support due to a perf hit and having to override a lot + // of native methods + "Symbol/GetOwnPropertySymbols", + + // Traceur doesn't name methods and has an incorrect test asserting that + // they have no names + "PropertyMethodAssignment/PropertyMethodAssignment" + ] +}, { + optional: ["typeofSymbol"], + experimental: true, + after: function () { + // StringExtras/StarsWith + delete Object.prototype[1]; + } +}, function (opts, task) { + if (!_.contains(task.exec.loc, "module.js")) { + opts.blacklist = ["useStrict"]; + } }); diff --git a/test/transformation.js b/test/transformation.js index 8fa8d298ad..642604401e 100644 --- a/test/transformation.js +++ b/test/transformation.js @@ -1 +1,3 @@ -require("./_transformation-helper")("transformation"); +require("./_transformation-helper")({ + name: "transformation" +}); From ffbfa5281b9c2265aab2701cf0447d58ba92b95e Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:18:42 +1100 Subject: [PATCH 14/39] move esnext tests into their own fixtures folder --- test/esnext.js | 3 +++ .../arguments-refers-to-parent-function.js | 0 .../does-not-bind-this-from-standard-function.js | 0 .../es6-arrow-functions}/empty-arrow-function.js | 0 .../es6-arrow-functions}/handles-nested-context-bindings.js | 0 .../no-parens-for-low-precedence-expression-body.js | 0 .../es6-arrow-functions}/object-literal-needs-parens.js | 0 .../es6-arrow-functions}/only-lexical-this-not-dynamic-this.js | 0 .../es6-arrow-functions}/passed-to-function.js | 0 .../es6-arrow-functions}/single-param-does-not-need-parens.js | 0 .../es6-classes}/anonymous-class.js | 0 .../es6-classes}/call-super-function.js | 0 .../es6-classes}/class-expressions.js | 0 .../esnext-es6-classes => esnext/es6-classes}/class-extend.js | 0 .../es6-classes}/class-with-constructor.js | 0 .../es6-classes}/class-with-method-declaration.js | 0 .../es6-classes}/empty-named-class.js | 0 .../esnext-es6-classes => esnext/es6-classes}/enumerable.js | 0 .../es6-classes}/explicit-super-in-constructor.js | 0 .../esnext-es6-classes => esnext/es6-classes}/extends-null.js | 0 .../es6-classes/getter-setter-super.js} | 0 .../esnext-es6-classes => esnext/es6-classes}/getter-setter.js | 0 .../es6-classes}/implicit-superclass.js | 0 .../es6-classes}/method-declaration-with-arguments.js | 0 .../es6-classes}/methods-are-writable.js | 0 .../es6-classes}/methods-with-rest-params.js | 0 .../esnext-es6-classes => esnext/es6-classes}/static-getter.js | 0 .../esnext-es6-classes => esnext/es6-classes}/static-method.js | 0 .../esnext-es6-classes => esnext/es6-classes}/static-setter.js | 0 .../es6-classes/super-change-proto.js} | 0 .../es6-computed-properties}/accessor.js | 0 .../es6-computed-properties}/method.js | 0 .../es6-computed-properties}/nested.js | 0 .../es6-computed-properties}/simple.js | 0 .../es6-default-parameters}/arity.js | 0 .../es6-default-parameters}/arrow-function.js | 0 .../es6-default-parameters}/null-vs-undefined.js | 0 .../es6-default-parameters}/scope.js | 0 .../es6-default-parameters}/simple-function.js | 0 .../es6-object-concise}/method-arguments.js | 0 .../es6-object-concise}/method-context.js | 0 .../es6-object-concise}/method-has-name.js | 0 .../es6-object-concise}/method-is-not-in-scope-inside.js | 0 .../es6-object-concise}/method-to-string.js | 0 .../es6-object-concise}/method.js | 0 .../es6-rest-parameters}/arrow-fn.js | 0 .../es6-rest-parameters}/declaration.js | 0 .../es6-rest-parameters}/rest.js | 0 .../es6-spread}/arguments-as-array.js | 0 .../esnext-es6-spread => esnext/es6-spread}/array-literal.js | 0 .../es6-spread}/call-with-array-literal.js | 0 .../es6-spread}/inside-function-expression.js | 0 .../esnext-es6-spread => esnext/es6-spread}/iterator.js | 0 .../esnext-es6-spread => esnext/es6-spread}/new-object.js | 0 .../es6-spread}/preserve-context.js | 0 .../es6-spread}/simple-function-call.js | 0 .../es6-templates}/multi-line.js | 0 .../es6-templates}/nested-interpolation.js | 0 .../es6-templates}/no-interpolation.js | 0 .../es6-templates}/raw-tagged-template-expression.js | 0 .../es6-templates}/simple-interpolation.js | 0 .../es6-templates}/tagged-template-expression.js | 0 62 files changed, 3 insertions(+) create mode 100644 test/esnext.js rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/arguments-refers-to-parent-function.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/does-not-bind-this-from-standard-function.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/empty-arrow-function.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/handles-nested-context-bindings.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/no-parens-for-low-precedence-expression-body.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/object-literal-needs-parens.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/only-lexical-this-not-dynamic-this.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/passed-to-function.js (100%) rename test/fixtures/{transformation/esnext-es6-arrow-functions => esnext/es6-arrow-functions}/single-param-does-not-need-parens.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/anonymous-class.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/call-super-function.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/class-expressions.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/class-extend.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/class-with-constructor.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/class-with-method-declaration.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/empty-named-class.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/enumerable.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/explicit-super-in-constructor.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/extends-null.js (100%) rename test/fixtures/{transformation/esnext-es6-classes/.getter-setter-super.js => esnext/es6-classes/getter-setter-super.js} (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/getter-setter.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/implicit-superclass.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/method-declaration-with-arguments.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/methods-are-writable.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/methods-with-rest-params.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/static-getter.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/static-method.js (100%) rename test/fixtures/{transformation/esnext-es6-classes => esnext/es6-classes}/static-setter.js (100%) rename test/fixtures/{transformation/esnext-es6-classes/.super-change-proto.js => esnext/es6-classes/super-change-proto.js} (100%) rename test/fixtures/{transformation/esnext-es6-computed-properties => esnext/es6-computed-properties}/accessor.js (100%) rename test/fixtures/{transformation/esnext-es6-computed-properties => esnext/es6-computed-properties}/method.js (100%) rename test/fixtures/{transformation/esnext-es6-computed-properties => esnext/es6-computed-properties}/nested.js (100%) rename test/fixtures/{transformation/esnext-es6-computed-properties => esnext/es6-computed-properties}/simple.js (100%) rename test/fixtures/{transformation/esnext-es6-default-parameters => esnext/es6-default-parameters}/arity.js (100%) rename test/fixtures/{transformation/esnext-es6-default-parameters => esnext/es6-default-parameters}/arrow-function.js (100%) rename test/fixtures/{transformation/esnext-es6-default-parameters => esnext/es6-default-parameters}/null-vs-undefined.js (100%) rename test/fixtures/{transformation/esnext-es6-default-parameters => esnext/es6-default-parameters}/scope.js (100%) rename test/fixtures/{transformation/esnext-es6-default-parameters => esnext/es6-default-parameters}/simple-function.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method-arguments.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method-context.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method-has-name.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method-is-not-in-scope-inside.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method-to-string.js (100%) rename test/fixtures/{transformation/esnext-es6-object-concise => esnext/es6-object-concise}/method.js (100%) rename test/fixtures/{transformation/esnext-es6-rest-parameters => esnext/es6-rest-parameters}/arrow-fn.js (100%) rename test/fixtures/{transformation/esnext-es6-rest-parameters => esnext/es6-rest-parameters}/declaration.js (100%) rename test/fixtures/{transformation/esnext-es6-rest-parameters => esnext/es6-rest-parameters}/rest.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/arguments-as-array.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/array-literal.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/call-with-array-literal.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/inside-function-expression.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/iterator.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/new-object.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/preserve-context.js (100%) rename test/fixtures/{transformation/esnext-es6-spread => esnext/es6-spread}/simple-function-call.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/multi-line.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/nested-interpolation.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/no-interpolation.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/raw-tagged-template-expression.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/simple-interpolation.js (100%) rename test/fixtures/{transformation/esnext-es6-templates => esnext/es6-templates}/tagged-template-expression.js (100%) diff --git a/test/esnext.js b/test/esnext.js new file mode 100644 index 0000000000..7c8d38dd5c --- /dev/null +++ b/test/esnext.js @@ -0,0 +1,3 @@ +require("./_transformation-helper")({ + name: "esnext" +}); diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/arguments-refers-to-parent-function.js b/test/fixtures/esnext/es6-arrow-functions/arguments-refers-to-parent-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/arguments-refers-to-parent-function.js rename to test/fixtures/esnext/es6-arrow-functions/arguments-refers-to-parent-function.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/does-not-bind-this-from-standard-function.js b/test/fixtures/esnext/es6-arrow-functions/does-not-bind-this-from-standard-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/does-not-bind-this-from-standard-function.js rename to test/fixtures/esnext/es6-arrow-functions/does-not-bind-this-from-standard-function.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/empty-arrow-function.js b/test/fixtures/esnext/es6-arrow-functions/empty-arrow-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/empty-arrow-function.js rename to test/fixtures/esnext/es6-arrow-functions/empty-arrow-function.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/handles-nested-context-bindings.js b/test/fixtures/esnext/es6-arrow-functions/handles-nested-context-bindings.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/handles-nested-context-bindings.js rename to test/fixtures/esnext/es6-arrow-functions/handles-nested-context-bindings.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/no-parens-for-low-precedence-expression-body.js b/test/fixtures/esnext/es6-arrow-functions/no-parens-for-low-precedence-expression-body.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/no-parens-for-low-precedence-expression-body.js rename to test/fixtures/esnext/es6-arrow-functions/no-parens-for-low-precedence-expression-body.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/object-literal-needs-parens.js b/test/fixtures/esnext/es6-arrow-functions/object-literal-needs-parens.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/object-literal-needs-parens.js rename to test/fixtures/esnext/es6-arrow-functions/object-literal-needs-parens.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/only-lexical-this-not-dynamic-this.js b/test/fixtures/esnext/es6-arrow-functions/only-lexical-this-not-dynamic-this.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/only-lexical-this-not-dynamic-this.js rename to test/fixtures/esnext/es6-arrow-functions/only-lexical-this-not-dynamic-this.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/passed-to-function.js b/test/fixtures/esnext/es6-arrow-functions/passed-to-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/passed-to-function.js rename to test/fixtures/esnext/es6-arrow-functions/passed-to-function.js diff --git a/test/fixtures/transformation/esnext-es6-arrow-functions/single-param-does-not-need-parens.js b/test/fixtures/esnext/es6-arrow-functions/single-param-does-not-need-parens.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-arrow-functions/single-param-does-not-need-parens.js rename to test/fixtures/esnext/es6-arrow-functions/single-param-does-not-need-parens.js diff --git a/test/fixtures/transformation/esnext-es6-classes/anonymous-class.js b/test/fixtures/esnext/es6-classes/anonymous-class.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/anonymous-class.js rename to test/fixtures/esnext/es6-classes/anonymous-class.js diff --git a/test/fixtures/transformation/esnext-es6-classes/call-super-function.js b/test/fixtures/esnext/es6-classes/call-super-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/call-super-function.js rename to test/fixtures/esnext/es6-classes/call-super-function.js diff --git a/test/fixtures/transformation/esnext-es6-classes/class-expressions.js b/test/fixtures/esnext/es6-classes/class-expressions.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/class-expressions.js rename to test/fixtures/esnext/es6-classes/class-expressions.js diff --git a/test/fixtures/transformation/esnext-es6-classes/class-extend.js b/test/fixtures/esnext/es6-classes/class-extend.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/class-extend.js rename to test/fixtures/esnext/es6-classes/class-extend.js diff --git a/test/fixtures/transformation/esnext-es6-classes/class-with-constructor.js b/test/fixtures/esnext/es6-classes/class-with-constructor.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/class-with-constructor.js rename to test/fixtures/esnext/es6-classes/class-with-constructor.js diff --git a/test/fixtures/transformation/esnext-es6-classes/class-with-method-declaration.js b/test/fixtures/esnext/es6-classes/class-with-method-declaration.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/class-with-method-declaration.js rename to test/fixtures/esnext/es6-classes/class-with-method-declaration.js diff --git a/test/fixtures/transformation/esnext-es6-classes/empty-named-class.js b/test/fixtures/esnext/es6-classes/empty-named-class.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/empty-named-class.js rename to test/fixtures/esnext/es6-classes/empty-named-class.js diff --git a/test/fixtures/transformation/esnext-es6-classes/enumerable.js b/test/fixtures/esnext/es6-classes/enumerable.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/enumerable.js rename to test/fixtures/esnext/es6-classes/enumerable.js diff --git a/test/fixtures/transformation/esnext-es6-classes/explicit-super-in-constructor.js b/test/fixtures/esnext/es6-classes/explicit-super-in-constructor.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/explicit-super-in-constructor.js rename to test/fixtures/esnext/es6-classes/explicit-super-in-constructor.js diff --git a/test/fixtures/transformation/esnext-es6-classes/extends-null.js b/test/fixtures/esnext/es6-classes/extends-null.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/extends-null.js rename to test/fixtures/esnext/es6-classes/extends-null.js diff --git a/test/fixtures/transformation/esnext-es6-classes/.getter-setter-super.js b/test/fixtures/esnext/es6-classes/getter-setter-super.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/.getter-setter-super.js rename to test/fixtures/esnext/es6-classes/getter-setter-super.js diff --git a/test/fixtures/transformation/esnext-es6-classes/getter-setter.js b/test/fixtures/esnext/es6-classes/getter-setter.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/getter-setter.js rename to test/fixtures/esnext/es6-classes/getter-setter.js diff --git a/test/fixtures/transformation/esnext-es6-classes/implicit-superclass.js b/test/fixtures/esnext/es6-classes/implicit-superclass.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/implicit-superclass.js rename to test/fixtures/esnext/es6-classes/implicit-superclass.js diff --git a/test/fixtures/transformation/esnext-es6-classes/method-declaration-with-arguments.js b/test/fixtures/esnext/es6-classes/method-declaration-with-arguments.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/method-declaration-with-arguments.js rename to test/fixtures/esnext/es6-classes/method-declaration-with-arguments.js diff --git a/test/fixtures/transformation/esnext-es6-classes/methods-are-writable.js b/test/fixtures/esnext/es6-classes/methods-are-writable.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/methods-are-writable.js rename to test/fixtures/esnext/es6-classes/methods-are-writable.js diff --git a/test/fixtures/transformation/esnext-es6-classes/methods-with-rest-params.js b/test/fixtures/esnext/es6-classes/methods-with-rest-params.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/methods-with-rest-params.js rename to test/fixtures/esnext/es6-classes/methods-with-rest-params.js diff --git a/test/fixtures/transformation/esnext-es6-classes/static-getter.js b/test/fixtures/esnext/es6-classes/static-getter.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/static-getter.js rename to test/fixtures/esnext/es6-classes/static-getter.js diff --git a/test/fixtures/transformation/esnext-es6-classes/static-method.js b/test/fixtures/esnext/es6-classes/static-method.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/static-method.js rename to test/fixtures/esnext/es6-classes/static-method.js diff --git a/test/fixtures/transformation/esnext-es6-classes/static-setter.js b/test/fixtures/esnext/es6-classes/static-setter.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/static-setter.js rename to test/fixtures/esnext/es6-classes/static-setter.js diff --git a/test/fixtures/transformation/esnext-es6-classes/.super-change-proto.js b/test/fixtures/esnext/es6-classes/super-change-proto.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-classes/.super-change-proto.js rename to test/fixtures/esnext/es6-classes/super-change-proto.js diff --git a/test/fixtures/transformation/esnext-es6-computed-properties/accessor.js b/test/fixtures/esnext/es6-computed-properties/accessor.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-computed-properties/accessor.js rename to test/fixtures/esnext/es6-computed-properties/accessor.js diff --git a/test/fixtures/transformation/esnext-es6-computed-properties/method.js b/test/fixtures/esnext/es6-computed-properties/method.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-computed-properties/method.js rename to test/fixtures/esnext/es6-computed-properties/method.js diff --git a/test/fixtures/transformation/esnext-es6-computed-properties/nested.js b/test/fixtures/esnext/es6-computed-properties/nested.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-computed-properties/nested.js rename to test/fixtures/esnext/es6-computed-properties/nested.js diff --git a/test/fixtures/transformation/esnext-es6-computed-properties/simple.js b/test/fixtures/esnext/es6-computed-properties/simple.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-computed-properties/simple.js rename to test/fixtures/esnext/es6-computed-properties/simple.js diff --git a/test/fixtures/transformation/esnext-es6-default-parameters/arity.js b/test/fixtures/esnext/es6-default-parameters/arity.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-default-parameters/arity.js rename to test/fixtures/esnext/es6-default-parameters/arity.js diff --git a/test/fixtures/transformation/esnext-es6-default-parameters/arrow-function.js b/test/fixtures/esnext/es6-default-parameters/arrow-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-default-parameters/arrow-function.js rename to test/fixtures/esnext/es6-default-parameters/arrow-function.js diff --git a/test/fixtures/transformation/esnext-es6-default-parameters/null-vs-undefined.js b/test/fixtures/esnext/es6-default-parameters/null-vs-undefined.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-default-parameters/null-vs-undefined.js rename to test/fixtures/esnext/es6-default-parameters/null-vs-undefined.js diff --git a/test/fixtures/transformation/esnext-es6-default-parameters/scope.js b/test/fixtures/esnext/es6-default-parameters/scope.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-default-parameters/scope.js rename to test/fixtures/esnext/es6-default-parameters/scope.js diff --git a/test/fixtures/transformation/esnext-es6-default-parameters/simple-function.js b/test/fixtures/esnext/es6-default-parameters/simple-function.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-default-parameters/simple-function.js rename to test/fixtures/esnext/es6-default-parameters/simple-function.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method-arguments.js b/test/fixtures/esnext/es6-object-concise/method-arguments.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method-arguments.js rename to test/fixtures/esnext/es6-object-concise/method-arguments.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method-context.js b/test/fixtures/esnext/es6-object-concise/method-context.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method-context.js rename to test/fixtures/esnext/es6-object-concise/method-context.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method-has-name.js b/test/fixtures/esnext/es6-object-concise/method-has-name.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method-has-name.js rename to test/fixtures/esnext/es6-object-concise/method-has-name.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method-is-not-in-scope-inside.js b/test/fixtures/esnext/es6-object-concise/method-is-not-in-scope-inside.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method-is-not-in-scope-inside.js rename to test/fixtures/esnext/es6-object-concise/method-is-not-in-scope-inside.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method-to-string.js b/test/fixtures/esnext/es6-object-concise/method-to-string.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method-to-string.js rename to test/fixtures/esnext/es6-object-concise/method-to-string.js diff --git a/test/fixtures/transformation/esnext-es6-object-concise/method.js b/test/fixtures/esnext/es6-object-concise/method.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-object-concise/method.js rename to test/fixtures/esnext/es6-object-concise/method.js diff --git a/test/fixtures/transformation/esnext-es6-rest-parameters/arrow-fn.js b/test/fixtures/esnext/es6-rest-parameters/arrow-fn.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-rest-parameters/arrow-fn.js rename to test/fixtures/esnext/es6-rest-parameters/arrow-fn.js diff --git a/test/fixtures/transformation/esnext-es6-rest-parameters/declaration.js b/test/fixtures/esnext/es6-rest-parameters/declaration.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-rest-parameters/declaration.js rename to test/fixtures/esnext/es6-rest-parameters/declaration.js diff --git a/test/fixtures/transformation/esnext-es6-rest-parameters/rest.js b/test/fixtures/esnext/es6-rest-parameters/rest.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-rest-parameters/rest.js rename to test/fixtures/esnext/es6-rest-parameters/rest.js diff --git a/test/fixtures/transformation/esnext-es6-spread/arguments-as-array.js b/test/fixtures/esnext/es6-spread/arguments-as-array.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/arguments-as-array.js rename to test/fixtures/esnext/es6-spread/arguments-as-array.js diff --git a/test/fixtures/transformation/esnext-es6-spread/array-literal.js b/test/fixtures/esnext/es6-spread/array-literal.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/array-literal.js rename to test/fixtures/esnext/es6-spread/array-literal.js diff --git a/test/fixtures/transformation/esnext-es6-spread/call-with-array-literal.js b/test/fixtures/esnext/es6-spread/call-with-array-literal.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/call-with-array-literal.js rename to test/fixtures/esnext/es6-spread/call-with-array-literal.js diff --git a/test/fixtures/transformation/esnext-es6-spread/inside-function-expression.js b/test/fixtures/esnext/es6-spread/inside-function-expression.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/inside-function-expression.js rename to test/fixtures/esnext/es6-spread/inside-function-expression.js diff --git a/test/fixtures/transformation/esnext-es6-spread/iterator.js b/test/fixtures/esnext/es6-spread/iterator.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/iterator.js rename to test/fixtures/esnext/es6-spread/iterator.js diff --git a/test/fixtures/transformation/esnext-es6-spread/new-object.js b/test/fixtures/esnext/es6-spread/new-object.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/new-object.js rename to test/fixtures/esnext/es6-spread/new-object.js diff --git a/test/fixtures/transformation/esnext-es6-spread/preserve-context.js b/test/fixtures/esnext/es6-spread/preserve-context.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/preserve-context.js rename to test/fixtures/esnext/es6-spread/preserve-context.js diff --git a/test/fixtures/transformation/esnext-es6-spread/simple-function-call.js b/test/fixtures/esnext/es6-spread/simple-function-call.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-spread/simple-function-call.js rename to test/fixtures/esnext/es6-spread/simple-function-call.js diff --git a/test/fixtures/transformation/esnext-es6-templates/multi-line.js b/test/fixtures/esnext/es6-templates/multi-line.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/multi-line.js rename to test/fixtures/esnext/es6-templates/multi-line.js diff --git a/test/fixtures/transformation/esnext-es6-templates/nested-interpolation.js b/test/fixtures/esnext/es6-templates/nested-interpolation.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/nested-interpolation.js rename to test/fixtures/esnext/es6-templates/nested-interpolation.js diff --git a/test/fixtures/transformation/esnext-es6-templates/no-interpolation.js b/test/fixtures/esnext/es6-templates/no-interpolation.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/no-interpolation.js rename to test/fixtures/esnext/es6-templates/no-interpolation.js diff --git a/test/fixtures/transformation/esnext-es6-templates/raw-tagged-template-expression.js b/test/fixtures/esnext/es6-templates/raw-tagged-template-expression.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/raw-tagged-template-expression.js rename to test/fixtures/esnext/es6-templates/raw-tagged-template-expression.js diff --git a/test/fixtures/transformation/esnext-es6-templates/simple-interpolation.js b/test/fixtures/esnext/es6-templates/simple-interpolation.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/simple-interpolation.js rename to test/fixtures/esnext/es6-templates/simple-interpolation.js diff --git a/test/fixtures/transformation/esnext-es6-templates/tagged-template-expression.js b/test/fixtures/esnext/es6-templates/tagged-template-expression.js similarity index 100% rename from test/fixtures/transformation/esnext-es6-templates/tagged-template-expression.js rename to test/fixtures/esnext/es6-templates/tagged-template-expression.js From 3f152bfc3fe97c1ea2ce40089152e2fd08d5841a Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:19:01 +1100 Subject: [PATCH 15/39] upgrade core-js from 0.3.3 to 0.40 and regenerator from 0.8.2 to 0.8.3 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 390149491c..b7fe304c6f 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "ast-types": "~0.6.1", "chokidar": "0.11.1", "commander": "2.5.0", - "core-js": "^0.3.3", + "core-js": "^0.4.0", "estraverse": "1.8.0", "esutils": "1.1.6", "fs-readdir-recursive": "0.1.0", @@ -51,7 +51,7 @@ "lodash": "2.4.1", "mkdirp": "0.5.0", "private": "0.1.6", - "regenerator": "^0.8.2", + "regenerator": "^0.8.3", "regexpu": "0.3.0", "roadrunner": "^1.0.4", "source-map": "0.1.40", From 45d0eea8420b6cf30887da3c1f66d83d64840497 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:20:36 +1100 Subject: [PATCH 16/39] fix native type constructor spread - closes #373 --- lib/6to5/file.js | 1 + lib/6to5/transformation/templates/bind.js | 1 + .../transformation/transformers/es6-spread.js | 20 ++++++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 lib/6to5/transformation/templates/bind.js diff --git a/lib/6to5/file.js b/lib/6to5/file.js index 82269b4a05..479e233ee6 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -29,6 +29,7 @@ File.helpers = [ "object-without-properties", "has-own", "slice", + "bind", "define-property", "async-to-generator", "interop-require-wildcard", diff --git a/lib/6to5/transformation/templates/bind.js b/lib/6to5/transformation/templates/bind.js new file mode 100644 index 0000000000..abe1c0668a --- /dev/null +++ b/lib/6to5/transformation/templates/bind.js @@ -0,0 +1 @@ +Function.prototype.bind diff --git a/lib/6to5/transformation/transformers/es6-spread.js b/lib/6to5/transformation/transformers/es6-spread.js index 214a765f03..2f544fe989 100644 --- a/lib/6to5/transformation/transformers/es6-spread.js +++ b/lib/6to5/transformation/transformers/es6-spread.js @@ -1,4 +1,5 @@ var t = require("../../types"); +var _ = require("lodash"); var getSpreadLiteral = function (spread, file) { return file.toArray(spread.argument); @@ -98,7 +99,14 @@ exports.NewExpression = function (node, parent, file) { var args = node.arguments; if (!hasSpread(args)) return; + var nativeType = t.isIdentifier(node.callee) && _.contains(t.NATIVE_TYPES_NAMES, node.callee.name); + var nodes = build(args, file); + + if (nativeType) { + nodes.unshift(t.arrayExpression([t.literal(null)])); + } + var first = nodes.shift(); if (nodes.length) { @@ -107,5 +115,15 @@ exports.NewExpression = function (node, parent, file) { args = first; } - return t.callExpression(file.addHelper("apply-constructor"), [node.callee, args]); + if (nativeType) { + return t.newExpression( + t.callExpression( + t.memberExpression(file.addHelper("bind"), t.identifier("apply")), + [node.callee, args] + ), + [] + ); + } else { + return t.callExpression(file.addHelper("apply-constructor"), [node.callee, args]); + } }; From f85eeeb93c963a40b11728ca5dbca58ed6f6c712 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:21:24 +1100 Subject: [PATCH 17/39] fix blockHoist and declarations transformers unneccesarily unshifting use strict statements --- .../transformers/_block-hoist.js | 19 +++++++----- .../transformers/_declarations.js | 31 ++++++++++--------- .../transformation/transformers/use-strict.js | 27 +++++++++++----- 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/lib/6to5/transformation/transformers/_block-hoist.js b/lib/6to5/transformation/transformers/_block-hoist.js index b6fff4a860..e024a8a193 100644 --- a/lib/6to5/transformation/transformers/_block-hoist.js +++ b/lib/6to5/transformation/transformers/_block-hoist.js @@ -1,4 +1,5 @@ -var _ = require("lodash"); +var useStrict = require("./use-strict"); +var _ = require("lodash"); // Priority: // @@ -17,13 +18,15 @@ exports.Program = { } if (!hasChange) return; - var nodePriorities = _.groupBy(node.body, function (bodyNode) { - var priority = bodyNode._blockHoist; - if (priority == null) priority = 1; - if (priority === true) priority = 2; - return priority; - }); + useStrict._wrap(node, function () { + var nodePriorities = _.groupBy(node.body, function (bodyNode) { + var priority = bodyNode._blockHoist; + if (priority == null) priority = 1; + if (priority === true) priority = 2; + return priority; + }); - node.body = _.flatten(_.values(nodePriorities).reverse()); + node.body = _.flatten(_.values(nodePriorities).reverse()); + }); } }; diff --git a/lib/6to5/transformation/transformers/_declarations.js b/lib/6to5/transformation/transformers/_declarations.js index ae0f355b08..20fbfadb6e 100644 --- a/lib/6to5/transformation/transformers/_declarations.js +++ b/lib/6to5/transformation/transformers/_declarations.js @@ -1,4 +1,5 @@ -var t = require("../../types"); +var useStrict = require("./use-strict"); +var t = require("../../types"); exports.secondPass = true; @@ -7,23 +8,25 @@ exports.Program = function (node) { var kinds = {}; var kind; - for (var i in node._declarations) { - var declar = node._declarations[i]; + useStrict._wrap(node, function () { + for (var i in node._declarations) { + var declar = node._declarations[i]; - kind = declar.kind || "var"; - var declarNode = t.variableDeclarator(declar.id, declar.init); + kind = declar.kind || "var"; + var declarNode = t.variableDeclarator(declar.id, declar.init); - if (!declar.init) { - kinds[kind] = kinds[kind] || []; - kinds[kind].push(declarNode); - } else { - node.body.unshift(t.variableDeclaration(kind, [declarNode])); + if (!declar.init) { + kinds[kind] = kinds[kind] || []; + kinds[kind].push(declarNode); + } else { + node.body.unshift(t.variableDeclaration(kind, [declarNode])); + } } - } - for (kind in kinds) { - node.body.unshift(t.variableDeclaration(kind, kinds[kind])); - } + for (kind in kinds) { + node.body.unshift(t.variableDeclaration(kind, kinds[kind])); + } + }); node._declarations = null; }; diff --git a/lib/6to5/transformation/transformers/use-strict.js b/lib/6to5/transformation/transformers/use-strict.js index 02d4dbc264..bd9fd9c651 100644 --- a/lib/6to5/transformation/transformers/use-strict.js +++ b/lib/6to5/transformation/transformers/use-strict.js @@ -1,14 +1,27 @@ var t = require("../../types"); +exports._has = function (node) { + var first = node.body[0]; + return t.isExpressionStatement(first) && t.isLiteral(first.expression, { value: "use strict" }); +}; + +exports._wrap = function (node, callback) { + var useStrictNode; + if (exports._has(node)) { + useStrictNode = node.body.shift(); + } + + callback(); + + if (useStrictNode) { + node.body.unshift(useStrictNode); + } +}; + exports.ast = { exit: function (ast) { - var body = ast.program.body; - var first = body[0]; - - var noStrict = !first || !t.isExpressionStatement(first) || !t.isLiteral(first.expression) || first.expression.value !== "use strict"; - - if (noStrict) { - body.unshift(t.expressionStatement(t.literal("use strict"))); + if (!exports._has(ast.program)) { + ast.program.body.unshift(t.expressionStatement(t.literal("use strict"))); } } }; From cf7b9234c104c7fdafe032991b0c6a0adf627870 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:21:32 +1100 Subject: [PATCH 18/39] make typeofSymbol transformer optional --- lib/6to5/transformation/transformers/optional-typeof-symbol.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/6to5/transformation/transformers/optional-typeof-symbol.js b/lib/6to5/transformation/transformers/optional-typeof-symbol.js index 6847d6c0f4..33f803e43f 100644 --- a/lib/6to5/transformation/transformers/optional-typeof-symbol.js +++ b/lib/6to5/transformation/transformers/optional-typeof-symbol.js @@ -1,5 +1,7 @@ var t = require("../../types"); +exports.optional = true; + exports.UnaryExpression = function (node, parent, file, scope) { if (node.operator === "typeof") { return t.callExpression(file.addHelper("typeof"), [node.argument]); From 90ce4e93ed938a24d4c8416816ab408233a22e2b Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:21:50 +1100 Subject: [PATCH 19/39] don't break let reference checking on loops in let scoping --- lib/6to5/transformation/transformers/es6-let-scoping.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/6to5/transformation/transformers/es6-let-scoping.js b/lib/6to5/transformation/transformers/es6-let-scoping.js index 3da1800688..75e17812e8 100644 --- a/lib/6to5/transformation/transformers/es6-let-scoping.js +++ b/lib/6to5/transformation/transformers/es6-let-scoping.js @@ -388,8 +388,6 @@ LetScoping.prototype.getLetReferences = function () { } }); - return this.skip(); - } else if (t.isLoop(node)) { return this.skip(); } } From 9fd1ec0596fa4622f8646e4269e207d9ec1464c0 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:22:06 +1100 Subject: [PATCH 20/39] more reliable toValidIdentifier checking, including reserved words --- lib/6to5/types/index.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/6to5/types/index.js b/lib/6to5/types/index.js index 284fb7eb12..efe141328f 100644 --- a/lib/6to5/types/index.js +++ b/lib/6to5/types/index.js @@ -3,6 +3,10 @@ var _ = require("lodash"); var t = exports; +t.NATIVE_TYPES_NAMES = ["Array", "Object", "Number", "Boolean", "Date", "Array", "String"]; + +// + var addAssert = function (type, is) { t["assert" + type] = function (node, opts) { opts = opts || {}; @@ -214,7 +218,7 @@ t.isReferenced = function (node, parent) { */ t.isValidIdentifier = function (name) { - return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isKeywordES6(name, true); + return _.isString(name) && esutils.keyword.isIdentifierName(name) && !esutils.keyword.isReservedWordES6(name, true); }; /* @@ -227,6 +231,8 @@ t.isValidIdentifier = function (name) { t.toIdentifier = function (name) { if (t.isIdentifier(name)) return name.name; + name = name + ""; + // replace all non-valid identifiers with dashes name = name.replace(/[^a-zA-Z0-9$_]/g, "-"); @@ -241,6 +247,10 @@ t.toIdentifier = function (name) { // remove underscores from start of name name = name.replace(/^\_/, ""); + if (!t.isValidIdentifier(name)) { + name = "_" + name; + } + return name || '_'; }; From 77add8704ed230ab6b1e3973f18ee265f8888d5c Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:22:27 +1100 Subject: [PATCH 21/39] alias hidden properties onto it's transformer instance --- lib/6to5/transformation/transformer.js | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/6to5/transformation/transformer.js b/lib/6to5/transformation/transformer.js index 7239e5e976..d9587a38c0 100644 --- a/lib/6to5/transformation/transformer.js +++ b/lib/6to5/transformation/transformer.js @@ -8,20 +8,25 @@ function Transformer(key, transformer, opts) { this.manipulateOptions = transformer.manipulateOptions; this.experimental = !!transformer.experimental; this.secondPass = !!transformer.secondPass; - this.transformer = Transformer.normalise(transformer); + this.transformer = this.normalise(transformer); this.optional = !!transformer.optional; this.opts = opts || {}; this.key = key; } -Transformer.normalise = function (transformer) { +Transformer.prototype.normalise = function (transformer) { + var self = this; + if (_.isFunction(transformer)) { transformer = { ast: transformer }; } _.each(transformer, function (fns, type) { // hidden property - if (type[0] === "_") return; + if (type[0] === "_") { + self[type] = fns; + return; + } if (_.isFunction(fns)) fns = { enter: fns }; From 16024242b0e42d8ee3fff5e78b96972b8293dfa1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:23:06 +1100 Subject: [PATCH 22/39] add type check to inherits template --- lib/6to5/transformation/templates/inherits.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/lib/6to5/transformation/templates/inherits.js b/lib/6to5/transformation/templates/inherits.js index 1e8f6b5e8f..8822bbea7e 100644 --- a/lib/6to5/transformation/templates/inherits.js +++ b/lib/6to5/transformation/templates/inherits.js @@ -1,4 +1,7 @@ (function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, From ed833be34a525fffeb9366debd00a84bdb54cbb9 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:23:30 +1100 Subject: [PATCH 23/39] force computed property on number literal property --- lib/6to5/generation/generators/expressions.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/6to5/generation/generators/expressions.js b/lib/6to5/generation/generators/expressions.js index 7bd7a22bc5..b246abf27f 100644 --- a/lib/6to5/generation/generators/expressions.js +++ b/lib/6to5/generation/generators/expressions.js @@ -1,5 +1,6 @@ var util = require("../../util"); var t = require("../../types"); +var _ = require("lodash"); exports.UnaryExpression = function (node, print) { var hasSpace = /[a-z]$/.test(node.operator); @@ -103,7 +104,12 @@ exports.MemberExpression = function (node, print) { throw new TypeError("Got a MemberExpression for MemberExpression property"); } - if (node.computed) { + var computed = node.computed; + if (t.isLiteral(node.property) && _.isNumber(node.property.value)) { + computed = true; + } + + if (computed) { this.push("["); print(node.property); this.push("]"); From b8d4479333ba3324e6302aa776b63a7a0cc4ad65 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 10:24:23 +1100 Subject: [PATCH 24/39] fix linting error --- lib/6to5/transformation/transformers/optional-typeof-symbol.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/6to5/transformation/transformers/optional-typeof-symbol.js b/lib/6to5/transformation/transformers/optional-typeof-symbol.js index 33f803e43f..55be121b08 100644 --- a/lib/6to5/transformation/transformers/optional-typeof-symbol.js +++ b/lib/6to5/transformation/transformers/optional-typeof-symbol.js @@ -2,7 +2,7 @@ var t = require("../../types"); exports.optional = true; -exports.UnaryExpression = function (node, parent, file, scope) { +exports.UnaryExpression = function (node, parent, file) { if (node.operator === "typeof") { return t.callExpression(file.addHelper("typeof"), [node.argument]); } From 3bd6ec20c1ba4b9288307c8ecd55b157a1579895 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:38:26 +1100 Subject: [PATCH 25/39] remove regenerator tests and git submodule regenerator --- .gitmodules | 3 + .../transformation/es6-generators/LICENSE | 7 -- .../exec.js | 24 ---- .../exec.js | 22 ---- .../exec.js | 15 --- .../exec.js | 22 ---- .../exec.js | 32 ----- .../es6-generators/collatz-generator/exec.js | 42 ------- .../completed-generator/exec.js | 11 -- .../exec.js | 27 ----- .../exec.js | 10 -- .../exec.js | 12 -- .../exec.js | 37 ------ .../exec.js | 15 --- .../exec.js | 18 --- .../exec.js | 11 -- .../exec.js | 20 --- .../exec.js | 16 --- .../exec.js | 19 --- .../exec.js | 13 -- .../exec.js | 26 ---- .../exec.js | 12 -- .../exec.js | 16 --- .../exec.js | 7 -- .../exec.js | 5 - .../exec.js | 10 -- .../exec.js | 45 ------- .../exec.js | 24 ---- .../exec.js | 15 --- .../exec.js | 6 - .../exec.js | 60 --------- .../exec.js | 18 --- .../exec.js | 22 ---- .../exec.js | 12 -- .../exec.js | 16 --- .../exec.js | 16 --- .../exec.js | 20 --- .../exec.js | 16 --- .../exec.js | 14 --- .../infinite-sequence-generator/exec.js | 41 ------- .../exec.js | 19 --- .../exec.js | 13 -- .../exec.js | 82 ------------- .../nested-finally-blocks/exec.js | 41 ------- .../exec.js | 18 --- .../exec.js | 22 ---- .../exec.js | 40 ------ .../exec.js | 29 ----- .../exec.js | 58 --------- .../exec.js | 9 -- .../exec.js | 17 --- .../es6-generators/range-generator/exec.js | 9 -- .../exec.js | 5 - .../exec.js | 6 - .../exec.js | 11 -- .../exec.js | 7 -- .../exec.js | 12 -- .../throw-should-complete-generator/exec.js | 13 -- .../try-catch-finally-generator/exec.js | 42 ------- .../try-catch-generator/exec.js | 33 ----- .../try-finally-generator/exec.js | 114 ------------------ .../exec.js | 26 ---- .../exec.js | 6 - .../exec.js | 22 ---- .../exec.js | 11 -- .../es7-async-functions/LICENSE | 7 -- .../exec.js | 26 ---- .../exec.js | 40 ------ .../exec.js | 15 --- .../exec.js | 19 --- .../es7-async-functions/options.json | 4 - .../exec.js | 42 ------- .../exec.js | 21 ---- test/regenerator.js | 21 ++++ vendor/regenerator | 1 + 75 files changed, 25 insertions(+), 1613 deletions(-) delete mode 100644 test/fixtures/transformation/es6-generators/LICENSE delete mode 100644 test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-correctly/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-with-iife-correctly/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-allow-nested-catch-parameters-of-the-same-name/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-leave-outer-variables-unmodified/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-not-replace-variables-defined-in-inner-scopes/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/collatz-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/completed-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-be-governed-by-enclosing-try-statements/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-cope-with-empty-delegatees/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-delegate-correctly/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-dispatch-thrown-exceptions-correctly/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-pass-sent-values-through/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yield-should-support-deeper-nesting/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/delegated-yieldshould-support-any-iterable-argument/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/dynamic-exception-should-be-dispatched-correctly/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/empty-while-loops-should-be-preserved-in-generated-code/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-break-in-loop/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-property-deletion-in-loop/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-risky-object-expressions/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-the-simple-case/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-in-loop-generator-should-loop-over-inherited-properties/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-loop-with-var-decl-and-no-update-expression-should-compile-and-run/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-Arrays/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-generators/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/for-of-loops-should-work-inside-of-generators/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-even-if-the-declarations-are-out-of-order/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-for-nested-generator-function-declarations/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-function-expression-should-behave-just-like-a-declared-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-function-prototype-should-follow-the-expected-object-model/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-reentry-attempt-should-complain-with-a-TypeError/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-return-method-should-behave-as-if-generator-actually-returned/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-return-method-should-work-with-newborn-generators/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-throw-method-should-complete-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-throw-method-should-immediately-complete-a-new-born-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-throw-method-should-not-propagate-errors-handled-inside-a-delegate/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-throw-method-should-propagate-errors-unhandled-inside-a-delegate/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/generator-throw-method-should-work-after-the-final-call-to-next/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/infinite-sequence-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-declarations/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-expressions/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/labeled-break-and-continue-statements-should-be-able-to-exit-multiple-try-statements/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/nested-finally-blocks/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/nested-generators-in-try-catch-should-get-a-reference-to-the-caught-error/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/new-expressions-should-be-able-to-contain-yield-sub-expressions/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/newborn-generators-should-allow-chaining-newborn-and-non-newborn-generators/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/newborn-generators-should-be-able-to-yield-star-non-newborn-generators/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/newborn-generators-should-support-the-ignore-initial-yield-wrapper-idiom/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/object-literal-generator-should-yield-the-correct-object/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/object-literals-with-multiple-yields-should-receive-different-sent-values/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/range-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/should-support-multiple-yields-in-expression/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/should-yield-only-its-first-argument/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/switch-statement-generator-should-jump-to-the-correct-cases/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/the-arguments-object-should-not-get-confused-by-properties/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/the-arguments-object-should-work-in-simple-variadic-functions/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/throw-should-complete-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/try-catch-finally-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/try-catch-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/try-finally-generator/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/unqualified-function-calls-should-have-a-global-`this`-object/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/yield-chain-should-have-correct-associativity/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/yield-star-expression-results-can-be-used-in-complex-expressions/exec.js delete mode 100644 test/fixtures/transformation/es6-generators/yield-star-expression-results-have-correct-values/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/LICENSE delete mode 100644 test/fixtures/transformation/es7-async-functions/dependent-promises-should-be-awaitable-out-of-order/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/nested-async-function-calls-should-evaluate-in-the-right-order/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/no-await-async-function-should-return-a-Promise/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/one-await-async-function-should-finish-asynchronously/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/options.json delete mode 100644 test/fixtures/transformation/es7-async-functions/rejected-promises-should-be-returned-by-exceptional-async-functions/exec.js delete mode 100644 test/fixtures/transformation/es7-async-functions/rejected-promises-should-cause-await-expressions-to-throw/exec.js create mode 100644 test/regenerator.js create mode 160000 vendor/regenerator diff --git a/.gitmodules b/.gitmodules index d5327c7e27..fbbbb71463 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "vendor/traceur"] path = vendor/traceur url = https://github.com/google/traceur-compiler +[submodule "vendor/regenerator"] + path = vendor/regenerator + url = https://github.com/facebook/regenerator diff --git a/test/fixtures/transformation/es6-generators/LICENSE b/test/fixtures/transformation/es6-generators/LICENSE deleted file mode 100644 index eba1d817f5..0000000000 --- a/test/fixtures/transformation/es6-generators/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2014, Facebook, Inc. -All rights reserved. - -This source code is licensed under the BSD-style license found in the -https://raw.github.com/facebook/regenerator/master/LICENSE file. An -additional grant of patent rights can be found in the PATENTS file in -the same directory. diff --git a/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-correctly/exec.js b/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-correctly/exec.js deleted file mode 100644 index 140f327a37..0000000000 --- a/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-correctly/exec.js +++ /dev/null @@ -1,24 +0,0 @@ -function *gen() { - var a$0 = 0, a$1 = 1; - - let a = 3; - - { - let a = 1; - yield a + a$0; - } - - { - let a = 2; - yield a - 1 + a$1; - } - - yield a; -} - -var g = gen(); - -assert.deepEqual(g.next(), { value: 1, done: false }); -assert.deepEqual(g.next(), { value: 2, done: false }); -assert.deepEqual(g.next(), { value: 3, done: false }); -assert.deepEqual(g.next(), { value: void 0, done: true }); diff --git a/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-with-iife-correctly/exec.js b/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-with-iife-correctly/exec.js deleted file mode 100644 index 3edc3451b3..0000000000 --- a/test/fixtures/transformation/es6-generators/block-binding-should-translate-block-binding-with-iife-correctly/exec.js +++ /dev/null @@ -1,22 +0,0 @@ -function *gen() { - let arr = []; - - for (let x = 0; x < 3; x++) { - let y = x; - arr.push(function() { return y; }); - } - - { - let x; - while( x = arr.pop() ) { - yield x; - } - } -} - -var g = gen(); - -assert.equal(g.next().value(), 2); -assert.equal(g.next().value(), 1); -assert.equal(g.next().value(), 0); -assert.deepEqual(g.next(), { value: void 0, done: true }); diff --git a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-allow-nested-catch-parameters-of-the-same-name/exec.js b/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-allow-nested-catch-parameters-of-the-same-name/exec.js deleted file mode 100644 index bfa31390c1..0000000000 --- a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-allow-nested-catch-parameters-of-the-same-name/exec.js +++ /dev/null @@ -1,15 +0,0 @@ -function *gen() { - try { - genHelpers.raise("e1"); - } catch (e) { - yield e; - try { - genHelpers.raise("e2"); - } catch (e) { - yield e; - } - yield e; - } -} - -genHelpers.check(gen(), ["e1", "e2", "e1"]); diff --git a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-leave-outer-variables-unmodified/exec.js b/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-leave-outer-variables-unmodified/exec.js deleted file mode 100644 index cedc2ee2d7..0000000000 --- a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-leave-outer-variables-unmodified/exec.js +++ /dev/null @@ -1,22 +0,0 @@ -function *gen(x) { - var y = x + 1; - try { - throw x + 2; - } catch (x) { - yield x; - x += 1; - yield x; - } - yield x; - try { - throw x + 3; - } catch (y) { - yield y; - y *= 2; - yield y; - } - yield y; -} - -genHelpers.check(gen(1), [3, 4, 1, 4, 8, 2]); -genHelpers.check(gen(2), [4, 5, 2, 5, 10, 3]); diff --git a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-not-replace-variables-defined-in-inner-scopes/exec.js b/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-not-replace-variables-defined-in-inner-scopes/exec.js deleted file mode 100644 index e5e527e3c3..0000000000 --- a/test/fixtures/transformation/es6-generators/catch-parameter-shadowing-should-not-replace-variables-defined-in-inner-scopes/exec.js +++ /dev/null @@ -1,32 +0,0 @@ -function *gen(x) { - try { - throw x; - } catch (x) { - yield x; - - yield (function(x) { - return x += 1; - }(x + 1)); - - yield (function() { - var x = arguments[0]; - return x * 2; - }(x + 2)); - - yield (function() { - function notCalled(x) { - throw x; - } - - x >>= 1; - return x; - }()); - - yield x -= 1; - } - - yield x; -} - -genHelpers.check(gen(10), [10, 12, 24, 5, 4, 10]); -genHelpers.check(gen(11), [11, 13, 26, 5, 4, 11]); diff --git a/test/fixtures/transformation/es6-generators/collatz-generator/exec.js b/test/fixtures/transformation/es6-generators/collatz-generator/exec.js deleted file mode 100644 index 9bc63db1e9..0000000000 --- a/test/fixtures/transformation/es6-generators/collatz-generator/exec.js +++ /dev/null @@ -1,42 +0,0 @@ -function *gen(n) { - var count = 0; - - yield n; - - while (n !== 1) { - count += 1; - - if (n % 2) { - yield n = n * 3 + 1; - } else { - yield n >>= 1; - } - } - - return count; -} - -function collatz(n) { - var result = [n]; - - while (n !== 1) { - if (n % 2) { - n *= 3; - n += 1; - } else { - n >>= 1; - } - - result.push(n); - } - - return result; -} - -var seven = collatz(7); -var fiftyTwo = seven.slice(seven.indexOf(52)); -var eightyTwo = collatz(82); - -genHelpers.check(gen(7), seven, 16); -genHelpers.check(gen(52), fiftyTwo, 11); -genHelpers.check(gen(82), eightyTwo, 110); diff --git a/test/fixtures/transformation/es6-generators/completed-generator/exec.js b/test/fixtures/transformation/es6-generators/completed-generator/exec.js deleted file mode 100644 index 540636d9d3..0000000000 --- a/test/fixtures/transformation/es6-generators/completed-generator/exec.js +++ /dev/null @@ -1,11 +0,0 @@ -function *gen() { - return "ALL DONE"; -} - -var g = gen(); - -assert.deepEqual(g.next(), { - value: "ALL DONE", done: true -}); - -genHelpers.assertAlreadyFinished(g); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-be-governed-by-enclosing-try-statements/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-be-governed-by-enclosing-try-statements/exec.js deleted file mode 100644 index a4f36ea34b..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-be-governed-by-enclosing-try-statements/exec.js +++ /dev/null @@ -1,27 +0,0 @@ -var error = new Error("thrown"); - -function *outer(n) { - try { - yield 0; - yield* inner(n); - yield 1; - } catch (err) { - yield err.message; - } - yield 4; -} - -function *inner(n) { - while (n --> 0) { - try { - if (n === 3) { - genHelpers.raise(error); - } - } finally { - yield n; - } - } -} - -genHelpers.check(outer(3), [0, 2, 1, 0, 1, 4]); -genHelpers.check(outer(5), [0, 4, 3, "thrown", 4]); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-cope-with-empty-delegatees/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-cope-with-empty-delegatees/exec.js deleted file mode 100644 index bf51aa9c8f..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-cope-with-empty-delegatees/exec.js +++ /dev/null @@ -1,10 +0,0 @@ -function *gen(condition) { - if (condition) { - yield 0; - yield* gen(false); - yield 1; - } -} - -genHelpers.check(gen(true), [0, 1]); -genHelpers.check(gen(false), []); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-delegate-correctly/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-delegate-correctly/exec.js deleted file mode 100644 index 2db0a32fd5..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-delegate-correctly/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -function *gen(condition) { - yield 0; - if (condition) { - yield 1; - yield* gen(false); - yield 2; - } - yield 3; -} - -genHelpers.check(gen(true), [0, 1, 0, 3, 2, 3]); -genHelpers.check(gen(false), [0, 3]); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-dispatch-thrown-exceptions-correctly/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-dispatch-thrown-exceptions-correctly/exec.js deleted file mode 100644 index 1dff85c4ab..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-dispatch-thrown-exceptions-correctly/exec.js +++ /dev/null @@ -1,37 +0,0 @@ -var count = 0; - -function *gen() { - yield* inner(); - try { - yield* inner(); - } catch (err) { - // pass - } - return yield* inner(); -} - -function *inner() { - return yield count++; -} - -var g = gen(); - -assert.deepEqual(g.next(), { - value: 0, - done: false -}); - -assert.deepEqual(g.next(), { - value: 1, - done: false -}); - -assert.deepEqual(g.throw(new Error("lol")), { - value: 2, - done: false, -}); - -assert.deepEqual(g.next("sent"), { - value: "sent", - done: true -}); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-pass-sent-values-through/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-pass-sent-values-through/exec.js deleted file mode 100644 index 1abc3a015a..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-pass-sent-values-through/exec.js +++ /dev/null @@ -1,15 +0,0 @@ -function *outer(n) { - yield* inner(n << 1); - yield "zxcv"; -} - -function *inner(n) { - return yield yield yield n; -} - -var g = outer(3); -assert.deepEqual(g.next(), { value: 6, done: false }); -assert.deepEqual(g.next(1), { value: 1, done: false }); -assert.deepEqual(g.next(2), { value: 2, done: false }); -assert.deepEqual(g.next(4), { value: "zxcv", done: false }); -assert.deepEqual(g.next(5), { value: void 0, done: true }); diff --git a/test/fixtures/transformation/es6-generators/delegated-yield-should-support-deeper-nesting/exec.js b/test/fixtures/transformation/es6-generators/delegated-yield-should-support-deeper-nesting/exec.js deleted file mode 100644 index f3b8d0f438..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yield-should-support-deeper-nesting/exec.js +++ /dev/null @@ -1,18 +0,0 @@ -function *outer(n) { - yield n; - yield* middle(n - 1, inner(n + 10)); - yield n + 1; -} - -function *middle(n, plusTen) { - yield n; - yield* inner(n - 1); - yield n + 1; - yield* plusTen; -} - -function *inner(n) { - yield n; -} - -genHelpers.check(outer(5), [5, 4, 3, 5, 15, 6]); diff --git a/test/fixtures/transformation/es6-generators/delegated-yieldshould-support-any-iterable-argument/exec.js b/test/fixtures/transformation/es6-generators/delegated-yieldshould-support-any-iterable-argument/exec.js deleted file mode 100644 index de52f46776..0000000000 --- a/test/fixtures/transformation/es6-generators/delegated-yieldshould-support-any-iterable-argument/exec.js +++ /dev/null @@ -1,11 +0,0 @@ -function *gen() { - yield 0; - yield* [ - yield "one", - yield "two", - yield "three" - ]; - yield 5; -} - -genHelpers.check(gen(), [0, "one", "two", "three", 2, 3, 4, 5]); diff --git a/test/fixtures/transformation/es6-generators/dynamic-exception-should-be-dispatched-correctly/exec.js b/test/fixtures/transformation/es6-generators/dynamic-exception-should-be-dispatched-correctly/exec.js deleted file mode 100644 index 27a64b3356..0000000000 --- a/test/fixtures/transformation/es6-generators/dynamic-exception-should-be-dispatched-correctly/exec.js +++ /dev/null @@ -1,20 +0,0 @@ -function *gen(x, fname) { - try { - return fns[fname](x); - } catch (thrown) { - yield thrown; - } - } - - var fns = { - f: function(x) { - throw x; - }, - - g: function(x) { - return x; - } - }; - - genHelpers.check(gen("asdf", "f"), ["asdf"]); - genHelpers.check(gen("asdf", "g"), [], "asdf"); diff --git a/test/fixtures/transformation/es6-generators/empty-while-loops-should-be-preserved-in-generated-code/exec.js b/test/fixtures/transformation/es6-generators/empty-while-loops-should-be-preserved-in-generated-code/exec.js deleted file mode 100644 index e762ed9881..0000000000 --- a/test/fixtures/transformation/es6-generators/empty-while-loops-should-be-preserved-in-generated-code/exec.js +++ /dev/null @@ -1,16 +0,0 @@ -function *gen(x) { - while (x) { - // empty while loop - } - - do { - // empty do-while loop - } while (x); - - return gen.toString(); -} - -var info = gen(false).next(); -assert.strictEqual(info.done, true); -assert.ok(/do \{/.test(info.value)); -assert.ok(/while \(/.test(info.value)); diff --git a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-break-in-loop/exec.js b/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-break-in-loop/exec.js deleted file mode 100644 index e5a2225e7b..0000000000 --- a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-break-in-loop/exec.js +++ /dev/null @@ -1,19 +0,0 @@ -function *gen(obj) { - var count = 0; - for (var key in (yield "why not", obj)) { - if (obj.hasOwnProperty(key)) { - if (key === "skip") { - break; - } - count += 1; - yield [key, obj[key]]; - } - } - return count; -} - -genHelpers.check( - gen({ a: 1, b: 2, skip: 3, c: 4 }), - ["why not", ["a", 1], ["b", 2]], - 2 -); diff --git a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-property-deletion-in-loop/exec.js b/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-property-deletion-in-loop/exec.js deleted file mode 100644 index e0b9313bd7..0000000000 --- a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-property-deletion-in-loop/exec.js +++ /dev/null @@ -1,13 +0,0 @@ -function *gen() { - var count = 0; - var obj = {foo: 1, bar: 2}; - for (var key in obj) { - assert(obj.hasOwnProperty(key), key + " must be own property"); - yield [key, obj[key]]; - delete obj.bar; - count += 1; - } - return count; -} - -genHelpers.check(gen(), [["foo", 1]], 1); diff --git a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-risky-object-expressions/exec.js b/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-risky-object-expressions/exec.js deleted file mode 100644 index 9fa63ef689..0000000000 --- a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-risky-object-expressions/exec.js +++ /dev/null @@ -1,26 +0,0 @@ -function a(sent) { - assert.strictEqual(sent, 1); - a.called = true; -} - -function b(sent) { - assert.strictEqual(sent, 2); - b.called = true; - return { callee: b }; -} - -function *gen() { - assert.ok(!a.called); - assert.ok(!b.called); - for (var key in a(yield 0), b(yield 1)) { - assert.ok(a.called); - assert.ok(b.called); - assert.strictEqual(yield key, 3); - } - - for (var key in a(1), { foo: "foo", bar: "bar" }) { - yield key; - } -} - -genHelpers.check(gen(), [0, 1, "callee", "foo", "bar"]); diff --git a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-the-simple-case/exec.js b/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-the-simple-case/exec.js deleted file mode 100644 index 740041c23f..0000000000 --- a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-handle-the-simple-case/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -function *gen() { - var count = 0; - var obj = {foo: 1, bar: 2}; - for (var key in obj) { - assert(obj.hasOwnProperty(key), key + " must be own property"); - yield [key, obj[key]]; - count += 1; - } - return count; -} - -genHelpers.check(gen(), [["foo", 1], ["bar", 2]], 2); diff --git a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-loop-over-inherited-properties/exec.js b/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-loop-over-inherited-properties/exec.js deleted file mode 100644 index 1248131d9b..0000000000 --- a/test/fixtures/transformation/es6-generators/for-in-loop-generator-should-loop-over-inherited-properties/exec.js +++ /dev/null @@ -1,16 +0,0 @@ -function *gen() { - var count = 0; - function Foo() { - this.baz = 1 - } - Foo.prototype.bar = 2; - - var foo = new Foo(); - for (var key in foo) { - yield [key, foo[key]]; - count += 1; - } - return count; -} - -genHelpers.check(gen(), [["baz", 1], ["bar", 2]], 2); diff --git a/test/fixtures/transformation/es6-generators/for-loop-with-var-decl-and-no-update-expression-should-compile-and-run/exec.js b/test/fixtures/transformation/es6-generators/for-loop-with-var-decl-and-no-update-expression-should-compile-and-run/exec.js deleted file mode 100644 index 933b61aa3c..0000000000 --- a/test/fixtures/transformation/es6-generators/for-loop-with-var-decl-and-no-update-expression-should-compile-and-run/exec.js +++ /dev/null @@ -1,7 +0,0 @@ -// https://github.com/facebook/regenerator/issues/103 -function *range() { - for (var i = 0; false; ) { - } -} - -genHelpers.check(range(), []); diff --git a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-Arrays/exec.js b/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-Arrays/exec.js deleted file mode 100644 index 30b287a0b1..0000000000 --- a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-Arrays/exec.js +++ /dev/null @@ -1,5 +0,0 @@ -var sum = 0; -for (var x of [1, 2].concat(3)) { - sum += x; -} -assert.strictEqual(sum, 6); diff --git a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-generators/exec.js b/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-generators/exec.js deleted file mode 100644 index 667e1b67bf..0000000000 --- a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-for-generators/exec.js +++ /dev/null @@ -1,10 +0,0 @@ -function *range(n) { - for (var i = 0; i < n; ++i) { - yield i; - } -} - -var value, values = []; -for (value of range(3)) - values.push(value); -assert.deepEqual(values, [0, 1, 2]); diff --git a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-inside-of-generators/exec.js b/test/fixtures/transformation/es6-generators/for-of-loops-should-work-inside-of-generators/exec.js deleted file mode 100644 index fda5afe451..0000000000 --- a/test/fixtures/transformation/es6-generators/for-of-loops-should-work-inside-of-generators/exec.js +++ /dev/null @@ -1,45 +0,0 @@ -function *yieldPermutations(list) { - if (list.length < 2) { - yield list; - return 1; - } - - var count = 0; - var first = list.slice(0, 1); - var genRest = yieldPermutations(list.slice(1)); - - for (var perm of genRest) { - for (var i = 0; i < list.length; ++i) { - var prefix = perm.slice(0, i); - var suffix = perm.slice(i); - yield prefix.concat(first, suffix); - } - - count += i; - } - - return count; -} - -var count = 0; -for (var perm of yieldPermutations([])) { - assert.deepEqual(perm, []); - ++count; -} -assert.strictEqual(count, 1); - -genHelpers.check(yieldPermutations([1]), [[1]], 1); - -genHelpers.check(yieldPermutations([2, 1]), [ - [2, 1], - [1, 2] -], 2); - -genHelpers.check(yieldPermutations([1,3,2]), [ - [1, 3, 2], - [3, 1, 2], - [3, 2, 1], - [1, 2, 3], - [2, 1, 3], - [2, 3, 1] -], 6); diff --git a/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-even-if-the-declarations-are-out-of-order/exec.js b/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-even-if-the-declarations-are-out-of-order/exec.js deleted file mode 100644 index 1b1de7c33b..0000000000 --- a/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-even-if-the-declarations-are-out-of-order/exec.js +++ /dev/null @@ -1,24 +0,0 @@ -function *gen(n) { - yield increment(n); - - function increment(x) { - return x + 1; - } - - if (n % 2) { - yield halve(decrement(n)); - - function halve(x) { - return x >> 1; - } - - function decrement(x) { - return x - 1; - } - } - - yield increment(increment(n)); -} - -genHelpers.check(gen(3), [4, 1, 5]); -genHelpers.check(gen(4), [5, 6]); diff --git a/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-for-nested-generator-function-declarations/exec.js b/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-for-nested-generator-function-declarations/exec.js deleted file mode 100644 index 62337159e3..0000000000 --- a/test/fixtures/transformation/es6-generators/function-declaration-hoisting-should-work-for-nested-generator-function-declarations/exec.js +++ /dev/null @@ -1,15 +0,0 @@ -function *outer(n) { - yield 0; - assert.ok(regeneratorRuntime.isGeneratorFunction(inner)); - return yield* inner(n); - - // Note that this function declaration comes after everything else - // in the outer function, but needs to be fully available above. - function *inner(n) { - yield n - 1; - yield n; - return yield n + 1; - } -} - -genHelpers.check(outer(2), [0, 1, 2, 3], 4); diff --git a/test/fixtures/transformation/es6-generators/generator-function-expression-should-behave-just-like-a-declared-generator/exec.js b/test/fixtures/transformation/es6-generators/generator-function-expression-should-behave-just-like-a-declared-generator/exec.js deleted file mode 100644 index 6dd8796cb4..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-function-expression-should-behave-just-like-a-declared-generator/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -genHelpers.check(function *(x, y) { - yield x; - yield y; - yield x + y; - return x * y; -}(3, 7), [3, 7, 10], 21); diff --git a/test/fixtures/transformation/es6-generators/generator-function-prototype-should-follow-the-expected-object-model/exec.js b/test/fixtures/transformation/es6-generators/generator-function-prototype-should-follow-the-expected-object-model/exec.js deleted file mode 100644 index db35e057a7..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-function-prototype-should-follow-the-expected-object-model/exec.js +++ /dev/null @@ -1,60 +0,0 @@ - -var GeneratorFunctionPrototype = f.__proto__; -var GeneratorFunction = GeneratorFunctionPrototype.constructor; - -assert.strictEqual(GeneratorFunction.name, 'GeneratorFunction'); -assert.strictEqual(GeneratorFunction.prototype, - GeneratorFunctionPrototype); -assert.strictEqual(GeneratorFunctionPrototype.prototype.constructor, - GeneratorFunctionPrototype); -assert.strictEqual(GeneratorFunctionPrototype.prototype, - f.prototype.__proto__); -assert.strictEqual(GeneratorFunctionPrototype.__proto__, - Function.prototype); -assert.strictEqual(GeneratorFunctionPrototype.name, - "GeneratorFunctionPrototype"); - -assert.strictEqual(typeof f2, "function"); -assert.strictEqual(f2.constructor, GeneratorFunction); -assert.ok(f2 instanceof GeneratorFunction); -assert.strictEqual(f2.name, "f2"); - -var g = f(); -assert.ok(g instanceof f); -assert.strictEqual(g.__proto__, f.prototype); - -assert.deepEqual([], Object.getOwnPropertyNames(f.prototype)); -// assert.deepEqual([], Object.getOwnPropertyNames(g)); - -f.prototype.x = 42; - -var g2 = f(); -assert.strictEqual(g2.x, 42); - -var g3 = new f(); -assert.strictEqual(g3.x, 42); - -function* f2() { - yield 1; -} - -assert.strictEqual(f.__proto__, f2.__proto__); -assert.strictEqual(f.hasOwnProperty('constructor'), false); -assert.strictEqual(f.__proto__.constructor.name, 'GeneratorFunction'); - -// Intentionally at the end to test hoisting. -function* f() { - yield this; -} - -function* f() { - yield 1; -} - -var f2 = f; -f = 42; -var g = f2(); - -assert.deepEqual(g.next(), { value: 1, done: false }); -assert.deepEqual(g.next(), { value: void 0, done: true }); -assert.ok(g instanceof f2); diff --git a/test/fixtures/transformation/es6-generators/generator-reentry-attempt-should-complain-with-a-TypeError/exec.js b/test/fixtures/transformation/es6-generators/generator-reentry-attempt-should-complain-with-a-TypeError/exec.js deleted file mode 100644 index ce41e9851e..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-reentry-attempt-should-complain-with-a-TypeError/exec.js +++ /dev/null @@ -1,18 +0,0 @@ -function *gen(x) { - try { - (yield x).next(x); - } catch (err) { - yield err; - } - return x + 1; -} - -var g = gen(3); -assert.deepEqual(g.next(), { value: 3, done: false }); -var complaint = g.next(g); // Sending the generator to itself. -assert.ok(complaint.value instanceof Error); -assert.strictEqual( - complaint.value.message, - "Generator is already running" -); -assert.deepEqual(g.next(), { value: 4, done: true }); diff --git a/test/fixtures/transformation/es6-generators/generator-return-method-should-behave-as-if-generator-actually-returned/exec.js b/test/fixtures/transformation/es6-generators/generator-return-method-should-behave-as-if-generator-actually-returned/exec.js deleted file mode 100644 index 089deed534..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-return-method-should-behave-as-if-generator-actually-returned/exec.js +++ /dev/null @@ -1,22 +0,0 @@ -var executedFinally = false; - -function *gen() { - try { - yield 0; - } catch (err) { - assert.ok(false, "should not have executed the catch handler"); - } finally { - executedFinally = true; - } -} - -var g = gen(); -assert.deepEqual(g.next(), { value: 0, done: false }); - -assert.deepEqual(g.return("argument"), { - value: "argument", - done: true -}); - -assert.strictEqual(executedFinally, true); -genHelpers.assertAlreadyFinished(g); diff --git a/test/fixtures/transformation/es6-generators/generator-return-method-should-work-with-newborn-generators/exec.js b/test/fixtures/transformation/es6-generators/generator-return-method-should-work-with-newborn-generators/exec.js deleted file mode 100644 index 84f60dbf8f..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-return-method-should-work-with-newborn-generators/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -function *gen() { - yield 0; -} - -var g = gen(); - -assert.deepEqual(g.return("argument"), { - value: "argument", - done: true -}); - -genHelpers.assertAlreadyFinished(g); diff --git a/test/fixtures/transformation/es6-generators/generator-throw-method-should-complete-generator/exec.js b/test/fixtures/transformation/es6-generators/generator-throw-method-should-complete-generator/exec.js deleted file mode 100644 index c41c82c2dd..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-throw-method-should-complete-generator/exec.js +++ /dev/null @@ -1,16 +0,0 @@ -function *gen(x) { - yield 2; - throw 1; -} - -var u = gen(); - -u.next(); - -try { - u.throw(2); -} catch (err) { - assert.strictEqual(err, 2); -} - -genHelpers.assertAlreadyFinished(u); diff --git a/test/fixtures/transformation/es6-generators/generator-throw-method-should-immediately-complete-a-new-born-generator/exec.js b/test/fixtures/transformation/es6-generators/generator-throw-method-should-immediately-complete-a-new-born-generator/exec.js deleted file mode 100644 index 175435b562..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-throw-method-should-immediately-complete-a-new-born-generator/exec.js +++ /dev/null @@ -1,16 +0,0 @@ -var began = false; - -function *gen() { - began = true; - yield 1; -} - -var g = gen(); -var exception = new Error("unhandled exception"); -try { - g.throw(exception); - assert.ok(false, "should have thrown an exception"); -} catch (err) { - assert.strictEqual(err, exception); - assert.strictEqual(began, false); -} diff --git a/test/fixtures/transformation/es6-generators/generator-throw-method-should-not-propagate-errors-handled-inside-a-delegate/exec.js b/test/fixtures/transformation/es6-generators/generator-throw-method-should-not-propagate-errors-handled-inside-a-delegate/exec.js deleted file mode 100644 index dcdce48792..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-throw-method-should-not-propagate-errors-handled-inside-a-delegate/exec.js +++ /dev/null @@ -1,20 +0,0 @@ -function *outer() { - try { - yield* inner(); - } catch (err) { - return -1; - } - return 1; -} - -function *inner() { - try { - yield void 0; - } catch (e) { - return; - } -} - -var g = outer(); -g.next(); -assert.equal(g.throw(new Error('foo')).value, 1); diff --git a/test/fixtures/transformation/es6-generators/generator-throw-method-should-propagate-errors-unhandled-inside-a-delegate/exec.js b/test/fixtures/transformation/es6-generators/generator-throw-method-should-propagate-errors-unhandled-inside-a-delegate/exec.js deleted file mode 100644 index 295a4c8aeb..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-throw-method-should-propagate-errors-unhandled-inside-a-delegate/exec.js +++ /dev/null @@ -1,16 +0,0 @@ -function *outer() { - try { - yield* inner(); - } catch (err) { - return -1; - } - return 1; -} - -function *inner() { - yield void 0; -} - -var g = outer(); -g.next(); -assert.equal(g.throw(new Error('foo')).value, -1); diff --git a/test/fixtures/transformation/es6-generators/generator-throw-method-should-work-after-the-final-call-to-next/exec.js b/test/fixtures/transformation/es6-generators/generator-throw-method-should-work-after-the-final-call-to-next/exec.js deleted file mode 100644 index 7017683f5e..0000000000 --- a/test/fixtures/transformation/es6-generators/generator-throw-method-should-work-after-the-final-call-to-next/exec.js +++ /dev/null @@ -1,14 +0,0 @@ -function *gen() { - yield 1; -} - -var g = gen(); -assert.deepEqual(g.next(), { value: 1, done: false }); - -var exception = new Error("unhandled exception"); -try { - g.throw(exception); - assert.ok(false, "should have thrown an exception"); -} catch (err) { - assert.strictEqual(err, exception); -} diff --git a/test/fixtures/transformation/es6-generators/infinite-sequence-generator/exec.js b/test/fixtures/transformation/es6-generators/infinite-sequence-generator/exec.js deleted file mode 100644 index 7c74586b83..0000000000 --- a/test/fixtures/transformation/es6-generators/infinite-sequence-generator/exec.js +++ /dev/null @@ -1,41 +0,0 @@ -function *gen(start, step) { - step = step || 1; - while (true) { - yield start; - start += step; - } -} - -function *limit(g, stop) { - while (true) { - var info = g.next(); - if (info.done) { - return; - } else if (info.value < stop) { - yield info.value; - } else { - return; - } - } -} - -// should generate a lot of plausible values -var g = gen(10, 2); - -assert.deepEqual(g.next(), { value: 10, done: false }); -assert.deepEqual(g.next(), { value: 12, done: false }); -assert.deepEqual(g.next(), { value: 14, done: false }); -assert.deepEqual(g.next(), { value: 16, done: false }); - -var sum = 10 + 12 + 14 + 16; - -for (var n = 0; n < 1000; ++n) { - var info = g.next(); - sum += info.value; - assert.strictEqual(info.done, false); -} - -assert.strictEqual(sum, 1017052); - -// should allow limiting -genHelpers.check(limit(gen(10, 3), 20), [10, 13, 16, 19]); diff --git a/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-declarations/exec.js b/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-declarations/exec.js deleted file mode 100644 index daebbf16da..0000000000 --- a/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-declarations/exec.js +++ /dev/null @@ -1,19 +0,0 @@ -// Do the assertions up here to make sure the generator function is -// marked at the beginning of the block the function is declared in. -assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(genFun), - true -); - -assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(normalFun), - false -); - -function normalFun() { - return 0; -} - -function *genFun() { - yield 0; -} diff --git a/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-expressions/exec.js b/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-expressions/exec.js deleted file mode 100644 index a7649e0737..0000000000 --- a/test/fixtures/transformation/es6-generators/isGeneratorFunction-should-work-for-function-expressions/exec.js +++ /dev/null @@ -1,13 +0,0 @@ -assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(function *genFun() { - yield 0; - }), - true -); - -assert.strictEqual( - regeneratorRuntime.isGeneratorFunction(function normalFun() { - return 0; - }), - false -); diff --git a/test/fixtures/transformation/es6-generators/labeled-break-and-continue-statements-should-be-able-to-exit-multiple-try-statements/exec.js b/test/fixtures/transformation/es6-generators/labeled-break-and-continue-statements-should-be-able-to-exit-multiple-try-statements/exec.js deleted file mode 100644 index 3bf4008ebe..0000000000 --- a/test/fixtures/transformation/es6-generators/labeled-break-and-continue-statements-should-be-able-to-exit-multiple-try-statements/exec.js +++ /dev/null @@ -1,82 +0,0 @@ - - var e1 = "first"; - var e2 = "second"; - var e3 = "third"; - var e4 = "fourth"; - - function *gen(n, which) { - try { - yield 0; - genHelpers.raise(e1); - - } finally { - yield 1; - - loop: - for (var i = 0; i < n; ++i) { - yield i; - - try { - genHelpers.raise(e2); - } finally { - yield 2; - - try { - genHelpers.raise(e3); - } finally { - yield 3; - - try { - genHelpers.raise(e4); - } finally { - yield 4; - - if (which === "break") { - yield "breaking"; - break loop; - } - - if (which === "continue") { - yield "continuing"; - continue loop; - } - - yield 5; - } - } - } - } - - yield 6; - } - } - - try { - genHelpers.check(gen(1, "break"), [ - 0, 1, 0, 2, 3, 4, "breaking", 6 - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e1); - } - - try { - genHelpers.check(gen(3, "continue"), [ - 0, 1, 0, 2, 3, 4, "continuing", - 1, 2, 3, 4, "continuing", - 2, 2, 3, 4, "continuing", - 6 // Loop finished naturally. - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e1); - } - - try { - genHelpers.check(gen(3, "neither"), [ - 0, 1, 0, 2, 3, 4, 5 - ]); - assert.ok(false, "should have thrown an exception"); - } catch (err) { - assert.strictEqual(err, e4); - } diff --git a/test/fixtures/transformation/es6-generators/nested-finally-blocks/exec.js b/test/fixtures/transformation/es6-generators/nested-finally-blocks/exec.js deleted file mode 100644 index 1bcdee5b49..0000000000 --- a/test/fixtures/transformation/es6-generators/nested-finally-blocks/exec.js +++ /dev/null @@ -1,41 +0,0 @@ -function *usingThrow() { - try { - try { - try { - throw "thrown"; - } finally { - yield 1; - } - } catch (thrown) { - yield thrown; - } finally { - yield 2; - } - } finally { - yield 3; - } -} - -function *usingRaise() { - try { - try { - try { - genHelpers.raise("thrown"); - } finally { - yield 1; - } - } catch (thrown) { - yield thrown; - } finally { - yield 2; - } - } finally { - yield 3; - } -} - -// should statically execute in order -genHelpers.check(usingThrow(), [1, "thrown", 2, 3]); - -// should dynamically execute in order -genHelpers.check(usingRaise(), [1, "thrown", 2, 3]); diff --git a/test/fixtures/transformation/es6-generators/nested-generators-in-try-catch-should-get-a-reference-to-the-caught-error/exec.js b/test/fixtures/transformation/es6-generators/nested-generators-in-try-catch-should-get-a-reference-to-the-caught-error/exec.js deleted file mode 100644 index f585b20cba..0000000000 --- a/test/fixtures/transformation/es6-generators/nested-generators-in-try-catch-should-get-a-reference-to-the-caught-error/exec.js +++ /dev/null @@ -1,18 +0,0 @@ -function *gen() { - try { - nonExistent; - } catch (e) { - yield function* () { - yield e; - } - } -} - -var genFun2 = gen().next().value; -assert.ok(regeneratorRuntime.isGeneratorFunction(genFun2)); -var gen2 = genFun2(); -var res = gen2.next(); -assert.ok(res.value instanceof ReferenceError); -// Note that we don't do strict equality over the message because it varies -// across browsers (if we ever want to run tests in browsers). -assert.ok(res.value.message.match(/nonExistent/)); diff --git a/test/fixtures/transformation/es6-generators/new-expressions-should-be-able-to-contain-yield-sub-expressions/exec.js b/test/fixtures/transformation/es6-generators/new-expressions-should-be-able-to-contain-yield-sub-expressions/exec.js deleted file mode 100644 index 6435d69531..0000000000 --- a/test/fixtures/transformation/es6-generators/new-expressions-should-be-able-to-contain-yield-sub-expressions/exec.js +++ /dev/null @@ -1,22 +0,0 @@ -function A(first, second) { - this.first = first; - this.second = second; -} - -function *gen() { - return yield new (yield 0)(yield 1, yield 2); -} - -var g = gen(); - -assert.deepEqual(g.next(), { value: 0, done: false }); -assert.deepEqual(g.next(A), { value: 1, done: false }); -assert.deepEqual(g.next("asdf"), { value: 2, done: false }); - -var info = g.next("zxcv"); -assert.strictEqual(info.done, false); -assert.ok(info.value instanceof A); -assert.strictEqual(info.value.first, "asdf"); -assert.strictEqual(info.value.second, "zxcv"); - -assert.deepEqual(g.next("qwer"), { value: "qwer", done: true }); diff --git a/test/fixtures/transformation/es6-generators/newborn-generators-should-allow-chaining-newborn-and-non-newborn-generators/exec.js b/test/fixtures/transformation/es6-generators/newborn-generators-should-allow-chaining-newborn-and-non-newborn-generators/exec.js deleted file mode 100644 index 630120638b..0000000000 --- a/test/fixtures/transformation/es6-generators/newborn-generators-should-allow-chaining-newborn-and-non-newborn-generators/exec.js +++ /dev/null @@ -1,40 +0,0 @@ -function *range(n) { - for (var i = 0; i < n; ++i) { - yield i; - } -} - -function *chain(a, b) { - yield* a; - yield* b; -} - -genHelpers.check(chain(range(3), range(5)), [0, 1, 2, 0, 1, 2, 3, 4]); - -function *y3(x) { - return yield yield yield x; -} - -function *y5(x) { - return yield yield yield yield yield x; -} - -genHelpers.check( - chain(y3("foo"), y5("bar")), - ["foo", 1, 2, "bar", 4, 5, 6, 7] -); - -var g3 = y3("three"); -assert.deepEqual(g3.next(), { - value: "three", - done: false -}); - -var g5 = y5("five"); -assert.deepEqual(g5.next(), { - value: "five", - done: false -}); - -var undef; // A little easier to read than void 0. -genHelpers.check(chain(g3, g5), [undef, 1, undef, 3, 4, 5]); diff --git a/test/fixtures/transformation/es6-generators/newborn-generators-should-be-able-to-yield-star-non-newborn-generators/exec.js b/test/fixtures/transformation/es6-generators/newborn-generators-should-be-able-to-yield-star-non-newborn-generators/exec.js deleted file mode 100644 index 9d8d186519..0000000000 --- a/test/fixtures/transformation/es6-generators/newborn-generators-should-be-able-to-yield-star-non-newborn-generators/exec.js +++ /dev/null @@ -1,29 +0,0 @@ -function *inner() { - return [yield 1, yield 2]; -} - -function *outer(delegate) { - return yield* delegate; -} - -var n = inner(); - -assert.deepEqual(n.next(), { - value: 1, - done: false -}); - -var g = outer(n); - -// I would really like to be able to pass 3 to g.next here, but V8 -// ignores values sent to newborn generators, and SpiderMonkey throws -// a TypeError. -assert.deepEqual(g.next(), { - value: 2, - done: false -}); - -assert.deepEqual(g.next(4), { - value: [void 0, 4], - done: true -}); diff --git a/test/fixtures/transformation/es6-generators/newborn-generators-should-support-the-ignore-initial-yield-wrapper-idiom/exec.js b/test/fixtures/transformation/es6-generators/newborn-generators-should-support-the-ignore-initial-yield-wrapper-idiom/exec.js deleted file mode 100644 index 2eb492c895..0000000000 --- a/test/fixtures/transformation/es6-generators/newborn-generators-should-support-the-ignore-initial-yield-wrapper-idiom/exec.js +++ /dev/null @@ -1,58 +0,0 @@ -var markers = []; - -function *inner() { - markers.push(0); - var sent1 = yield 1; - markers.push(2); - var sent2 = yield 2; - markers.push(3); - return [sent1, sent2]; -} - -function wrapper(delegate) { - var gen = (function*() { - // This yield is the "initial yield" whose argument we ignore. - var sent = yield "ignored", info; - - markers.push(1); - - while (!(info = delegate.next(sent)).done) { - sent = yield info.value; - } - - markers.push(4); - - return info.value; - })(); - - // Ensure that gen is not newborn and that the next invocation of - // gen.next(value) can send value to the initial yield expression. - gen.next(); - - return gen; -} - -var n = inner(); - -assert.deepEqual(n.next(), { - value: 1, - done: false -}); - -var g = wrapper(n); - -// Unlike in the previous spec, it's fine to pass 3 to g.next here, -// because g is not newborn, because g.next was already called once -// before g was returned from the wrapper function. -assert.deepEqual(g.next(3), { - value: 2, - done: false -}); - -assert.deepEqual(g.next(4), { - value: [3, 4], - done: true -}); - -// Ensure we encountered the marker points in the expected order. -assert.deepEqual(markers, [0, 1, 2, 3, 4]); diff --git a/test/fixtures/transformation/es6-generators/object-literal-generator-should-yield-the-correct-object/exec.js b/test/fixtures/transformation/es6-generators/object-literal-generator-should-yield-the-correct-object/exec.js deleted file mode 100644 index a45a519ba8..0000000000 --- a/test/fixtures/transformation/es6-generators/object-literal-generator-should-yield-the-correct-object/exec.js +++ /dev/null @@ -1,9 +0,0 @@ -function *gen(a, b) { - yield { - a: a - (yield a), - b: yield b - }; -} - -genHelpers.check(gen(1, 2), [1, 2, { a: 0, b: 2 }]); -genHelpers.check(gen(4, 2), [4, 2, { a: 3, b: 2 }]); diff --git a/test/fixtures/transformation/es6-generators/object-literals-with-multiple-yields-should-receive-different-sent-values/exec.js b/test/fixtures/transformation/es6-generators/object-literals-with-multiple-yields-should-receive-different-sent-values/exec.js deleted file mode 100644 index e18ec96410..0000000000 --- a/test/fixtures/transformation/es6-generators/object-literals-with-multiple-yields-should-receive-different-sent-values/exec.js +++ /dev/null @@ -1,17 +0,0 @@ -function *gen(fn) { - return { - a: yield "a", - b: yield "b", - c: fn(yield "c", yield "d"), - d: [yield "e", yield "f"] - }; -} - -genHelpers.check(gen(function sum(x, y) { - return x + y; -}), ["a", "b", "c", "d", "e", "f"], { - a: 1, - b: 2, - c: 3 + 4, - d: [5, 6] -}); diff --git a/test/fixtures/transformation/es6-generators/range-generator/exec.js b/test/fixtures/transformation/es6-generators/range-generator/exec.js deleted file mode 100644 index eef007c261..0000000000 --- a/test/fixtures/transformation/es6-generators/range-generator/exec.js +++ /dev/null @@ -1,9 +0,0 @@ -function *range(n) { - for (var i = 0; i < n; ++i) { - yield i; - } -} - -genHelpers.check(range(0), []); - -genHelpers.check(range(5), [0, 1, 2, 3, 4]); diff --git a/test/fixtures/transformation/es6-generators/should-support-multiple-yields-in-expression/exec.js b/test/fixtures/transformation/es6-generators/should-support-multiple-yields-in-expression/exec.js deleted file mode 100644 index 07ea21e280..0000000000 --- a/test/fixtures/transformation/es6-generators/should-support-multiple-yields-in-expression/exec.js +++ /dev/null @@ -1,5 +0,0 @@ -function *gen() { return (yield 0) + (yield 0); } -var itr = gen(); -itr.next(); -itr.next(1); -assert.equal(itr.next(2).value, 3); diff --git a/test/fixtures/transformation/es6-generators/should-yield-only-its-first-argument/exec.js b/test/fixtures/transformation/es6-generators/should-yield-only-its-first-argument/exec.js deleted file mode 100644 index d872a6c160..0000000000 --- a/test/fixtures/transformation/es6-generators/should-yield-only-its-first-argument/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -function *gen(x) { - yield x; -} - -genHelpers.check(gen("oyez"), ["oyez"]); -genHelpers.check(gen("foo", "bar"), ["foo"]); diff --git a/test/fixtures/transformation/es6-generators/switch-statement-generator-should-jump-to-the-correct-cases/exec.js b/test/fixtures/transformation/es6-generators/switch-statement-generator-should-jump-to-the-correct-cases/exec.js deleted file mode 100644 index f506e3dc92..0000000000 --- a/test/fixtures/transformation/es6-generators/switch-statement-generator-should-jump-to-the-correct-cases/exec.js +++ /dev/null @@ -1,11 +0,0 @@ -function *gen(a) { - switch (yield a) { - case (yield "x") - a: - return "first case"; - case (yield "y") - a: - return "second case"; - } -} - -genHelpers.check(gen(1), [1, "x"], "first case"); -genHelpers.check(gen(2), [2, "x", "y"], "second case"); diff --git a/test/fixtures/transformation/es6-generators/the-arguments-object-should-not-get-confused-by-properties/exec.js b/test/fixtures/transformation/es6-generators/the-arguments-object-should-not-get-confused-by-properties/exec.js deleted file mode 100644 index 0193713567..0000000000 --- a/test/fixtures/transformation/es6-generators/the-arguments-object-should-not-get-confused-by-properties/exec.js +++ /dev/null @@ -1,7 +0,0 @@ -function *gen(obj) { - yield obj.arguments; - obj.arguments = "oyez"; - yield obj; -} - -genHelpers.check(gen({ arguments: 42 }), [42, { arguments: "oyez" }]); diff --git a/test/fixtures/transformation/es6-generators/the-arguments-object-should-work-in-simple-variadic-functions/exec.js b/test/fixtures/transformation/es6-generators/the-arguments-object-should-work-in-simple-variadic-functions/exec.js deleted file mode 100644 index 2082baecd9..0000000000 --- a/test/fixtures/transformation/es6-generators/the-arguments-object-should-work-in-simple-variadic-functions/exec.js +++ /dev/null @@ -1,12 +0,0 @@ -function *sum() { - var result = 0; - - for (var i = 0; i < arguments.length; ++i) { - yield result += arguments[i]; - } - - return result; -} - -genHelpers.check(sum(1, 2, 3), [1, 3, 6], 6); -genHelpers.check(sum(9, -5, 3, 0, 2), [9, 4, 7, 7, 9], 9); diff --git a/test/fixtures/transformation/es6-generators/throw-should-complete-generator/exec.js b/test/fixtures/transformation/es6-generators/throw-should-complete-generator/exec.js deleted file mode 100644 index aeba49f47d..0000000000 --- a/test/fixtures/transformation/es6-generators/throw-should-complete-generator/exec.js +++ /dev/null @@ -1,13 +0,0 @@ -function *gen(x) { - throw 1; -} - -var u = gen(); - -try { - u.next(); -} catch (err) { - assert.strictEqual(err, 1); -} - -genHelpers.assertAlreadyFinished(u); diff --git a/test/fixtures/transformation/es6-generators/try-catch-finally-generator/exec.js b/test/fixtures/transformation/es6-generators/try-catch-finally-generator/exec.js deleted file mode 100644 index 5c25e461bd..0000000000 --- a/test/fixtures/transformation/es6-generators/try-catch-finally-generator/exec.js +++ /dev/null @@ -1,42 +0,0 @@ - - function *usingThrow() { - yield 0; - try { - try { - yield 1; - throw 2; - yield 3; - } catch (x) { - throw yield x; - } finally { - yield 5; - } - } catch (thrown) { - yield thrown; - } - yield 6; - } - - function *usingRaise() { - yield 0; - try { - try { - yield 1; - genHelpers.raise(2); - yield 3; - } catch (x) { - throw yield x; - } finally { - yield 5; - } - } catch (thrown) { - yield thrown; - } - yield 6; - } - - // should statically catch and then finalize - genHelpers.check(usingThrow(), [0, 1, 2, 5, 3, 6]); - - // should dynamically catch and then finalize - genHelpers.check(usingRaise(), [0, 1, 2, 5, 3, 6]); diff --git a/test/fixtures/transformation/es6-generators/try-catch-generator/exec.js b/test/fixtures/transformation/es6-generators/try-catch-generator/exec.js deleted file mode 100644 index 67ce947eab..0000000000 --- a/test/fixtures/transformation/es6-generators/try-catch-generator/exec.js +++ /dev/null @@ -1,33 +0,0 @@ -function *usingThrow(x) { - yield 0; - try { - yield 1; - if (x % 2 === 0) - throw 2; - yield x; - } catch (x) { - yield x; - } - yield 3; -} - -function *usingRaise(x) { - yield 0; - try { - yield 1; - if (x % 2 === 0) - genHelpers.raise(2); - yield x; - } catch (x) { - yield x; - } - yield 3; -} - -// should catch static exceptions properly -genHelpers.check(usingThrow(4), [0, 1, 2, 3]); -genHelpers.check(usingThrow(5), [0, 1, 5, 3]); - -// should catch dynamic exceptions properly -genHelpers.check(usingRaise(4), [0, 1, 2, 3]); -genHelpers.check(usingRaise(5), [0, 1, 5, 3]); diff --git a/test/fixtures/transformation/es6-generators/try-finally-generator/exec.js b/test/fixtures/transformation/es6-generators/try-finally-generator/exec.js deleted file mode 100644 index 889aa259cc..0000000000 --- a/test/fixtures/transformation/es6-generators/try-finally-generator/exec.js +++ /dev/null @@ -1,114 +0,0 @@ -function *usingThrow(condition) { - yield 0; - try { - yield 1; - throw 2; - yield 3; - } finally { - if (condition) { - yield 4; - return 5; - } - yield 6; - return 7; - } -} - -function *usingRaise(condition) { - yield 0; - try { - yield 1; - genHelpers.raise(2); - yield 3; - } finally { - if (condition) { - yield 4; - return 5; - } - yield 6; - return 7; - } -} - -// should execute finally blocks statically -genHelpers.check(usingThrow(true), [0, 1, 4], 5); -genHelpers.check(usingThrow(false), [0, 1, 6], 7); - -// should execute finally blocks dynamically -genHelpers.check(usingRaise(true), [0, 1, 4], 5); -genHelpers.check(usingRaise(false), [0, 1, 6], 7); - -// should execute finally blocks before throwing -var uncaughtError = new Error("uncaught"); - -function *uncaught(condition) { - try { - yield 0; - if (condition) { - yield 1; - genHelpers.raise(uncaughtError); - } - yield 2; - } finally { - yield 3; - } - yield 4; -} - -genHelpers.check(uncaught(false), [0, 2, 3, 4]); - -var u = uncaught(true); - -assert.deepEqual(u.next(), { value: 0, done: false }); -assert.deepEqual(u.next(), { value: 1, done: false }); -assert.deepEqual(u.next(), { value: 3, done: false }); - -try { - u.next(); - assert.ok(false, "should have thrown an exception"); -} catch (err) { - assert.strictEqual(err, uncaughtError); -} - -// should throw correct error when finally contains catch -var right = new Error("right"); -var wrong = new Error("wrong"); - -function *gen() { - try { - yield 0; - genHelpers.raise(right); - } finally { - yield 1; - try { - genHelpers.raise(wrong); - } catch (err) { - assert.strictEqual(err, wrong); - yield 2; - } - } -} - -var g = gen(); - -assert.deepEqual(g.next(), { - value: 0, - done: false -}); - -assert.deepEqual(g.next(), { - value: 1, - done: false -}); - -assert.deepEqual(g.next(), { - value: 2, - done: false -}); - -try { - g.next(); - assert.ok(false, "should have thrown an exception"); -} catch (err) { - assert.strictEqual(err, right); -} diff --git a/test/fixtures/transformation/es6-generators/unqualified-function-calls-should-have-a-global-`this`-object/exec.js b/test/fixtures/transformation/es6-generators/unqualified-function-calls-should-have-a-global-`this`-object/exec.js deleted file mode 100644 index 35f5677b77..0000000000 --- a/test/fixtures/transformation/es6-generators/unqualified-function-calls-should-have-a-global-`this`-object/exec.js +++ /dev/null @@ -1,26 +0,0 @@ -function getThis() { - return this; -} - -// This is almost certainly the global object, but there's a chance it -// might be null or undefined (in strict mode). -var unqualifiedThis = getThis(); - -function *invoke() { - // It seems like a bug in the ES6 spec that we have to yield an - // argument instead of just calling (yield)(). - return (yield "dummy")(); -} - -var g = invoke(); -var info = g.next(); - -assert.deepEqual(info, { value: "dummy", done: false }); - -info = g.next(getThis); - -// Avoid using assert.strictEqual when the arguments might equal the -// global object, since JSON.stringify chokes on circular structures. -assert.ok(info.value === unqualifiedThis); - -assert.strictEqual(info.done, true); diff --git a/test/fixtures/transformation/es6-generators/yield-chain-should-have-correct-associativity/exec.js b/test/fixtures/transformation/es6-generators/yield-chain-should-have-correct-associativity/exec.js deleted file mode 100644 index 5918d1c894..0000000000 --- a/test/fixtures/transformation/es6-generators/yield-chain-should-have-correct-associativity/exec.js +++ /dev/null @@ -1,6 +0,0 @@ -function *gen(n) { - return yield yield yield yield n; -} - -genHelpers.check(gen(5), [5, 1, 2, 3], 4); -genHelpers.check(gen("asdf"), ["asdf", 1, 2, 3], 4); diff --git a/test/fixtures/transformation/es6-generators/yield-star-expression-results-can-be-used-in-complex-expressions/exec.js b/test/fixtures/transformation/es6-generators/yield-star-expression-results-can-be-used-in-complex-expressions/exec.js deleted file mode 100644 index ffe646947a..0000000000 --- a/test/fixtures/transformation/es6-generators/yield-star-expression-results-can-be-used-in-complex-expressions/exec.js +++ /dev/null @@ -1,22 +0,0 @@ -function pumpNumber(gen) { - var n = 0; - - while (true) { - var res = n > 0 ? gen.next(n) : gen.next(); - n = res.value; - if (res.done) { - return n; - } - } -} - -function* foo() { - return (yield* bar()) + (yield* bar()); -} - -function* bar() { - return (yield 2) + (yield 3); -} - -assert.strictEqual(pumpNumber(bar()), 5); -assert.strictEqual(pumpNumber(foo()), 10); diff --git a/test/fixtures/transformation/es6-generators/yield-star-expression-results-have-correct-values/exec.js b/test/fixtures/transformation/es6-generators/yield-star-expression-results-have-correct-values/exec.js deleted file mode 100644 index 8622122707..0000000000 --- a/test/fixtures/transformation/es6-generators/yield-star-expression-results-have-correct-values/exec.js +++ /dev/null @@ -1,11 +0,0 @@ -function* foo() { - yield 0; - return yield* bar(); -} - -function* bar() { - yield 1; - return 2; -} - -genHelpers.check(foo(), [0, 1], 2); diff --git a/test/fixtures/transformation/es7-async-functions/LICENSE b/test/fixtures/transformation/es7-async-functions/LICENSE deleted file mode 100644 index eba1d817f5..0000000000 --- a/test/fixtures/transformation/es7-async-functions/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -Copyright (c) 2014, Facebook, Inc. -All rights reserved. - -This source code is licensed under the BSD-style license found in the -https://raw.github.com/facebook/regenerator/master/LICENSE file. An -additional grant of patent rights can be found in the PATENTS file in -the same directory. diff --git a/test/fixtures/transformation/es7-async-functions/dependent-promises-should-be-awaitable-out-of-order/exec.js b/test/fixtures/transformation/es7-async-functions/dependent-promises-should-be-awaitable-out-of-order/exec.js deleted file mode 100644 index ef8e93ddcd..0000000000 --- a/test/fixtures/transformation/es7-async-functions/dependent-promises-should-be-awaitable-out-of-order/exec.js +++ /dev/null @@ -1,26 +0,0 @@ -async function outer(value) { - var resolved = false; - var p1 = new Promise(function(resolve) { - setTimeout(function() { - resolve(value + 1); - resolved = true; - }, 0); - }); - - assert.strictEqual(resolved, false); - - var v2 = await p1.then(function(value) { - return value + 1; - }); - - assert.strictEqual(resolved, true); - - var v1 = await p1; - - return [v1, v2]; -} - -outer(1).then(function(pair) { - assert.deepEqual(pair, [2, 3]); - done(); -}).catch(done); diff --git a/test/fixtures/transformation/es7-async-functions/nested-async-function-calls-should-evaluate-in-the-right-order/exec.js b/test/fixtures/transformation/es7-async-functions/nested-async-function-calls-should-evaluate-in-the-right-order/exec.js deleted file mode 100644 index 2e9ac0094f..0000000000 --- a/test/fixtures/transformation/es7-async-functions/nested-async-function-calls-should-evaluate-in-the-right-order/exec.js +++ /dev/null @@ -1,40 +0,0 @@ -var markers = []; - -async function innerMost(marker) { - markers.push(marker); - return await marker; -} - -async function inner(marker) { - markers.push(marker); - - assert.strictEqual( - await innerMost(marker + 1), - marker + 1 - ); - - markers.push(marker + 2); - - assert.strictEqual( - await innerMost(marker + 3), - marker + 3 - ); - - markers.push(marker + 4); -} - -async function outer() { - markers.push(0); - await inner(1); - markers.push(6); - await inner(7); - markers.push(12); -} - -outer().then(function() { - var expected = []; - for (var i = 0; i <= 12; ++i) - expected.push(i); - assert.deepEqual(markers, expected); - done(); -}).catch(done); diff --git a/test/fixtures/transformation/es7-async-functions/no-await-async-function-should-return-a-Promise/exec.js b/test/fixtures/transformation/es7-async-functions/no-await-async-function-should-return-a-Promise/exec.js deleted file mode 100644 index e4c0a55454..0000000000 --- a/test/fixtures/transformation/es7-async-functions/no-await-async-function-should-return-a-Promise/exec.js +++ /dev/null @@ -1,15 +0,0 @@ -var called = false; - -async function noAwait(value) { - called = true; - return value; -} - -var promise = noAwait("asdf"); -assert.strictEqual(called, true); - -promise.then(function(value) { - assert.strictEqual(called, true); - assert.strictEqual(value, "asdf"); - done(); -}).catch(done); diff --git a/test/fixtures/transformation/es7-async-functions/one-await-async-function-should-finish-asynchronously/exec.js b/test/fixtures/transformation/es7-async-functions/one-await-async-function-should-finish-asynchronously/exec.js deleted file mode 100644 index fae186c318..0000000000 --- a/test/fixtures/transformation/es7-async-functions/one-await-async-function-should-finish-asynchronously/exec.js +++ /dev/null @@ -1,19 +0,0 @@ -var flag1 = false; -var flag2 = false; - -async function oneAwait(value) { - flag1 = true; - var result = await value; - flag2 = true; - return result; -} - -var promise = oneAwait("asdf"); -assert.strictEqual(flag1, true); -assert.strictEqual(flag2, false); - -promise.then(function(value) { - assert.strictEqual(flag2, true); - assert.strictEqual(value, "asdf"); - done(); -}).catch(done); diff --git a/test/fixtures/transformation/es7-async-functions/options.json b/test/fixtures/transformation/es7-async-functions/options.json deleted file mode 100644 index 8a6dc3a088..0000000000 --- a/test/fixtures/transformation/es7-async-functions/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "asyncExec": true, - "experimental": true -} diff --git a/test/fixtures/transformation/es7-async-functions/rejected-promises-should-be-returned-by-exceptional-async-functions/exec.js b/test/fixtures/transformation/es7-async-functions/rejected-promises-should-be-returned-by-exceptional-async-functions/exec.js deleted file mode 100644 index 8eb9f6ce33..0000000000 --- a/test/fixtures/transformation/es7-async-functions/rejected-promises-should-be-returned-by-exceptional-async-functions/exec.js +++ /dev/null @@ -1,42 +0,0 @@ -var error = new Error("rejected"); - -async function e(arg) { - if (arg) { - throw arg; - } - return "did not throw"; -} - -async function f(arg) { - return await e(arg); -} - -async function g(arg) { - return await f(arg); -} - -async function h(arg) { - return await Promise.all([ - g(arg), - Promise.resolve("dummy") - ]); -} - -Promise.all([ - h(error).then(function() { - done(new Error("should not have resolved")); - }, function(e) { - assert.strictEqual(e, error); - return "ok1"; - }), - h(null).then(function(result) { - assert.deepEqual(result, [ - "did not throw", - "dummy" - ]); - return "ok2"; - }) -]).then(function(results) { - assert.deepEqual(results, ["ok1", "ok2"]); - done(); -}).catch(done); diff --git a/test/fixtures/transformation/es7-async-functions/rejected-promises-should-cause-await-expressions-to-throw/exec.js b/test/fixtures/transformation/es7-async-functions/rejected-promises-should-cause-await-expressions-to-throw/exec.js deleted file mode 100644 index 3abf9e0f9d..0000000000 --- a/test/fixtures/transformation/es7-async-functions/rejected-promises-should-cause-await-expressions-to-throw/exec.js +++ /dev/null @@ -1,21 +0,0 @@ -var error = new Error("rejected"); - -async function f(arg) { - try { - return await arg; - } catch (e) { - assert.strictEqual(e, error); - return "did throw"; - } -} - -Promise.all([ - f(Promise.reject(error)), - f(Promise.resolve("did not throw")) -]).then(function(results) { - assert.deepEqual(results, [ - "did throw", - "did not throw" - ]); - done(); -}).catch(done); diff --git a/test/regenerator.js b/test/regenerator.js new file mode 100644 index 0000000000..370405f117 --- /dev/null +++ b/test/regenerator.js @@ -0,0 +1,21 @@ +require("../register")({ + blacklist: ["useStrict"], + experimental: true +}); + +var transform = require("../lib/6to5/transformation/transform"); +var fs = require("fs"); +var _ = require("lodash"); + +var regeneratorLoc = __dirname + "/../vendor/regenerator"; + +if (!fs.existsSync(regeneratorLoc)) { + console.error("No vendor/regenerator - run `git submodule update --init && cd vendor/regenerator && npm install`"); + process.exit(1); +} + +_.each(["tests", "async"], function (filename) { + var loc = regeneratorLoc + "/test/" + filename + ".es6.js"; + var code = fs.readFileSync(loc, "utf8"); + require(loc); +}); diff --git a/vendor/regenerator b/vendor/regenerator new file mode 160000 index 0000000000..45829598be --- /dev/null +++ b/vendor/regenerator @@ -0,0 +1 @@ +Subproject commit 45829598be68fa4cb10f86b5ca13aa7284aa6bc8 From f34907d51885b0f1d8484e64b182249fb994e637 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:38:34 +1100 Subject: [PATCH 26/39] add make bootstrap --- Makefile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ee5cbe0098..a220f5e5f5 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ MOCHA_CMD = node_modules/mocha/bin/_mocha export NODE_ENV = test -.PHONY: clean test test-cov test-clean lint test-travis test-spec test-browser publish bench build +.PHONY: clean test test-cov test-clean lint test-travis test-spec test-browser publish bench build bootstrap build: mkdir -p dist @@ -23,7 +23,7 @@ build: node $(UGLIFY_CMD) dist/runtime.js >dist/runtime.min.js rm -rf templates.json - + clean: rm -rf coverage templates.json test/tmp dist @@ -81,3 +81,7 @@ publish: git push --follow-tags rm -rf templates.json browser.js runtime.js browser-polyfill.js + +bootstrap: + git submodule update --init + cd vendor/regenerator; npm install From b12734abd69732c2968a72dde6b7e4223da9d49d Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:39:01 +1100 Subject: [PATCH 27/39] only run traceur and esnext on ALL_6TO5_TESTS environment variable --- test/esnext.js | 2 ++ test/traceur.js | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/test/esnext.js b/test/esnext.js index 7c8d38dd5c..86558a55c6 100644 --- a/test/esnext.js +++ b/test/esnext.js @@ -1,3 +1,5 @@ +if (!process.env.ALL_6TO5_TESTS) return; + require("./_transformation-helper")({ name: "esnext" }); diff --git a/test/traceur.js b/test/traceur.js index 20a395d198..cabd24ff8b 100644 --- a/test/traceur.js +++ b/test/traceur.js @@ -1,8 +1,17 @@ -var _ = require("lodash"); +if (!process.env.ALL_6TO5_TESTS) return; + +var fs = require("fs"); +var _ = require("lodash"); + +var traceurLoc = __dirname + "/../vendor/traceur"; +if (!fs.existsSync(traceurLoc)) { + console.error("No vendor/traceur - run `git submodule update --init`"); + process.exit(1); +} require("./_transformation-helper")({ name: "traceur", - loc: __dirname + "/../vendor/traceur/test/feature", + loc: traceurLoc + "/test/feature", ignoreSuites: [ "ObjectMixin", From 98ad5d42e160d359450e51e788afabd4ac215bcd Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:39:12 +1100 Subject: [PATCH 28/39] add optional typeof symbol test options --- .../transformation/optional-typeof-symbol/options.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 test/fixtures/transformation/optional-typeof-symbol/options.json diff --git a/test/fixtures/transformation/optional-typeof-symbol/options.json b/test/fixtures/transformation/optional-typeof-symbol/options.json new file mode 100644 index 0000000000..6e208aa132 --- /dev/null +++ b/test/fixtures/transformation/optional-typeof-symbol/options.json @@ -0,0 +1,3 @@ +{ + "optional": ["typeofSymbol"] +} From 5ce8ee6c2bdf512c0ac7e76ec8d51bf713becdc3 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:39:46 +1100 Subject: [PATCH 29/39] add inheritance type check to tests --- .../es6-classes/accessing-super-class/expected.js | 3 +++ .../es6-classes/accessing-super-properties/expected.js | 3 +++ .../es6-classes/calling-super-properties/expected.js | 3 +++ .../transformation/es6-classes/constructor/expected.js | 3 +++ .../es6-classes/super-class-id-member-expression/expected.js | 3 +++ .../transformation/es6-classes/super-class/expected.js | 3 +++ .../transformation/optional-proto-to-assign/class/expected.js | 3 +++ 7 files changed, 21 insertions(+) diff --git a/test/fixtures/transformation/es6-classes/accessing-super-class/expected.js b/test/fixtures/transformation/es6-classes/accessing-super-class/expected.js index 14f12f07e2..1600d655fb 100644 --- a/test/fixtures/transformation/es6-classes/accessing-super-class/expected.js +++ b/test/fixtures/transformation/es6-classes/accessing-super-class/expected.js @@ -2,6 +2,9 @@ var _slice = Array.prototype.slice; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/es6-classes/accessing-super-properties/expected.js b/test/fixtures/transformation/es6-classes/accessing-super-properties/expected.js index 95ba3c53f4..29526be129 100644 --- a/test/fixtures/transformation/es6-classes/accessing-super-properties/expected.js +++ b/test/fixtures/transformation/es6-classes/accessing-super-properties/expected.js @@ -1,6 +1,9 @@ "use strict"; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/es6-classes/calling-super-properties/expected.js b/test/fixtures/transformation/es6-classes/calling-super-properties/expected.js index 1b2b38ce31..7e8f2bfd43 100644 --- a/test/fixtures/transformation/es6-classes/calling-super-properties/expected.js +++ b/test/fixtures/transformation/es6-classes/calling-super-properties/expected.js @@ -1,6 +1,9 @@ "use strict"; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/es6-classes/constructor/expected.js b/test/fixtures/transformation/es6-classes/constructor/expected.js index d43c12f6e7..cc5264d5b6 100644 --- a/test/fixtures/transformation/es6-classes/constructor/expected.js +++ b/test/fixtures/transformation/es6-classes/constructor/expected.js @@ -1,6 +1,9 @@ "use strict"; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/es6-classes/super-class-id-member-expression/expected.js b/test/fixtures/transformation/es6-classes/super-class-id-member-expression/expected.js index a3dc10057d..d9a40e4753 100644 --- a/test/fixtures/transformation/es6-classes/super-class-id-member-expression/expected.js +++ b/test/fixtures/transformation/es6-classes/super-class-id-member-expression/expected.js @@ -1,6 +1,9 @@ "use strict"; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/es6-classes/super-class/expected.js b/test/fixtures/transformation/es6-classes/super-class/expected.js index 50b689e121..01534a385f 100644 --- a/test/fixtures/transformation/es6-classes/super-class/expected.js +++ b/test/fixtures/transformation/es6-classes/super-class/expected.js @@ -1,6 +1,9 @@ "use strict"; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, diff --git a/test/fixtures/transformation/optional-proto-to-assign/class/expected.js b/test/fixtures/transformation/optional-proto-to-assign/class/expected.js index 2af2a9b699..2d7d562265 100644 --- a/test/fixtures/transformation/optional-proto-to-assign/class/expected.js +++ b/test/fixtures/transformation/optional-proto-to-assign/class/expected.js @@ -11,6 +11,9 @@ var _defaults = function (obj, defaults) { }; var _inherits = function (child, parent) { + if (typeof parent !== "function" && parent !== null) { + throw new TypeError("Super expression must either be null or a function, not " + typeof parent); + } child.prototype = Object.create(parent && parent.prototype, { constructor: { value: child, From 348ad2e25ca75383f58df880d408274f2e155a9f Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Mon, 5 Jan 2015 12:40:12 +1100 Subject: [PATCH 30/39] better dynamic imports - fixes #393 --- lib/6to5/file.js | 32 ++++++++++++------- .../optional-bluebird-coroutines.js | 4 +-- .../transformers/optional-core-aliasing.js | 3 +- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/6to5/file.js b/lib/6to5/file.js index 479e233ee6..be2f61a613 100644 --- a/lib/6to5/file.js +++ b/lib/6to5/file.js @@ -10,11 +10,12 @@ var t = require("./types"); var _ = require("lodash"); function File(opts) { - this.dynamicImports = []; - this.opts = File.normaliseOptions(opts); - this.transformers = this.getTransformers(); - this.uids = {}; - this.ast = {}; + this.dynamicImports = []; + this.dynamicImportIds = {}; + this.opts = File.normaliseOptions(opts); + this.transformers = this.getTransformers(); + this.uids = {}; + this.ast = {}; } File.helpers = [ @@ -164,11 +165,20 @@ File.prototype.parseShebang = function (code) { return code; }; -File.prototype.addImport = function (id, source) { - var specifiers = [t.importSpecifier(t.identifier("default"), id)]; - var declar = t.importDeclaration(specifiers, t.literal(source)); - declar._blockHoist = 3; - this.dynamicImports.push(declar); +File.prototype.addImport = function (source, name) { + name = name || source; + var id = this.dynamicImportIds[name]; + + if (!id) { + id = this.dynamicImportIds[name] = this.generateUidIdentifier(name); + + var specifiers = [t.importSpecifier(t.identifier("default"), id)]; + var declar = t.importDeclaration(specifiers, t.literal(source)); + declar._blockHoist = 3; + this.dynamicImports.push(declar); + } + + return id; }; File.prototype.addHelper = function (name) { @@ -277,7 +287,7 @@ File.prototype.generate = function () { }; File.prototype.generateUid = function (name, scope) { - name = t.toIdentifier(name); + name = t.toIdentifier(name).replace(/^_+/, ""); scope = scope || this.scope; diff --git a/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js b/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js index beb19dad7a..cda714330c 100644 --- a/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js +++ b/lib/6to5/transformation/transformers/optional-bluebird-coroutines.js @@ -38,8 +38,6 @@ exports._Function = function (node, callId) { exports.Function = function (node, parent, file) { if (!node.async || node.generator) return; - var id = t.identifier("Bluebird"); - file.addImport(id, "bluebird"); - + var id = file.addImport("bluebird"); return exports._Function(node, t.memberExpression(id, t.identifier("coroutine"))); }; diff --git a/lib/6to5/transformation/transformers/optional-core-aliasing.js b/lib/6to5/transformation/transformers/optional-core-aliasing.js index bd2fb2f572..a67bf045ec 100644 --- a/lib/6to5/transformation/transformers/optional-core-aliasing.js +++ b/lib/6to5/transformation/transformers/optional-core-aliasing.js @@ -12,8 +12,7 @@ exports.optional = true; exports.ast = { enter: function (ast, file) { - file._coreId = file.generateUidIdentifier("core"); - file.addImport(file._coreId, "core-js/library"); + file._coreId = file.addImport("core-js/library", "core"); }, exit: function (ast, file) { From 64f9f4dff5f6de9600a672325080147cac334706 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:36:49 +1100 Subject: [PATCH 31/39] only check declarations in let scoping reference check --- lib/6to5/transformation/transformers/es6-let-scoping.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/6to5/transformation/transformers/es6-let-scoping.js b/lib/6to5/transformation/transformers/es6-let-scoping.js index 75e17812e8..44151d58b8 100644 --- a/lib/6to5/transformation/transformers/es6-let-scoping.js +++ b/lib/6to5/transformation/transformers/es6-let-scoping.js @@ -376,7 +376,7 @@ LetScoping.prototype.getLetReferences = function () { // this scope has a variable with the same name so it couldn't belong // to our let scope - if (scope.hasOwn(node.name)) return; + if (scope.hasOwn(node.name, true)) return; closurify = true; From 6cf318d60f8721f7ed371ce01478a032dfb74146 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:37:11 +1100 Subject: [PATCH 32/39] add updated interop modules to tests --- .../es6-modules-amd/exports-from/expected.js | 18 +++++++++++------- .../exports-from/expected.js | 18 +++++++++++------- .../imports-glob/expected.js | 8 +++++++- .../es6-modules-common/overview/expected.js | 8 +++++++- .../es6-modules-umd/exports-from/expected.js | 18 +++++++++++------- 5 files changed, 47 insertions(+), 23 deletions(-) diff --git a/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js b/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js index 8e2d46f06e..7483137265 100644 --- a/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-amd/exports-from/expected.js @@ -1,17 +1,21 @@ "use strict"; define(["exports", "foo"], function (exports, _foo) { + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + (function (obj) { for (var i in obj) { exports[i] = obj[i]; } })(_foo); - exports.foo = _foo.foo; - exports.foo = _foo.foo; - exports.bar = _foo.bar; - exports.bar = _foo.foo; - exports["default"] = _foo.foo; - exports["default"] = _foo.foo; - exports.bar = _foo.bar; + exports.foo = _interopRequire(_foo); + exports.foo = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); + exports["default"] = _interopRequire(_foo); + exports["default"] = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); }); diff --git a/test/fixtures/transformation/es6-modules-common/exports-from/expected.js b/test/fixtures/transformation/es6-modules-common/exports-from/expected.js index feaeac94ee..23274cc873 100644 --- a/test/fixtures/transformation/es6-modules-common/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-common/exports-from/expected.js @@ -1,15 +1,19 @@ "use strict"; +var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); +}; + (function (obj) { for (var i in obj) { exports[i] = obj[i]; } })(require("foo")); -exports.foo = require("foo").foo; -exports.foo = require("foo").foo; -exports.bar = require("foo").bar; -exports.bar = require("foo").foo; -exports["default"] = require("foo").foo; -exports["default"] = require("foo").foo; -exports.bar = require("foo").bar; +exports.foo = _interopRequire(require("foo")); +exports.foo = _interopRequire(require("foo")); +exports.bar = _interopRequire(require("foo")); +exports.bar = _interopRequire(require("foo")); +exports["default"] = _interopRequire(require("foo")); +exports["default"] = _interopRequire(require("foo")); +exports.bar = _interopRequire(require("foo")); diff --git a/test/fixtures/transformation/es6-modules-common/imports-glob/expected.js b/test/fixtures/transformation/es6-modules-common/imports-glob/expected.js index 3293bd0ebd..d885f06222 100644 --- a/test/fixtures/transformation/es6-modules-common/imports-glob/expected.js +++ b/test/fixtures/transformation/es6-modules-common/imports-glob/expected.js @@ -1,3 +1,9 @@ "use strict"; -var foo = require("foo"); +var _interopRequireWildcard = function (obj) { + return obj && obj.constructor === Object ? obj : { + "default": obj + }; +}; + +var foo = _interopRequireWildcard(require("foo")); diff --git a/test/fixtures/transformation/es6-modules-common/overview/expected.js b/test/fixtures/transformation/es6-modules-common/overview/expected.js index ed9175cbfb..9ce11f0b0d 100644 --- a/test/fixtures/transformation/es6-modules-common/overview/expected.js +++ b/test/fixtures/transformation/es6-modules-common/overview/expected.js @@ -1,5 +1,11 @@ "use strict"; +var _interopRequireWildcard = function (obj) { + return obj && obj.constructor === Object ? obj : { + "default": obj + }; +}; + var _interopRequire = function (obj) { return obj && (obj["default"] || obj); }; @@ -12,7 +18,7 @@ require("./directory/foo-bar"); var foo = _interopRequire(require("foo")); -var foo = require("foo"); +var foo = _interopRequireWildcard(require("foo")); var bar = require("foo").bar; var bar = require("foo").foo; diff --git a/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js b/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js index 522d97be92..70af3ecb6f 100644 --- a/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js +++ b/test/fixtures/transformation/es6-modules-umd/exports-from/expected.js @@ -7,17 +7,21 @@ factory(exports, require("foo")); } })(function (exports, _foo) { + var _interopRequire = function (obj) { + return obj && (obj["default"] || obj); + }; + (function (obj) { for (var i in obj) { exports[i] = obj[i]; } })(_foo); - exports.foo = _foo.foo; - exports.foo = _foo.foo; - exports.bar = _foo.bar; - exports.bar = _foo.foo; - exports["default"] = _foo.foo; - exports["default"] = _foo.foo; - exports.bar = _foo.bar; + exports.foo = _interopRequire(_foo); + exports.foo = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); + exports["default"] = _interopRequire(_foo); + exports["default"] = _interopRequire(_foo); + exports.bar = _interopRequire(_foo); }); From 9c527f9d9ce4c9021523799efa2d76b567b8eabd Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:37:40 +1100 Subject: [PATCH 33/39] make regenerator test use the ALL environment var --- test/regenerator.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/regenerator.js b/test/regenerator.js index 370405f117..2a2481cba7 100644 --- a/test/regenerator.js +++ b/test/regenerator.js @@ -1,3 +1,5 @@ +if (!process.env.ALL_6TO5_TESTS) return; + require("../register")({ blacklist: ["useStrict"], experimental: true From fd6704ac253e9209ff26b1d5beffb69f1e8007cc Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:38:11 +1100 Subject: [PATCH 34/39] update optional bluebird coroutine test to reflect new addImport --- .../optional-bluebird-coroutines/expression/expected.js | 4 ++-- .../optional-bluebird-coroutines/statement/expected.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/fixtures/transformation/optional-bluebird-coroutines/expression/expected.js b/test/fixtures/transformation/optional-bluebird-coroutines/expression/expected.js index a672903731..13943a98de 100644 --- a/test/fixtures/transformation/optional-bluebird-coroutines/expression/expected.js +++ b/test/fixtures/transformation/optional-bluebird-coroutines/expression/expected.js @@ -4,8 +4,8 @@ var _interopRequire = function (obj) { return obj && (obj["default"] || obj); }; -var Bluebird = _interopRequire(require("bluebird")); +var _bluebird = _interopRequire(require("bluebird")); -var foo = Bluebird.coroutine(function* () { +var foo = _bluebird.coroutine(function* () { var wat = yield bar(); }); diff --git a/test/fixtures/transformation/optional-bluebird-coroutines/statement/expected.js b/test/fixtures/transformation/optional-bluebird-coroutines/statement/expected.js index 65d8cff6ef..9b200b29f0 100644 --- a/test/fixtures/transformation/optional-bluebird-coroutines/statement/expected.js +++ b/test/fixtures/transformation/optional-bluebird-coroutines/statement/expected.js @@ -4,8 +4,8 @@ var _interopRequire = function (obj) { return obj && (obj["default"] || obj); }; -var Bluebird = _interopRequire(require("bluebird")); +var _bluebird = _interopRequire(require("bluebird")); -var foo = Bluebird.coroutine(function* foo() { +var foo = _bluebird.coroutine(function* foo() { var wat = yield bar(); }); From 1b85607d7d634bfb84f87f35b3078ea084f60754 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:38:28 +1100 Subject: [PATCH 35/39] add ability to assert just an error instead of an error message in tests --- test/_transformation-helper.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/_transformation-helper.js b/test/_transformation-helper.js index 0bf356e65c..882d0e85c1 100644 --- a/test/_transformation-helper.js +++ b/test/_transformation-helper.js @@ -129,7 +129,7 @@ module.exports = function (suiteOpts, taskOpts, dynamicOpts) { delete task.options.throws; assert.throws(runTask, function (err) { - return err.message.indexOf(throwMsg) >= 0; + return throwMsg === true || err.message.indexOf(throwMsg) >= 0; }); } else { runTask(); From b38a00d70e88ec05116d5e70c8b4f3f374dadc8e Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:38:55 +1100 Subject: [PATCH 36/39] add destructuring defaults #230 --- .../transformers/es6-destructuring.js | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/6to5/transformation/transformers/es6-destructuring.js b/lib/6to5/transformation/transformers/es6-destructuring.js index 90746a2029..489d2de53c 100644 --- a/lib/6to5/transformation/transformers/es6-destructuring.js +++ b/lib/6to5/transformation/transformers/es6-destructuring.js @@ -21,12 +21,30 @@ var push = function (opts, nodes, elem, parentId) { } else if (t.isArrayPattern(elem)) { pushArrayPattern(opts, nodes, elem, parentId); } else if (t.isAssignmentPattern(elem)) { - return; + pushAssignmentPattern(opts, nodes, elem, parentId); } else { nodes.push(buildVariableAssign(opts, elem, parentId)); } }; +var pushAssignmentPattern = function (opts, nodes, pattern, parentId) { + var tempParentId = opts.scope.generateUidBasedOnNode(parentId, opts.file); + + nodes.push(t.variableDeclaration("var", [ + t.variableDeclarator(tempParentId, parentId) + ])); + + nodes.push(buildVariableAssign( + opts, + pattern.left, + t.conditionalExpression( + t.binaryExpression("===", tempParentId, t.identifier("undefined")), + pattern.right, + tempParentId + ) + )); +}; + var pushObjectPattern = function (opts, nodes, pattern, parentId) { for (var i in pattern.properties) { var prop = pattern.properties[i]; @@ -187,6 +205,24 @@ exports.Function = function (node, parent, file, scope) { block.body = nodes.concat(block.body); }; +exports.CatchClause = function (node, parent, file, scope) { + var pattern = node.param; + if (!t.isPattern(pattern)) return; + + var ref = file.generateUidIdentifier("ref", scope); + node.param = ref; + + var nodes = []; + + push({ + kind: "var", + file: file, + scope: scope + }, nodes, pattern, ref); + + node.body.body = nodes.concat(node.body.body); +}; + exports.ExpressionStatement = function (node, parent, file, scope) { var expr = node.expression; if (expr.type !== "AssignmentExpression") return; From 3ec97fc86da9968f492d7c9ee29ee46db9e46456 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:39:18 +1100 Subject: [PATCH 37/39] only check if a function is a declaration in common module hoisting --- lib/6to5/transformation/modules/common.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/6to5/transformation/modules/common.js b/lib/6to5/transformation/modules/common.js index c577052740..77224cd148 100644 --- a/lib/6to5/transformation/modules/common.js +++ b/lib/6to5/transformation/modules/common.js @@ -71,7 +71,7 @@ CommonJSFormatter.prototype.exportDeclaration = function (node, nodes) { // exports = module.exports = VALUE; if (this.hasNonDefaultExports) templateName = "exports-default-module-override"; - if (t.isFunction(declar) || !this.hasNonDefaultExports) { + if (t.isFunctionDeclaration(declar) || !this.hasNonDefaultExports) { assign = util.template(templateName, { VALUE: this._pushStatement(declar, nodes) }, true); From 8164bb17cea9ec11c09516c3988c03508d5b5dfe Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:39:47 +1100 Subject: [PATCH 38/39] don't use interopRequire if noInteropRequire is set for default module formatter --- lib/6to5/transformation/modules/_default.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/6to5/transformation/modules/_default.js b/lib/6to5/transformation/modules/_default.js index 8d175db9cd..7713fff73c 100644 --- a/lib/6to5/transformation/modules/_default.js +++ b/lib/6to5/transformation/modules/_default.js @@ -142,7 +142,7 @@ DefaultFormatter.prototype._exportSpecifier = function (getRef, specifier, node, nodes.push(this._exportsWildcard(getRef(), node)); } else { var ref; - if (t.isSpecifierDefault(specifier.id)) { + if (t.isSpecifierDefault(specifier.id) || this.noInteropRequire) { ref = t.memberExpression(getRef(), specifier.id); } else { ref = t.callExpression(this.file.addHelper("interop-require"), [getRef()]); From a88bd69e30b4abdab30ef255e05bc2f1316d8cba Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 10:39:56 +1100 Subject: [PATCH 39/39] justify disabled traceur tests --- test/traceur.js | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/test/traceur.js b/test/traceur.js index cabd24ff8b..a52e2deaad 100644 --- a/test/traceur.js +++ b/test/traceur.js @@ -23,30 +23,27 @@ require("./_transformation-helper")({ "FreeVariableChecker", "TypeAssertions", "MemberVariables", - "Types", - - // REENABLE THESE - "Destructuring", - "Syntax", - "StringExtras", - "Symbol", - "Yield", - "Modules", - "Spread", - "Scope", - "GeneratorComprehension" + "Types" ], ignoreTasks: [ - "Strict", - // core.js doesn't support due to a perf hit and having to override a lot // of native methods "Symbol/GetOwnPropertySymbols", - // Traceur doesn't name methods and has an incorrect test asserting that + // traceur doesn't name methods and has an incorrect test asserting that // they have no names - "PropertyMethodAssignment/PropertyMethodAssignment" + "PropertyMethodAssignment/PropertyMethodAssignment", + + // 6to5 assumes that all code transformed is a module + "Strict", + "Syntax/UseStrictEscapeSequence", + "Syntax/UseStrictLineContinuation", + + // the spec for these doesn't define syntax (as far as i could tell) + // these both fail because of filter between blocks + "ArrayComprehension/Simple", + "GeneratorComprehension/Simple" ] }, { optional: ["typeofSymbol"],