1651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===- unittest/Format/FormatTestJS.cpp - Formatting unit tests for JS ----===// 2651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 3651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// The LLVM Compiler Infrastructure 4651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 5651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// This file is distributed under the University of Illinois Open Source 6651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// License. See LICENSE.TXT for details. 7651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines// 8651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines//===----------------------------------------------------------------------===// 9651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 10651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "FormatTestUtils.h" 11651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "clang/Format/Format.h" 12651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "llvm/Support/Debug.h" 13651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines#include "gtest/gtest.h" 14651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines#define DEBUG_TYPE "format-test" 166bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 17651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace clang { 18651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesnamespace format { 19651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 20651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesclass FormatTestJS : public ::testing::Test { 21651f13cea278ec967336033dd032faef0e9fc2ecStephen Hinesprotected: 22651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static std::string format(llvm::StringRef Code, unsigned Offset, 23651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines unsigned Length, const FormatStyle &Style) { 24651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << "---\n"); 25651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines DEBUG(llvm::errs() << Code << "\n\n"); 26651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines std::vector<tooling::Range> Ranges(1, tooling::Range(Offset, Length)); 27b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar bool IncompleteFormat = false; 28b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar tooling::Replacements Replaces = 29b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar reformat(Style, Code, Ranges, "<stdin>", &IncompleteFormat); 30b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar EXPECT_FALSE(IncompleteFormat); 314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar auto Result = applyAllReplacements(Code, Replaces); 324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_TRUE(static_cast<bool>(Result)); 334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar DEBUG(llvm::errs() << "\n" << *Result << "\n\n"); 344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar return *Result; 35651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 36651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines static std::string format( 386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines llvm::StringRef Code, 396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_JavaScript)) { 40651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return format(Code, 0, Code.size(), Style); 41651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 42651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 43651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static FormatStyle getGoogleJSStyleWithColumns(unsigned ColumnLimit) { 44651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines FormatStyle Style = getGoogleStyle(FormatStyle::LK_JavaScript); 45651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines Style.ColumnLimit = ColumnLimit; 46651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines return Style; 47651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 48651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 49651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines static void verifyFormat( 50651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines llvm::StringRef Code, 51651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_JavaScript)) { 524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = format(test::messUp(Code), Style); 534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Code.str(), Result) << "Formatted:\n" << Result; 544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar } 554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar static void verifyFormat( 574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar llvm::StringRef Expected, 584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar llvm::StringRef Code, 594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar const FormatStyle &Style = getGoogleStyle(FormatStyle::LK_JavaScript)) { 604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar std::string Result = format(Code, Style); 614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar EXPECT_EQ(Expected.str(), Result) << "Formatted:\n" << Result; 62651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines } 63651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines}; 64651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 654967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, BlockComments) { 664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("/* aaaaaaaaaaaaa */ aaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" 674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa);"); 684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 70651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestJS, UnderstandsJavaScriptOperators) { 71651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a == = b;"); 72651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a != = b;"); 73651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 74651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a === b;"); 75651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("aaaaaaa ===\n b;", getGoogleJSStyleWithColumns(10)); 76651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a !== b;"); 77651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("aaaaaaa !==\n b;", getGoogleJSStyleWithColumns(10)); 78651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("if (a + b + c +\n" 79651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " d !==\n" 80651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " e + f + g)\n" 81651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " q();", 82651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines getGoogleJSStyleWithColumns(20)); 83651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 84651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a >> >= b;"); 85651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 86651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a >>> b;"); 87651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("aaaaaaa >>>\n b;", getGoogleJSStyleWithColumns(10)); 88651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("a >>>= b;"); 89651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("aaaaaaa >>>=\n b;", getGoogleJSStyleWithColumns(10)); 90651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("if (a + b + c +\n" 91651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " d >>>\n" 92651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " e + f + g)\n" 93651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines " q();", 94651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines getGoogleJSStyleWithColumns(20)); 95651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("var x = aaaaaaaaaa ?\n" 9687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " bbbbbb :\n" 9787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " ccc;", 98651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines getGoogleJSStyleWithColumns(20)); 996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 1006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var b = a.map((x) => x + 1);"); 101176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("return ('aaa') in bbbb;"); 1024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = aaaaaaaaaaaaaaaaaaaaaaaaa() in\n" 1034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaa.aaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;"); 1044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle Style = getGoogleJSStyleWithColumns(80); 1054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style.AlignOperands = true; 1064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = aaaaaaaaaaaaaaaaaaaaaaaaa() in\n" 1074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaa.aaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;", 1084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style); 1094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style.BreakBeforeBinaryOperators = FormatStyle::BOS_All; 1104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = aaaaaaaaaaaaaaaaaaaaaaaaa()\n" 1114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " in aaaa.aaaaaa.aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa;", 1124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style); 113b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 114b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // ES6 spread operator. 115b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("someFunction(...a);"); 116b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = [1, ...a, 2];"); 117176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 118176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 119176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(FormatTestJS, UnderstandsAmpAmp) { 120176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("e && e.SomeFunction();"); 121176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 122176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 123176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(FormatTestJS, LiteralOperatorsCanBeKeywords) { 124176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("not.and.or.not_eq = 1;"); 1256bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 1266bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 12787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestJS, ReservedWords) { 12887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // JavaScript reserved words (aka keywords) are only illegal when used as 12987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Identifiers, but are legal as IdentifierNames. 13087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("x.class.struct = 1;"); 13187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("x.case = 1;"); 13287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("x.interface = 1;"); 1334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x.for = 1;"); 1344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x.of() = 1;"); 1354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x.in() = 1;"); 1364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x.let() = 1;"); 1374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x.var() = 1;"); 13887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("x = {\n" 13987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " a: 12,\n" 14087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " interface: 1,\n" 14187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " switch: 1,\n" 14287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "};"); 14387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var struct = 2;"); 14487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var union = 2;"); 1454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var interface = 2;"); 1464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("interface = 2;"); 1474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x = interface instanceof y;"); 1484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 1494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1504967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, CppKeywords) { 1514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Make sure we don't mess stuff up because of C++ keywords. 1524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("return operator && (aa);"); 15387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 15487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 1556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, ES6DestructuringAssignment) { 1566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var [a, b, c] = [1, 2, 3];"); 1574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("const [a, b, c] = [1, 2, 3];"); 15887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("let [a, b, c] = [1, 2, 3];"); 1593ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("var {a, b} = {a: 1, b: 2};"); 16087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("let {a, b} = {a: 1, b: 2};"); 161651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 162651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 163c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesTEST_F(FormatTestJS, ContainerLiterals) { 164b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {y: function(a) { return a; }};"); 165c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("return {\n" 166c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " link: function() {\n" 167c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " f(); //\n" 168c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " }\n" 169c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "};"); 170c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("return {\n" 171c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " a: a,\n" 172c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " link: function() {\n" 173c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " f(); //\n" 174c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " }\n" 175c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "};"); 176c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("return {\n" 177c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " a: a,\n" 178176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " link: function() {\n" 179176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " f(); //\n" 180176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " },\n" 181176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " link: function() {\n" 182176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " f(); //\n" 183176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " }\n" 184176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 185176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var stuff = {\n" 186176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " // comment for update\n" 187176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " update: false,\n" 188176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " // comment for modules\n" 189176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " modules: false,\n" 190176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " // comment for tasks\n" 191176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " tasks: false\n" 192176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 193176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("return {\n" 194176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " 'finish':\n" 195176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " //\n" 196176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " a\n" 197c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "};"); 1980e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var obj = {\n" 1990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " fooooooooo: function(x) {\n" 2000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " return x.zIsTooLongForOneLineWithTheDeclarationLine();\n" 2010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " }\n" 2020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "};"); 2033ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar // Simple object literal, as opposed to enum style below. 2043ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("var obj = {a: 123};"); 2053ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar // Enum style top level assignment. 2063ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("X = {\n a: 123\n};"); 2073ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("X.Y = {\n a: 123\n};"); 208b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // But only on the top level, otherwise its a plain object literal assignment. 209b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function x() {\n" 210b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " y = {z: 1};\n" 211b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}"); 2123ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("x = foo && {a: 123};"); 213b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 214b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // Arrow functions in object literals. 215b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {y: (a) => { return a; }};"); 216b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {y: (a) => a};"); 217b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 218b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // Computed keys. 219b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {[a]: 1, b: 2, [c]: 3};"); 220b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {\n" 221b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " [a]: 1,\n" 222b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " b: 2,\n" 223b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " [c]: 3,\n" 224b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "};"); 2254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Object literals can leave out labels. 2274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("f({a}, () => {\n" 2284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " g(); //\n" 2294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "});"); 2304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 2314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Keys can be quoted. 2324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = {\n" 2334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a: a,\n" 2344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " b: b,\n" 2354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " 'c': c,\n" 2364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};"); 237c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 238c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 23958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga NainarTEST_F(FormatTestJS, MethodsInObjectLiterals) { 24058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("var o = {\n" 24158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " value: 'test',\n" 24258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " get value() { // getter\n" 24358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " return this.value;\n" 24458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " }\n" 24558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "};"); 24658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("var o = {\n" 24758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " value: 'test',\n" 24858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " set value(val) { // setter\n" 24958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " this.value = val;\n" 25058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " }\n" 25158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "};"); 25258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("var o = {\n" 25358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " value: 'test',\n" 25458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " someMethod(val) { // method\n" 25558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " doSomething(this.value + val);\n" 25658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " }\n" 25758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "};"); 25858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("var o = {\n" 25958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " someMethod(val) { // method\n" 26058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " doSomething(this.value + val);\n" 26158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " },\n" 26258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " someOtherMethod(val) { // method\n" 26358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " doSomething(this.value + val);\n" 26458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " }\n" 26558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "};"); 26658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 26758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 268651f13cea278ec967336033dd032faef0e9fc2ecStephen HinesTEST_F(FormatTestJS, SpacesInContainerLiterals) { 269651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("var arr = [1, 2, 3];"); 2700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("f({a: 1, b: 2, c: 3});"); 271651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 2726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var object_literal_with_long_name = {\n" 2736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " a: 'aaaaaaaaaaaaaaaaaa',\n" 2746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " b: 'bbbbbbbbbbbbbbbbbb'\n" 2756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "};"); 2766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 2770e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("f({a: 1, b: 2, c: 3});", 278651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines getChromiumStyle(FormatStyle::LK_JavaScript)); 2790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("f({'a': [{}]});"); 280651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 281651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 2824967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, SingleQuotedStrings) { 283651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines verifyFormat("this.function('', true);"); 284651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} 285651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines 2866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, GoogScopes) { 2876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("goog.scope(function() {\n" 2886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "var x = a.b;\n" 2896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "var y = c.d;\n" 2906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "}); // goog.scope"); 29158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("goog.scope(function() {\n" 29258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "// test\n" 29358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "var x = 0;\n" 29458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "// test\n" 29558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "});"); 2966bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 2976bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 2980e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, GoogModules) { 2990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("goog.module('this.is.really.absurdly.long');", 3000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(40)); 3010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("goog.require('this.is.really.absurdly.long');", 3020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(40)); 3030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("goog.provide('this.is.really.absurdly.long');", 3040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(40)); 3050e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var long = goog.require('this.is.really.absurdly.long');", 3060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(40)); 30787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("goog.setTestOnly('this.is.really.absurdly.long');", 30887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(40)); 3094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("goog.forwardDeclare('this.is.really.absurdly.long');", 3104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(40)); 3110e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 3120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // These should be wrapped normally. 3130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat( 3140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "var MyLongClassName =\n" 3150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " goog.module.get('my.long.module.name.followedBy.MyLongClassName');"); 3160e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 3170e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 3184967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, FormatsNamespaces) { 3194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("namespace Foo {\n" 3204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " export let x = 1;\n" 3214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"); 3224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("declare namespace Foo {\n" 3234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " export let x: number;\n" 3244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"); 3254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 327c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesTEST_F(FormatTestJS, FormatsFreestandingFunctions) { 328c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("function outer1(a, b) {\n" 329c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function inner1(a, b) { return a; }\n" 330c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " inner1(a, b);\n" 331c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "}\n" 332c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "function outer2(a, b) {\n" 333c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function inner2(a, b) { return a; }\n" 334c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " inner2(a, b);\n" 335c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "}"); 336b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function f() {}"); 337b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 338b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 3394967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, GeneratorFunctions) { 3404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function* f() {\n" 3414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " let x = 1;\n" 3424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " yield x;\n" 3434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " yield* something();\n" 3444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function*\n" 3464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " f() {\n" 3474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}", 3484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(8)); 3494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export function* f() {\n" 3504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " yield 1;\n" 3514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"); 3524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("class X {\n" 3534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " * generatorMethod() { yield x; }\n" 3544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 3574967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, AsyncFunctions) { 3584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("async function f() {\n" 3594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " let x = 1;\n" 3604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return fetch(x);\n" 3614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("async function* f() {\n" 3634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " yield fetch(x);\n" 3644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export async function f() {\n" 3664967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return fetch(x);\n" 3674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("class X {\n" 3694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " async asyncMethod() { return fetch(1); }\n" 3704967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 3714967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function initialize() {\n" 3724967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " // Comment.\n" 3734967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return async.then();\n" 3744967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"); 3754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 3764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 377b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestJS, ArrayLiterals) { 37887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var aaaaa: List<SomeThing> =\n" 37987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " [new SomeThingAAAAAAAAAAAA(), new SomeThingBBBBBBBBB()];"); 380b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("return [\n" 3814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbb,\n" 382b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " ccccccccccccccccccccccccccc\n" 383b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "];"); 3844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("return [\n" 3854967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaa().bbbbbbbb('A'),\n" 3864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaa().bbbbbbbb('B'),\n" 3874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaa().bbbbbbbb('C'),\n" 3884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 38987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var someVariable = SomeFunction([\n" 3904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbb,\n" 391b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " ccccccccccccccccccccccccccc\n" 392b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "]);"); 39387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var someVariable = SomeFunction([\n" 394b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " [aaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbb],\n" 395b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "]);", 396b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar getGoogleJSStyleWithColumns(51)); 39787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var someVariable = SomeFunction(aaaa, [\n" 3984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbb,\n" 399b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " ccccccccccccccccccccccccccc\n" 400b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "]);"); 40187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var someVariable = SomeFunction(\n" 40287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaa,\n" 40387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " [\n" 4044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaa, bbbbbbbbbbbbbbbbbbbbbbbbbb,\n" 4054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " cccccccccccccccccccccccccc\n" 40687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " ],\n" 40787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaa);"); 4084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var aaaa = aaaaa || // wrap\n" 4094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " [];"); 410b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 411b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("someFunction([], {a: a});"); 412c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 413c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 4144967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, ColumnLayoutForArrayLiterals) { 4154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var array = [\n" 4164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,\n" 4174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,\n" 4184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 4194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var array = someFunction([\n" 4204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,\n" 4214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a, a, a, a, a, a, a, a, a, a, a, a, a, a, a,\n" 4224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "]);"); 4234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 4244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 425c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesTEST_F(FormatTestJS, FunctionLiterals) { 426176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("doFoo(function() {});"); 4276bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("doFoo(function() { return 1; });"); 428176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = function() {\n" 429176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return 1;\n" 430176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};"); 43187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var func = //\n" 43287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " function() {\n" 43387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " return 1;\n" 43487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "};"); 4356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("return {\n" 4366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " body: {\n" 4376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " setAttribute: function(key, val) { this[key] = val; },\n" 4386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " getAttribute: function(key) { return this[key]; },\n" 4396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " style: {direction: ''}\n" 4406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " }\n" 4416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "};"); 44287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("abc = xyz ? function() {\n" 44387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " return 1;\n" 44487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "} : function() {\n" 44587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " return -1;\n" 44687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "};"); 4476bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4486bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var closure = goog.bind(\n" 4496bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " function() { // comment\n" 4506bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " foo();\n" 4516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " bar();\n" 4526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " },\n" 4536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " this, arg1IsReallyLongAndNeeedsLineBreaks,\n" 4546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " arg3IsReallyLongAndNeeedsLineBreaks);"); 4556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var closure = goog.bind(function() { // comment\n" 4566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " foo();\n" 4576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " bar();\n" 4586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "}, this);"); 459c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("return {\n" 460c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " a: 'E',\n" 461c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " b: function() {\n" 462c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " return function() {\n" 463c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " f(); //\n" 464c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " };\n" 465c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " }\n" 466c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "};"); 4670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("{\n" 4680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " var someVariable = function(x) {\n" 4690e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " return x.zIsTooLongForOneLineWithTheDeclarationLine();\n" 4700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " };\n" 4710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "}"); 472b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("someLooooooooongFunction(\n" 473b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" 474b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" 475b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " function(aaaaaaaaaaaaaaaaaaaaaaaaaaaaa) {\n" 476b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " // code\n" 477b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " });"); 4786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 4790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("f({a: function() { return 1; }});", 4800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(33)); 4810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("f({\n" 4826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " a: function() { return 1; }\n" 4830e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "});", 4840e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(32)); 485c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 486c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("return {\n" 487c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " a: function SomeFunction() {\n" 488c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " // ...\n" 489c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " return 1;\n" 490c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " }\n" 491c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines "};"); 4920e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("this.someObject.doSomething(aaaaaaaaaaaaaaaaaaaaaaaaaa)\n" 4930e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " .then(goog.bind(function(aaaaaaaaaaa) {\n" 4940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " someFunction();\n" 4950e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " someFunction();\n" 4960e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " }, this), aaaaaaaaaaaaaaaaa);"); 4970e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 49887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("someFunction(goog.bind(function() {\n" 49987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doSomething();\n" 50087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doSomething();\n" 50187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}, this), goog.bind(function() {\n" 50287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doSomething();\n" 50387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doSomething();\n" 50487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}, this));"); 505b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 506b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // FIXME: This is bad, we should be wrapping before "function() {". 507b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("someFunction(function() {\n" 508b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " doSomething(); // break\n" 509b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "})\n" 510b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " .doSomethingElse(\n" 511b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " // break\n" 512b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " );"); 513c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines} 514c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines 515176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesTEST_F(FormatTestJS, InliningFunctionLiterals) { 516176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines FormatStyle Style = getGoogleStyle(FormatStyle::LK_JavaScript); 517176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_Inline; 518176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = function() {\n" 519176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return 1;\n" 520176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};", 521176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 522176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = doSomething(function() { return 1; });", Style); 523176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var outer = function() {\n" 524176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " var inner = function() { return 1; }\n" 525176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};", 526176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 527176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("function outer1(a, b) {\n" 528176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " function inner1(a, b) { return a; }\n" 529176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}", 530176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 531176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 532176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_All; 533176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = function() { return 1; };", Style); 534176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = doSomething(function() { return 1; });", Style); 535176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat( 536176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "var outer = function() { var inner = function() { return 1; } };", 537176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 538176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("function outer1(a, b) {\n" 539176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " function inner1(a, b) { return a; }\n" 540176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}", 541176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 542176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 543176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_None; 544176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = function() {\n" 545176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return 1;\n" 546176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};", 547176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 548176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var func = doSomething(function() {\n" 549176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return 1;\n" 550176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "});", 551176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 552176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var outer = function() {\n" 553176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " var inner = function() {\n" 554176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return 1;\n" 555176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " }\n" 556176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "};", 557176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 558176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("function outer1(a, b) {\n" 559176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " function inner1(a, b) {\n" 560176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return a;\n" 561176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " }\n" 562176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}", 563176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines Style); 56487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 56587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar Style.AllowShortFunctionsOnASingleLine = FormatStyle::SFS_Empty; 56687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var func = function() {\n" 56787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " return 1;\n" 56887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "};", 56987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar Style); 570176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 571176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 572c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen HinesTEST_F(FormatTestJS, MultipleFunctionLiterals) { 573c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("promise.then(\n" 574c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function success() {\n" 575c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doFoo();\n" 576c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doBar();\n" 577c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " },\n" 578c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function error() {\n" 579c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doFoo();\n" 580c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doBaz();\n" 581c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " },\n" 582c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " []);\n"); 583c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines verifyFormat("promise.then(\n" 584c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function success() {\n" 585c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doFoo();\n" 586c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doBar();\n" 587c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " },\n" 588c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " [],\n" 589c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " function error() {\n" 590c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doFoo();\n" 591c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " doBaz();\n" 592c568f1e98938584c0ef0b12ae5018ff7d90a4072Stephen Hines " });\n"); 59387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("promise.then(\n" 59487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " [],\n" 59587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " function success() {\n" 59687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doFoo();\n" 59787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doBar();\n" 59887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " },\n" 59987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " function error() {\n" 60087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doFoo();\n" 60187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " doBaz();\n" 60287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " });\n"); 603176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 604176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("getSomeLongPromise()\n" 605176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " .then(function(value) { body(); })\n" 6060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " .thenCatch(function(error) {\n" 6070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " body();\n" 6080e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " body();\n" 6090e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " });"); 610176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("getSomeLongPromise()\n" 611176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " .then(function(value) {\n" 612176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " body();\n" 613176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " body();\n" 614176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " })\n" 615176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " .thenCatch(function(error) {\n" 616176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " body();\n" 617176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " body();\n" 618176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " });"); 6190e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 62058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("getSomeLongPromise()\n" 62158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " .then(function(value) { body(); })\n" 62258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " .thenCatch(function(error) { body(); });"); 6234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 6244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("return [aaaaaaaaaaaaaaaaaaaaaa]\n" 6254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " .aaaaaaa(function() {\n" 6264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " //\n" 6274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " })\n" 6284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " .bbbbbb();"); 6296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 6306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 631b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestJS, ArrowFunctions) { 632b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = (a) => {\n" 633b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " return a;\n" 634b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "};"); 635b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = (a) => {\n" 636b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " function y() { return 42; }\n" 637b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " return a;\n" 638b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "};"); 639b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = (a: type): {some: type} => {\n" 640b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " return a;\n" 641b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "};"); 642b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = (a) => a;"); 643b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("return () => [];"); 644b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var aaaaaaaaaaaaaaaaaaaa = {\n" 645b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaa:\n" 646b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" 647b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa) =>\n" 648b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" 649b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "};"); 65087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var a = a.aaaaaaa(\n" 65187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " (a: a) => aaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) &&\n" 65287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaa(bbbbbbb));"); 65387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var a = a.aaaaaaa(\n" 65487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " (a: a) => aaaaaaaaaaaaaaaaaaaaa(bbbbbbbbb) ?\n" 65587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaa(bbbbbbb) :\n" 65687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaa(bbbbbbb));"); 657b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 658b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // FIXME: This is bad, we should be wrapping before "() => {". 659b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("someFunction(() => {\n" 660b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " doSomething(); // break\n" 661b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "})\n" 662b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " .doSomethingElse(\n" 663b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " // break\n" 664b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " );"); 665b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 666b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 6676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, ReturnStatements) { 668176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("function() {\n" 669176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines " return [hello, world];\n" 670176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "}"); 6716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 6726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 67387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestJS, ForLoops) { 67487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("for (var i in [2, 3]) {\n" 67587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}"); 6764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("for (var i of [2, 3]) {\n" 6774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 6784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("for (let {a, b} of x) {\n" 6794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 6804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("for (let {a, b} in x) {\n" 6814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 68287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 68387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 6844967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, WrapRespectsAutomaticSemicolonInsertion) { 685b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // The following statements must not wrap, as otherwise the program meaning 686b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // would change due to automatic semicolon insertion. 687b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // See http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1. 688b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("return aaaaa;", getGoogleJSStyleWithColumns(10)); 689b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("continue aaaaa;", getGoogleJSStyleWithColumns(10)); 690b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("break aaaaa;", getGoogleJSStyleWithColumns(10)); 691b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("throw aaaaa;", getGoogleJSStyleWithColumns(10)); 692b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("aaaaaaaaa++;", getGoogleJSStyleWithColumns(10)); 693b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("aaaaaaaaa--;", getGoogleJSStyleWithColumns(10)); 6944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("return [\n" 6954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaa\n" 6964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];", 6974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(12)); 6984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 6994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 7004967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, AutomaticSemicolonInsertionHeuristic) { 7014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "b;", 7034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a \n" 7044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " b ;"); 7054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a()\n" 7064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "b;", 7074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a ()\n" 7084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " b ;"); 7094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a[b]\n" 7104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "c;", 7114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a [b]\n" 7124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "c ;"); 7134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("1\n" 7144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a;", 7154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "1 \n" 7164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a ;"); 7174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "1;", 7194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a \n" 7204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "1 ;"); 7214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "'x';", 7234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a \n" 7244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " 'x';"); 7254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a++\n" 7264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "b;", 7274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a ++\n" 7284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "b ;"); 7294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "!b && c;", 7314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a \n" 7324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " ! b && c;"); 7334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "if (1) f();", 7354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a\n" 7364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " if (1) f();"); 7374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("a\n" 7384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class X {}", 7394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " a\n" 7404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " class X {}"); 7414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var a", "var\n" 7424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "a"); 7434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x instanceof String", "x\n" 7444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "instanceof\n" 7454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "String"); 7464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n" 7474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " bar) {}"); 748b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 749b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 750b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestJS, ClosureStyleCasts) { 7516bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = /** @type {foo} */ (bar);"); 7526bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 7536bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 7546bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, TryCatch) { 7556bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("try {\n" 7566bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " f();\n" 7576bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "} catch (e) {\n" 7586bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " g();\n" 7596bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "} finally {\n" 7606bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " h();\n" 7616bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines "}"); 762176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 763176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines // But, of course, "catch" is a perfectly fine function name in JavaScript. 764176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("someObject.catch();"); 7650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("someObject.new();"); 7660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("someObject.delete();"); 7676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 7686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 7696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, StringLiteralConcatenation) { 7706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var literal = 'hello ' +\n" 77187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " 'world';"); 7726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 7736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 7746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, RegexLiteralClassification) { 7756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // Regex literals. 7766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /abc/;"); 7776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("f(/abc/);"); 7786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("f(abc, /abc/);"); 7796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("some_map[/abc/];"); 7806bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = a ? /abc/ : /abc/;"); 7816bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("for (var i = 0; /abc/.test(s[i]); i++) {\n}"); 7826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = !/abc/.test(y);"); 7836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = a && /abc/.test(y);"); 7846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = a || /abc/.test(y);"); 7856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var x = a + /abc/.search(y);"); 78687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("/abc/.search(y);"); 7876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regexs = {/abc/, /abc/};"); 7886bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("return /abc/;"); 7896bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 7906bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines // Not regex literals. 7916bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var a = a / 2 + b / 3;"); 79287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var a = a++ / 2;"); 79387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Prefix unary can operate on regex literals, not that it makes sense. 79487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var a = ++/a/;"); 79587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 79687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // This is a known issue, regular expressions are incorrectly detected if 79787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // directly following a closing parenthesis. 79887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("if (foo) / bar /.exec(baz);"); 7996bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 8006bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 8016bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, RegexLiteralSpecialCharacters) { 802b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var regex = /=/;"); 8036bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a*/;"); 8046bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a+/;"); 8056bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a?/;"); 8066bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /.a./;"); 8076bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a\\*/;"); 8086bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /^a$/;"); 8096bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\/a/;"); 8106bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /(?:x)/;"); 8116bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /x(?=y)/;"); 8126bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /x(?!y)/;"); 8136bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /x|y/;"); 8146bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a{2}/;"); 8156bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a{1,3}/;"); 81687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 8176bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /[abc]/;"); 8186bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /[^abc]/;"); 8196bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /[\\b]/;"); 82087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /[/]/;"); 82187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /[\\/]/;"); 82287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /\\[/;"); 82387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /\\\\[/]/;"); 82487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /}[\"]/;"); 82587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /}[/\"]/;"); 82687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /}[\"/]/;"); 82787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 8286bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\b/;"); 8296bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\B/;"); 8306bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\d/;"); 8316bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\D/;"); 8326bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\f/;"); 8336bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\n/;"); 8346bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\r/;"); 8356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\s/;"); 8366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\S/;"); 8376bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\t/;"); 8386bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\v/;"); 8396bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\w/;"); 8406bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\W/;"); 8416bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /a(a)\\1/;"); 8426bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\0/;"); 8436bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\\\/g;"); 8446bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\\a\\\\/g;"); 8456bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /\a\\//g;"); 846176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines verifyFormat("var regex = /a\\//;\n" 847176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines "var x = 0;"); 8484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var regex = /'/g;", "var regex = /'/g ;"); 8494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var regex = /'/g; //'", "var regex = /'/g ; //'"); 8504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var regex = /\\/*/;\n" 8514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = 0;", 8524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var regex = /\\/*/;\n" 8534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x=0;"); 8544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = /a\\//;", "var x = /a\\// \n;"); 85587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = /\"/;", getGoogleJSStyleWithColumns(16)); 85687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex =\n" 85787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " /\"/;", 85887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(15)); 85987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regex = //\n" 86087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " /a/;"); 86187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var regexs = [\n" 86287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " /d/, //\n" 86387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " /aa/, //\n" 86487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "];"); 8656bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 8666bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 8676bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, RegexLiteralModifiers) { 8686bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /abc/g;"); 8696bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /abc/i;"); 8706bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /abc/m;"); 8716bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /abc/y;"); 8726bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 8736bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 8746bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, RegexLiteralLength) { 8756bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/;", 8766bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines getGoogleJSStyleWithColumns(60)); 8776bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex =\n" 8786bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines " /aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/;", 8796bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines getGoogleJSStyleWithColumns(60)); 8800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var regex = /\\xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/;", 8810e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(50)); 8826bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 8836bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 8846bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen HinesTEST_F(FormatTestJS, RegexLiteralExamples) { 8856bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines verifyFormat("var regex = search.match(/(?:\?|&)times=([^?&]+)/i);"); 8866bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines} 8876bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines 8880e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, TypeAnnotations) { 8890e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x: string;"); 8904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x: {a: string; b: number;} = {};"); 8910e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("function x(): string {\n return 'x';\n}"); 892b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function x(): {x: string} {\n return {x: 'x'};\n}"); 8930e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("function x(y: string): string {\n return 'x';\n}"); 8940e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("for (var y: string in x) {\n x();\n}"); 8954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("for (var y: string of x) {\n x();\n}"); 8964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function x(y: {a?: number;} = {}): number {\n" 8974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return 12;\n" 8984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 8990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("((a: string, b: number): string => a + b);"); 9000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x: (y: number) => string;"); 9010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x: P<string, (a: number) => string>;"); 902b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {y: function(): z { return 1; }};"); 903b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = {y: function(): {a: number} { return 1; }};"); 9044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function someFunc(args: string[]):\n" 9054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " {longReturnValue: string[]} {}", 9064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(60)); 9074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 9084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 9094967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, UnionIntersectionTypes) { 9104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: A|B = A | B;"); 9114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: A&B|C = A & B;"); 9124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: Foo<A|B> = new Foo<A|B>();"); 9134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function(x: A|B): C&D {}"); 9144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function(x: A|B = A | B): C&D {}"); 9154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function x(path: number|string) {}"); 9164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("function x(): string|number {}"); 9174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type Foo = Bar|Baz;"); 9184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type Foo = Bar<X>|Baz;"); 9194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type Foo = (Bar<X>|Baz);"); 9204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: Bar|Baz;"); 9214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: Bar<X>|Baz;"); 9224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x: (Foo|Bar)[];"); 9230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 9240e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 9250e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, ClassDeclarations) { 9260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n x: string = 12;\n}"); 9270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n x(): string => 12;\n}"); 9280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n ['x' + 2]: string = 12;\n}"); 9290e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n private x: string = 12;\n}"); 9300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n private static x: string = 12;\n}"); 9310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n static x(): string { return 'asd'; }\n}"); 9320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C extends P implements I {}"); 93358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("class C extends p.P implements i.I {}"); 93487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("class Test {\n" 93587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaaa):\n" 93687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaa {}\n" 93787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}"); 9384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("foo = class Name {\n" 9394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " constructor() {}\n" 9404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};"); 9414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("foo = class {\n" 9424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " constructor() {}\n" 9434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};"); 9444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("class C {\n" 9454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " x: {y: Z;} = {};\n" 9464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " private y: {y: Z;} = {};\n" 9474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 948b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 949b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // ':' is not a type declaration here. 950b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("class X {\n" 951b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " subs = {\n" 952b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " 'b': {\n" 953b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " 'c': 1,\n" 954b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " },\n" 955b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " };\n" 956b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}"); 9574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("@Component({\n" 9584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " moduleId: module.id,\n" 9594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "})\n" 9604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class SessionListComponent implements OnDestroy, OnInit {\n" 9614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 962b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar} 963b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 964b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga NainarTEST_F(FormatTestJS, InterfaceDeclarations) { 965b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("interface I {\n" 966b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " x: string;\n" 9674967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " enum: string[];\n" 9684967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " enum?: string[];\n" 969b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}\n" 970b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "var y;"); 97187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar // Ensure that state is reset after parsing the interface. 97287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("interface a {}\n" 97387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "export function b() {}\n" 97487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "var x;"); 9754967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 9764967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Arrays of object type literals. 9774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("interface I {\n" 9784967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " o: {}[];\n" 9794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 98087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 98187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 98287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestJS, EnumDeclarations) { 98387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("enum Foo {\n" 98487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " A = 1,\n" 98587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " B\n" 98687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}"); 98787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("export /* somecomment*/ enum Foo {\n" 98887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " A = 1,\n" 98987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " B\n" 99087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}"); 99187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("enum Foo {\n" 99287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " A = 1, // comment\n" 99387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " B\n" 99487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "}\n" 99587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar "var x = 1;"); 9960e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 9970e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 9980e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, MetadataAnnotations) { 9990e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("@A\nclass C {\n}"); 10000e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("@A({arg: 'value'})\nclass C {\n}"); 10010e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("@A\n@B\nclass C {\n}"); 10020e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n @A x: string;\n}"); 10030e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class C {\n" 10040e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " @A\n" 10050e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " private x(): string {\n" 10060e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " return 'y';\n" 10070e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " }\n" 10080e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "}"); 10094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("class C {\n" 10104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " private x(@A x: string) {}\n" 10114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 10120e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("class X {}\n" 10130e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "class Y {}"); 10140e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 10150e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 10164967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, TypeAliases) { 10174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type X = number;\n" 10184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class C {}"); 10194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type X<Y> = Z<Y>;"); 10204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("type X = {\n" 10214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " y: number\n" 10224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};\n" 10234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "class C {}"); 10244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 10254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 10260e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, Modules) { 10270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("import SomeThing from 'some/module.js';"); 10280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("import {X, Y} from 'some/module.js';"); 10294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import a, {X, Y} from 'some/module.js';"); 10304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import {X, Y,} from 'some/module.js';"); 10310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("import {X as myLocalX, Y as myLocalY} from 'some/module.js';"); 10324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Ensure Automatic Semicolon Insertion does not break on "as\n". 10334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import {X as myX} from 'm';", "import {X as\n" 10344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " myX} from 'm';"); 10350e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("import * as lib from 'some/module.js';"); 10363ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("var x = {import: 1};\nx.import = 2;"); 10370e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 10380e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export function fn() {\n" 10390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " return 'fn';\n" 10400e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "}"); 1041b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("export function A() {}\n" 1042b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "export default function B() {}\n" 1043b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "export function C() {}"); 10444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export default () => {\n" 10454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " let x = 1;\n" 10464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return x;\n" 10474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 10480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export const x = 12;"); 10490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export default class X {}"); 10500e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export {X, Y} from 'some/module.js';"); 10514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export {X, Y,} from 'some/module.js';"); 10524967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export {SomeVeryLongExport as X, " 10534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "SomeOtherVeryLongExport as Y} from 'some/module.js';"); 10544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // export without 'from' is wrapped. 10554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export let someRatherLongVariableName =\n" 10564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " someSurprisinglyLongVariable + someOtherRatherLongVar;"); 10574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // ... but not if from is just an identifier. 10580e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export {\n" 10594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " from as from,\n" 10604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " someSurprisinglyLongVariable as\n" 10614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " from\n" 10624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "};", 10634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(20)); 10640e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export class C {\n" 10650e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " x: number;\n" 10660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " y: string;\n" 10670e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "}"); 10680e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export class X { y: number; }"); 10694967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export abstract class X { y: number; }"); 10700e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export default class X { y: number }"); 10710e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export default function() {\n return 1;\n}"); 10720e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export var x = 12;"); 1073b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("class C {}\n" 1074b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "export function f() {}\n" 1075b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "var v;"); 10760e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export var x: number = 12;"); 10770e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("export const y = {\n" 10780e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " a: 1,\n" 10790e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " b: 2\n" 10800e2c34f92f00628d48968dfea096d36381f494cbStephen Hines "};"); 1081b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("export enum Foo {\n" 1082b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " BAR,\n" 1083b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " // adsdasd\n" 1084b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " BAZ\n" 1085b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}"); 10864967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export default [\n" 10874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" 10884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n" 10894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 10904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export default [];"); 10914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export default () => {};"); 10924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export interface Foo { foo: number; }\n" 10934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "export class Bar {\n" 10944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " blah(): string { return this.blah; };\n" 10954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 10964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 10974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 10984967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, ImportWrapping) { 10994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import {VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying," 11004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " VeryLongImportsAreAnnoying, VeryLongImportsAreAnnoying" 11014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} from 'some/module.js';"); 11024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle Style = getGoogleJSStyleWithColumns(80); 11034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style.JavaScriptWrapImports = true; 11044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import {\n" 11054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " VeryLongImportsAreAnnoying,\n" 11064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " VeryLongImportsAreAnnoying,\n" 11074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " VeryLongImportsAreAnnoying,\n" 11084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} from 'some/module.js';", 11094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style); 11104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("import {\n" 11114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " A,\n" 11124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " A,\n" 11134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} from 'some/module.js';", 11144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style); 11154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("export {\n" 11164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " A,\n" 11174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " A,\n" 11184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "} from 'some/module.js';", 11194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar Style); 11200e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 11210e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 11220e2c34f92f00628d48968dfea096d36381f494cbStephen HinesTEST_F(FormatTestJS, TemplateStrings) { 11230e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // Keeps any whitespace/indentation within the template string. 11244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `hello\n" 11250e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${ name }\n" 11260e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " !`;", 11274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = `hello\n" 11280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${ name }\n" 11294967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " !`;"); 11300e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 11310e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x =\n" 11320e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " `hello ${world}` >= some();", 11330e2c34f92f00628d48968dfea096d36381f494cbStephen Hines getGoogleJSStyleWithColumns(34)); // Barely doesn't fit. 11340e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x = `hello ${world}` >= some();", 113587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(35)); // Barely fits. 11364967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `hellö ${wörld}` >= söme();", 11374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(35)); // Fits due to UTF-8. 11384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `hello\n" 11390e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${world}` >=\n" 114087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " some();", 11414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n" 11420e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " `hello\n" 11430e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${world}` >= some();", 11444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(21)); // Barely doesn't fit. 11454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `hello\n" 11460e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${world}` >= some();", 11474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n" 11480e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " `hello\n" 11490e2c34f92f00628d48968dfea096d36381f494cbStephen Hines " ${world}` >= some();", 11504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(22)); // Barely fits. 11510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 115287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("var x =\n" 115387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " `h`;", 115487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(11)); 11554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x =\n `multi\n line`;", "var x = `multi\n line`;", 11564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(13)); 115787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa(\n" 115887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`);"); 11594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Repro for an obscure width-miscounting issue with template strings. 11604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat( 11614967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "someLongVariable =\n" 11624967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " " 11634967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "`${logPrefix[11]}/${logPrefix[12]}/${logPrefix[13]}${logPrefix[14]}`;", 11644967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "someLongVariable = " 11654967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "`${logPrefix[11]}/${logPrefix[12]}/${logPrefix[13]}${logPrefix[14]}`;"); 11660e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 1167b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // Make sure template strings get a proper ColumnWidth assigned, even if they 1168b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // are first token in line. 1169b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat( 1170b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "var a = aaaaaaaaaaaaaaaaaaaaaaaaaaaa ||\n" 117187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`;"); 1172b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar 11730e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // Two template strings. 11740e2c34f92f00628d48968dfea096d36381f494cbStephen Hines verifyFormat("var x = `hello` == `hello`;"); 117558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 117658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar // Comments in template strings. 11774967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `//a`;\n" 117858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "var y;", 11794967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n `//a`;\n" 11804967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y ;"); 11814967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `/*a`;\n" 11824967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y;", 11834967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n `/*a`;\n" 11844967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y;"); 1185b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar // Unterminated string literals in a template string. 1186b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = `'`; // comment with matching quote '\n" 1187b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "var y;"); 1188b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("var x = `\"`; // comment with matching quote \"\n" 1189b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "var y;"); 11904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("it(`'aaaaaaaaaaaaaaa `, aaaaaaaaa);", 11914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "it(`'aaaaaaaaaaaaaaa `, aaaaaaaaa) ;", 11924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(40)); 119358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar // Backticks in a comment - not a template string. 11944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 1 // `/*a`;\n" 11954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " ;", 11964967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n 1 // `/*a`;\n" 11974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " ;"); 11984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("/* ` */ var x = 1; /* ` */", "/* ` */ var x\n= 1; /* ` */"); 119958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar // Comment spans multiple template strings. 12004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = `/*a`;\n" 12014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y = ` */ `;", 12024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n `/*a`;\n" 12034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y =\n ` */ `;"); 120458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar // Escaped backtick. 12054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = ` \\` a`;\n" 12064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y;", 12074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = ` \\` a`;\n" 12084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var y;"); 12090e2c34f92f00628d48968dfea096d36381f494cbStephen Hines} 12100e2c34f92f00628d48968dfea096d36381f494cbStephen Hines 12114967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, CastSyntax) { 12124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = <type>foo;"); 12134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = foo as type;"); 12144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = (a + b) as\n" 12154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " LongTypeIsLong;", 12164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(20)); 12174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("foo = <Bar[]>[\n" 12184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " 1, //\n" 12194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " 2\n" 12204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "];"); 12214967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 12223ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 12233ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga NainarTEST_F(FormatTestJS, TypeArguments) { 12243ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("class X<Y> {}"); 12253ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("new X<Y>();"); 12263ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("foo<Y>(a);"); 12273ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("var x: X<Y>[];"); 12283ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar verifyFormat("class C extends D<E> implements F<G>, H<I> {}"); 1229b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function f(a: List<any> = null) {}"); 1230b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function f(): List<any> {}"); 123187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("function aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa():\n" 123287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb {}"); 123387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("function aaaaaaaaaa(\n" 123487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaa,\n" 123587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaa: aaaaaaaaaaaaaaaaaaa):\n" 123687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa {}"); 12373ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar} 12383ea9e33ea25e0c2b12db56418ba3f994eb662c04Pirama Arumuga Nainar 12394967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, UserDefinedTypeGuards) { 12404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat( 12414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "function foo(check: Object):\n" 12424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " check is {foo: string, bar: string, baz: string, foobar: string} {\n" 12434967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " return 'bar' in check;\n" 12444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}\n"); 12454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 12464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 124758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga NainarTEST_F(FormatTestJS, OptionalTypes) { 1248b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("function x(a?: b, c?, d?) {}"); 124958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("class X {\n" 125058878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " y?: z;\n" 125158878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar " z?;\n" 125258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar "}"); 1253b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("interface X {\n" 1254b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " y?(): z;\n" 1255b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}"); 1256b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar verifyFormat("constructor({aa}: {\n" 1257b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aa?: string,\n" 1258b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaa?: string,\n" 1259b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaaaaaaaaaaa?: boolean,\n" 1260b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar " aaaaaa?: List<string>\n" 1261b6d6993e6e6d3daf4d9876794254d20a134e37c2Pirama Arumuga Nainar "}) {}"); 126258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 126358878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 126458878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga NainarTEST_F(FormatTestJS, IndexSignature) { 126558878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar verifyFormat("var x: {[k: string]: v};"); 126658878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar} 126758878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar 126887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga NainarTEST_F(FormatTestJS, WrapAfterParen) { 126987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("xxxxxxxxxxx(\n" 127087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaa, aaa);", 127187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(20)); 127287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("xxxxxxxxxxx(\n" 127387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaa, aaa, aaa,\n" 127487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaa, aaa, aaa);", 127587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(20)); 127687d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("xxxxxxxxxxx(\n" 127787d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " aaaaaaaaaaaaaaaaaaaaaaaa,\n" 127887d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " function(x) {\n" 127987d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " y(); //\n" 128087d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " });", 128187d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar getGoogleJSStyleWithColumns(40)); 128287d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar verifyFormat("while (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa &&\n" 128387d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar " bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb) {\n}"); 128487d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar} 128587d948ecccffea9e9e37d0d053b246e2d6d6c47bPirama Arumuga Nainar 12864967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, JSDocAnnotations) { 12874967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("/**\n" 12884967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " * @export {this.is.a.long.path.to.a.Type}\n" 12894967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " */", 12904967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "/**\n" 12914967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " * @export {this.is.a.long.path.to.a.Type}\n" 12924967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " */", 12934967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(20)); 12944967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 12954967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 12964967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, RequoteStringsSingle) { 12974967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'foo';", "var x = \"foo\";"); 12984967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'fo\\'o\\'';", "var x = \"fo'o'\";"); 12994967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'fo\\'o\\'';", "var x = \"fo\\'o'\";"); 13004967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat( 13014967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x =\n" 13024967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " 'foo\\'';", 13034967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Code below is 15 chars wide, doesn't fit into the line with the 13044967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // \ escape added. 13054967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = \"foo'\";", getGoogleJSStyleWithColumns(15)); 13064967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Removes no-longer needed \ escape from ". 13074967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'fo\"o';", "var x = \"fo\\\"o\";"); 13084967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar // Code below fits into 15 chars *after* removing the \ escape. 13094967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'fo\"o';", "var x = \"fo\\\"o\";", 13104967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar getGoogleJSStyleWithColumns(15)); 13114967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("// clang-format off\n" 13124967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "let x = \"double\";\n" 13134967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// clang-format on\n" 13144967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "let x = 'single';\n", 13154967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// clang-format off\n" 13164967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "let x = \"double\";\n" 13174967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "// clang-format on\n" 13184967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "let x = \"single\";\n"); 13194967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13204967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 13214967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, RequoteStringsDouble) { 13224967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle DoubleQuotes = getGoogleStyle(FormatStyle::LK_JavaScript); 13234967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar DoubleQuotes.JavaScriptQuotes = FormatStyle::JSQS_Double; 13244967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = \"foo\";", DoubleQuotes); 13254967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = \"foo\";", "var x = 'foo';", DoubleQuotes); 13264967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = \"fo'o\";", "var x = 'fo\\'o';", DoubleQuotes); 13274967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13284967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 13294967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, RequoteStringsLeave) { 13304967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar FormatStyle LeaveQuotes = getGoogleStyle(FormatStyle::LK_JavaScript); 13314967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar LeaveQuotes.JavaScriptQuotes = FormatStyle::JSQS_Leave; 13324967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = \"foo\";", LeaveQuotes); 13334967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("var x = 'foo';", LeaveQuotes); 13344967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13354967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 13364967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, SupportShebangLines) { 13374967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("#!/usr/bin/env node\n" 13384967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = hello();", 13394967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "#!/usr/bin/env node\n" 13404967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "var x = hello();"); 13414967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13424967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 13434967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, NonNullAssertionOperator) { 13444967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = foo!.bar();\n"); 13454967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = foo ? bar! : baz;\n"); 13464967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = !foo;\n"); 13474967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = foo[0]!;\n"); 13484967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = (foo)!;\n"); 13494967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("let x = {foo: 1}!;\n"); 13504967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13514967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 13524967a710c84587c654b56c828382219c3937dacbPirama Arumuga NainarTEST_F(FormatTestJS, Conditional) { 13534967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("y = x ? 1 : 2;"); 13544967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("x ? 1 : 2;"); 13554967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar verifyFormat("class Foo {\n" 13564967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " field = true ? 1 : 2;\n" 13574967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar " method(a = true ? 1 : 2) {}\n" 13584967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar "}"); 13594967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar} 13604967a710c84587c654b56c828382219c3937dacbPirama Arumuga Nainar 1361651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace tooling 1362651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines} // end namespace clang 1363