Best Testsigma code snippet using com.testsigma.automator.runners.TestcaseRunner.resetThreadContextData
Source:TestsuiteRunner.java
...123 , TestSuiteResult testSuiteResult) {124 ThreadContext.put("TEST_SUITE", testSuiteEntity.getId() + "");125 ThreadContext.put("TEST_SUITE_RESULT", testSuiteResult.getId() + "");126 }127 private void resetThreadContextData() {128 ThreadContext.put("TEST_SUITE", "");129 ThreadContext.put("TEST_SUITE_RESULT", "");130 }131 private void runSuite(TestSuiteEntity testSuiteEntity, TestSuiteResult testSuiteResult) throws AutomatorException {132 resetThreadContextData();133 populateThreadContextData(testSuiteEntity, testSuiteResult);134 log.debug("Running test suite - " + testSuiteEntity.getName());135 if (!testDeviceEntity.getCreateSessionAtCaseLevel()) {136 restartCurrentSession(testSuiteResult);137 }138 List<TestCaseEntity> testCaseEntityList = testSuiteEntity.getTestCases();139 List<TestCaseResult> testCasesResult = new ArrayList<>();140 testSuiteResult.setTestCaseResults(testCasesResult);141 testSuiteResult.setResult(ResultConstant.SUCCESS);142 boolean executionStarted = false;143 for (TestCaseEntity testCaseEntity : testCaseEntityList) {144 boolean testCaseRunFailed = false;145 boolean testCasePrerequisiteFailed = false;146 TestCaseResult testCaseResult = new TestCaseResult(testCaseEntity.getId());147 try {148 testCaseResult.setId(testCaseEntity.getTestCaseResultId());149 testCaseResult.setEnvRunId(testSuiteEntity.getEnvironmentResultId());150 testCaseResult.setGroupResultId(testSuiteEntity.getResultId());151 testCaseResult.setGroupId(testSuiteEntity.getId());152 testCaseResult.setTestCaseId(testCaseEntity.getId());153 testCaseResult.setTestDataSetName(testCaseEntity.getTestDataSetName());154 testCaseResult.setTestDataId(testCaseEntity.getTestDataId());155 testCaseResult.setIsStepGroup(testCaseEntity.getIsStepGroup());156 testCaseResult.setDataDriven(testCaseEntity.getIsDataDriven());157 testCaseResult.setStartTime(new Timestamp(System.currentTimeMillis()));158 testCasesResult.add(testCaseResult);159 testCaseResult.setVisualTestingEnabled(testPlanRunSettingEntity.isVisualTestingEnabled());160 testcaseResultMap.put(testCaseEntity.getId(), testCaseResult);161 if (skipExecution) {162 testCaseResult.setMessage(resultFailureMessage);163 } else if (hasPreRequisite(testCaseEntity)) {164 testCasePrerequisiteFailed = checkTestCasePrerequisiteFailure(testCaseEntity, testCaseResult);165 }166 try {167 if (!testCaseEntity.getIsDataDriven()) {168 testCaseEntity = getTestCase(testCaseEntity, this.testCaseFetchMaxTries);169 new ErrorUtil().checkError(testCaseEntity.getErrorCode(), testCaseEntity.getMessage());170 }171 } catch (TestsigmaNoParallelRunException e) {172 log.error(e.getMessage(), e);173 testCaseRunFailed = true;174 resultFailureMessage = e.getMessage();175 testCaseResult.setResult(ResultConstant.STOPPED);176 testCaseResult.setMessage(resultFailureMessage);177 } catch (AutomatorException e) {178 log.error(e.getMessage(), e);179 testCaseRunFailed = true;180 resultFailureMessage = e.getMessage();181 testCaseResult.setResult(ResultConstant.FAILURE);182 testCaseResult.setMessage(resultFailureMessage);183 }184 if (!testCaseRunFailed) {185 if (ExecutionEnvironmentRunner.isRunning()) {186 testSuiteResult.setSessionCreatedOn(new Timestamp(System.currentTimeMillis()));187 if (testCaseEntity.getIsDataDriven()) {188 runDataDrivenTestCase(testCaseEntity, testCaseResult, false, testCasePrerequisiteFailed);189 } else {190 new TestcaseRunner(testCaseEntity, testCaseResult, mapStepResult,191 skipExecution || testCasePrerequisiteFailed, resultFailureMessage)192 .run();193 }194 executionStarted = true;195 } else {196 testCaseResult.setResult(ResultConstant.STOPPED);197 testCaseResult.setMessage(AutomatorMessages.MSG_USER_ABORTED_EXECUTION);198 testCaseResult.setEndTime(new Timestamp(System.currentTimeMillis()));199 postTestcaseResult(testCaseResult);200 break;201 }202 }203 testCaseResult.setEndTime(new Timestamp(System.currentTimeMillis()));204 postTestcaseResult(testCaseResult);205 } catch (Exception ex) {206 log.error("Unhandled exception while processing test case");207 log.error(ex.getMessage(), ex);208 testCaseResult.setResult(ResultConstant.ABORTED);209 testCaseResult.setMessage(ex.getMessage());210 try {211 postTestcaseResult(testCaseResult);212 } catch (Exception e) {213 log.error("Unhandled exception while posting test case results");214 log.error(e.getMessage(), e);215 }216 }217 if (testCaseResult.getResult().getId() > testSuiteResult.getResult().getId()) {218 testSuiteResult.setResult(testCaseResult.getResult());219 }220 }221 testSuiteResult.setSessionCompletedOn(new Timestamp(System.currentTimeMillis()));222 testSuiteResult.setEndTime(new Timestamp(System.currentTimeMillis()));223 if (testSuiteResult.getResult() == ResultConstant.SUCCESS) {224 testSuiteResult.setMessage(AutomatorMessages.MSG_GROUP_SUCCESS);225 } else if (StringUtils.isBlank(testSuiteResult.getMessage())) {226 testSuiteResult.setMessage(AutomatorMessages.MSG_GROUP_FAILED);227 }228 resetThreadContextData();229 }230 private void restartCurrentSession(TestSuiteResult testSuiteResult) {231 if (workspaceType.equals(WorkspaceType.Rest)) {232 return;233 }234 DriverManager driverManager = DriverManager.getDriverManager();235 if (driverManager.isRestart() && (driverManager.getRestartSessionId() != null)) {236 try {237 log.info("Found that driver session restarted while executing a test suite. Storing session ID " +238 "in test suite result tables. Test Suite Result - " + testSuiteResult.getId());239 driverManager.storeSessionId(DriverSessionType.TEST_SUITE_SESSION, testSuiteResult.getId());240 } catch (Exception e) {241 log.error(e.getMessage(), e);242 }...
Source:TestcaseRunner.java
...61 private void populateThreadContextData() {62 ThreadContext.put("TEST_CASE", testCaseEntity.getId() + "");63 ThreadContext.put("TEST_CASE_RESULT", testCaseResult.getId() + "");64 }65 private void resetThreadContextData() {66 ThreadContext.put("TEST_CASE", "");67 ThreadContext.put("TEST_CASE_RESULT", "");68 }69 public TestCaseResult run() throws Exception {70 resetThreadContextData();71 populateThreadContextData();72 log.info("Running testcase - " + testCaseEntity.getTestCaseName());73 if (testDeviceEntity.getCreateSessionAtCaseLevel()) {74 startSession();75 } else {76 restartCurrentSession();77 }78 environmentRunResult.setSessionCreatedOn(new Timestamp(System.currentTimeMillis()));79 ResultConstant result = ResultConstant.SUCCESS;80 List<TestCaseStepEntity> stepList = testCaseEntity.getTestSteps();81 List<TestCaseStepResult> testCaseStepsResult = new ArrayList<>();82 testCaseResult.setTestCaseStepResults(testCaseStepsResult);83 testCaseResult.setIsStepGroup(testCaseEntity.getIsStepGroup());84 testCaseResult.setDataDriven(testCaseEntity.getIsDataDriven());85 testCaseResult.setTestPlanResultId(testDeviceEntity.getExecutionRunId());86 testCaseResult.setTestCaseName(testCaseEntity.getTestCaseName());87 try {88 HashMap<Long, TestCaseStepResult> parentStatus = new HashMap<>();89 int currentIndex = 0;90 testCaseResult.setCurrentIndex(currentIndex);91 int lastStep = stepList.size() - 1;92 ScreenCaptureUtil screenCaptureUtil = new ScreenCaptureUtil(new ArrayList<>());93 for (int i = 0; i < stepList.size(); i++) {94 TestCaseStepEntity testCaseStepEntity = stepList.get(i);95 TestCaseStepResult testCaseStepResult = new TestCaseStepResult();96 testCaseStepResult.setTestCaseStepId(testCaseStepEntity.getId());97 testCaseStepResult.setSkipExe(skipExecution);98 testCaseStepResult.setSkipMessage(resultFailureMessage);99 /* if (!skipExecution && (workspaceType.equals(WorkspaceType.WebApplication) || workspaceType100 .equals(WorkspaceType.MobileWeb))) {101 url = getUrl();102 }*/103 boolean skipGetUrl = false;104 if (testCaseStepEntity.getAction() != null) {105 skipGetUrl = Arrays.asList(SKIP_GETURL).stream().filter(action -> testCaseStepEntity.getAction().contains(action)).count() > 0;106 }107 TestStepType type = testCaseStepEntity.getType();108 TestcaseStepRunner testcaseStepRunner =109 new TestcaseStepRunnerFactory().getRunner(this.workspaceType, testDeviceSettings.getOs(), type);110 TestCaseStepResult parentResult = parentStatus.get(testCaseStepEntity.getParentId());111 RunnerUtil util = new RunnerUtil();112 boolean isFailure =113 util.canSkipNormalStep(parentResult, testCaseStepEntity, testCaseStepResult)114 || util.nestedConditionalStep(parentResult, testCaseStepEntity, testCaseStepResult)115 || util.canSkipIfElse(parentResult, testCaseStepEntity, testCaseStepResult)116 || util.canSkipIfElseIf(parentResult, testCaseStepEntity, testCaseStepResult)117 || util.canSkipElseIfElseIf(parentResult, testCaseStepEntity, testCaseStepResult)118 || util.canSkipElseIfElse(parentResult, testCaseStepEntity, testCaseStepResult)119 || util.canSkipIfCondition(parentResult, testCaseStepEntity, testCaseStepResult)120 || util.canSkipForLoop(parentResult, testCaseStepEntity, testCaseStepResult);121 log.info(new ObjectMapperService().convertToJson(testCaseStepEntity));122 int stepResultUpdateSize = 10;123 if (!skipExecution && isFailure) {124 parentStatus.put(testCaseStepEntity.getId(), testCaseStepResult);125 testCaseStepResult.setResult(ResultConstant.NOT_EXECUTED);126 int processedSteps = processedStepCount(testCaseStepsResult);127 if (processedSteps % stepResultUpdateSize == 0) {128 testCaseResult.setTestCaseStepResults(testCaseStepsResult);129 postTestcaseResult();130 currentIndex = +stepResultUpdateSize;131 processedSteps = 0;132 testCaseStepsResult = new ArrayList<>();133 testCaseResult.setCurrentIndex(currentIndex);134 }135 if (screenCaptureUtil.screenshots.size() > 0 && (lastStep == i)) {136 log.debug("Screenshots task for :::" + testCaseStepResult);137 final String requestId = ThreadContext.get("X-Request-Id");138 UploadThreadPool.getInstance().upload(new ScreenshotUploadTask(screenCaptureUtil.screenshots, requestId, testDeviceEntity));139 screenCaptureUtil.screenshots = new ArrayList<>();140 }141 testCaseStepResult = testcaseStepRunner142 .run(testCaseStepEntity, testCaseStepResult, mapStepResult, testCaseResult, parentStatus,143 false, false, screenCaptureUtil);144 testCaseStepsResult.add(testCaseStepResult);145 mapStepResult.put(testCaseStepEntity.getId(), testCaseStepResult);146 continue;147 }148 testCaseStepResult = testcaseStepRunner149 .run(testCaseStepEntity, testCaseStepResult, mapStepResult, testCaseResult, parentStatus,150 false, false, screenCaptureUtil);151 if (screenCaptureUtil.screenshots.size() == SAVE_BATCH_IMAGES || (lastStep == i)) {152 final String requestId = ThreadContext.get("X-Request-Id");153 UploadThreadPool.getInstance().upload(new ScreenshotUploadTask(screenCaptureUtil.screenshots, requestId, testDeviceEntity));154 screenCaptureUtil.screenshots = new ArrayList<>();155 }156 skipExecution = testCaseStepResult.getSkipExe();157 resultFailureMessage = testCaseStepResult.getSkipMessage();158 testCaseStepsResult.add(testCaseStepResult);159 mapStepResult.put(testCaseStepEntity.getId(), testCaseStepResult);160 TestCaseStepEntity stepGroup = null;161 TestCaseStepResult stepGroupResult = null;162 if (testCaseStepEntity.getStepGroupId() != null) {163 stepGroup = ((testCaseStepEntity.getTestCaseSteps() != null) && (testCaseStepEntity.getTestCaseSteps().size() > 0)) ?164 testCaseStepEntity.getTestCaseSteps().get(0) : null;165 stepGroupResult = ((testCaseStepResult.getStepResults() != null) && (testCaseStepResult.getStepResults().size() > 0)) ?166 testCaseStepResult.getStepResults().get(0) : null;167 }168 if (i == 0 && ((workspaceType == WorkspaceType.WebApplication) || (workspaceType169 == WorkspaceType.MobileWeb)) && (getUrl() != null) && !skipGetUrl && ((testCaseStepEntity.getStepGroupId() != null && stepGroup != null170 && (stepGroup.getStepGroupId() != null && !stepGroup.getAction().contains(AutomatorMessages.KEYWORD_GO_TO) && stepGroupResult171 .getResult() == ResultConstant.SUCCESS)) ||172 (testCaseStepEntity.getAction() != null && !testCaseStepEntity.getAction()173 .contains(AutomatorMessages.KEYWORD_GO_TO) && testCaseStepResult.getResult() == ResultConstant.SUCCESS))174 ) {175 } else if (i == (stepList.size() - 1) && !skipGetUrl && testCaseStepResult.getResult() == ResultConstant.SUCCESS176 && (workspaceType.equals(WorkspaceType.WebApplication) || workspaceType.equals(WorkspaceType.MobileWeb))) {177 ExecutionEnvironmentRunner.addUrl(testPlanId, testCaseEntity.getId(), getUrl());178 }179 //TODO:use check based step type180 if ((testCaseStepEntity.getConditionType() == null || testCaseStepEntity.getConditionType() == ConditionType.NOT_USED181 || ConditionType.LOOP_FOR == testCaseStepEntity.getConditionType()) && (!testCaseStepEntity.getStepDetails().getIgnoreStepResult()) ) {182 result = (result.getId() < testCaseStepResult.getResult().getId()) ? testCaseStepResult.getResult() : result;183 }184 int processedSteps = processedStepCount(testCaseStepsResult);185 if (processedSteps % stepResultUpdateSize == 0) {186 testCaseResult.setTestCaseStepResults(testCaseStepsResult);187 postTestcaseResult();188 currentIndex = +stepResultUpdateSize;189 processedSteps = 0;190 testCaseStepsResult = new ArrayList<>();191 testCaseResult.setCurrentIndex(currentIndex);192 }193 }194 testCaseResult.setTestCaseStepResults(testCaseStepsResult);195 } catch (Exception e) {196 log.error(e.getMessage(), e);197 }198 testCaseResult.setResult(ObjectUtils.defaultIfNull(testCaseResult.getResult(), result));199 testCaseResult.setEndTime(new Timestamp(System.currentTimeMillis()));200 if ((testCaseResult.getResult() == ResultConstant.SUCCESS) && (result == ResultConstant.SUCCESS)) {201 testCaseResult.setMessage(AutomatorMessages.MSG_TEST_CASE_SUCCESS);202 } else if (StringUtils.isBlank(testCaseResult.getMessage())) {203 testCaseResult.setMessage(AutomatorMessages.MSG_TEST_CASE_FAILURE);204 }205 // check for browser closed condition206 if (testCaseResult.getResult() != ResultConstant.SUCCESS) {207 if (ErrorCodes.BROWSER_CLOSED.equals(testCaseResult.getErrorCode())) {208 DriverManager.getDriverManager().setRestartDriverSession(Boolean.TRUE);209 }210 }211 if (testDeviceEntity.getCreateSessionAtCaseLevel()) {212 endSession();213 }214 resetThreadContextData();215 return testCaseResult;216 }217 private boolean startNewDriverSession() {218 boolean shouldStart = false;219 DriverManager driverManager = DriverManager.getDriverManager();220 String capabilityStr = hasDriverSession();221 String currentSessionId = DriverManager.getDriverManager().getDriver().getRemoteWebDriver().getSessionId().toString();222 if (driverManager != null) {223 shouldStart = driverManager.getRestartDriverSession() || currentSessionId == null224 || (currentSessionId != null && capabilityStr == null);225 }226 return shouldStart;227 }228 public String getUrl() {...
resetThreadContextData
Using AI Code Generation
1import com.testsigma.automator.runners.TestcaseRunner;2import com.testsigma.automator.runners.TestcaseRunnerFactory;3import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;4import com.testsigma.automator.runners.TestcaseRunnerImpl;5import com.testsigma.automator.runners.TestcaseRunnerImpl;6import com.testsigma.automator.runners.TestcaseRunner;7import com.testsigma.automator.runners.TestcaseRunnerFactory;8import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;9import com.testsigma.automator.runners.TestcaseRunnerImpl;10import com.testsigma.automator.runners.TestcaseRunnerImpl;11import com.testsigma.automator.runners.TestcaseRunner;12import com.testsigma.automator.runners.TestcaseRunnerFactory;13import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;14import com.testsigma.automator.runners.TestcaseRunnerImpl;15import com.testsigma.automator.runners.TestcaseRunnerImpl;16import com.testsigma.automator.runners.TestcaseRunner;17import com.testsigma.automator.runners.TestcaseRunnerFactory;18import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;19import com.testsigma.automator.runners.TestcaseRunnerImpl;20import com.testsigma.automator.runners.TestcaseRunnerImpl;21import com.testsigma.automator.runners.TestcaseRunner;22import com.testsigma.automator.runners.TestcaseRunnerFactory;23import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;24import com.testsigma.automator.runners.TestcaseRunnerImpl;25import com.testsigma.automator.runners.TestcaseRunnerImpl;26import com.testsigma.automator.runners.TestcaseRunner;27import com.testsigma.automator.runners.TestcaseRunnerFactory;28import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;29import com.testsigma.automator.runners.TestcaseRunnerImpl;30import com.testsigma.automator.runners.TestcaseRunnerImpl;31import com.testsigma.automator.runners.TestcaseRunner;32import com.testsigma.automator.runners.TestcaseRunnerFactory;33import com.testsigma.automator.runners.TestcaseRunnerFactoryImpl;34import com.testsigma.automator.runners.TestcaseRunnerImpl;35import com.testsigma.automator.runners.TestcaseRunnerImpl;36import com.testsigma.automator.runners.TestcaseRunner;37import com.testsigma.automator.runners.Test
resetThreadContextData
Using AI Code Generation
1package com.testsigma.automator.runners;2import com.testsigma.automator.core.TestcaseRunner;3public class TestcaseRunnerTest {4 public static void main(String[] args) {5 TestcaseRunner.resetThreadContextData();6 }7}8package com.testsigma.automator.runners;9import com.testsigma.automator.core.TestcaseRunner;10public class TestcaseRunnerTest {11 public static void main(String[] args) {12 TestcaseRunner.resetThreadContextData();13 }14}15package com.testsigma.automator.runners;16import com.testsigma.automator.core.TestcaseRunner;17public class TestcaseRunnerTest {18 public static void main(String[] args) {19 TestcaseRunner.resetThreadContextData();20 }21}22package com.testsigma.automator.runners;23import com.testsigma.automator.core.TestcaseRunner;24public class TestcaseRunnerTest {25 public static void main(String[] args) {26 TestcaseRunner.resetThreadContextData();27 }28}29package com.testsigma.automator.runners;30import com.testsigma.automator.core.TestcaseRunner;31public class TestcaseRunnerTest {32 public static void main(String[] args) {33 TestcaseRunner.resetThreadContextData();34 }35}36package com.testsigma.automator.runners;37import com.testsigma.automator.core.TestcaseRunner;38public class TestcaseRunnerTest {39 public static void main(String[] args) {40 TestcaseRunner.resetThreadContextData();41 }42}43package com.testsigma.automator.runners;44import com.testsigma.automator.core.TestcaseRunner;
resetThreadContextData
Using AI Code Generation
1import com.testsigma.automator.runners.TestcaseRunner;2public class ResetThreadContextData {3 public static void main(String[] args) {4 TestcaseRunner testRunner = new TestcaseRunner();5 testRunner.resetThreadContextData();6 }7}8import com.testsigma.automator.runners.TestcaseRunner;9public class ResetThreadContextData {10 public static void main(String[] args) {11 TestcaseRunner testRunner = new TestcaseRunner();12 testRunner.resetThreadContextData();13 }14}15import com.testsigma.automator.runners.TestcaseRunner;16public class ResetThreadContextData {17 public static void main(String[] args) {18 TestcaseRunner testRunner = new TestcaseRunner();19 testRunner.resetThreadContextData();20 }21}22import com.testsigma.automator.runners.TestcaseRunner;23public class ResetThreadContextData {24 public static void main(String[] args) {25 TestcaseRunner testRunner = new TestcaseRunner();26 testRunner.resetThreadContextData();27 }28}29import com.testsigma.automator.runners.TestcaseRunner;30public class ResetThreadContextData {31 public static void main(String[] args) {32 TestcaseRunner testRunner = new TestcaseRunner();33 testRunner.resetThreadContextData();34 }35}36import com.testsigma.automator.runners.TestcaseRunner;37public class ResetThreadContextData {38 public static void main(String[] args) {39 TestcaseRunner testRunner = new TestcaseRunner();
resetThreadContextData
Using AI Code Generation
1package com.testsigma.automator.runners;2import org.testng.annotations.Test;3import com.testsigma.automator.core.TestcaseRunner;4public class TestResetThreadContextData {5public void testResetThreadContextData() {6TestcaseRunner.resetThreadContextData();7}8}9package com.testsigma.automator.runners;10import org.testng.annotations.Test;11import com.testsigma.automator.core.TestcaseRunner;12public class TestSetThreadContextData {13public void testSetThreadContextData() {14TestcaseRunner.setThreadContextData("key", "value");15}16}17package com.testsigma.automator.runners;18import org.testng.annotations.Test;19import com.testsigma.automator.core.TestcaseRunner;20public class TestGetThreadContextData {21public void testGetThreadContextData() {22TestcaseRunner.getThreadContextData("key");23}24}25package com.testsigma.automator.runners;26import org.testng.annotations.Test;27import com.testsigma.automator.core.TestcaseRunner;28public class TestGetThreadContextData {29public void testGetThreadContextData() {30TestcaseRunner.getThreadContextData();31}32}33package com.testsigma.automator.runners;34import org.testng.annotations.Test;35import com.testsigma.automator.core.TestcaseRunner;36public class TestGetThreadContextData {37public void testGetThreadContextData() {38TestcaseRunner.getThreadContextData("key");39}40}41package com.testsigma.automator.runners;42import org.testng.annotations.Test;43import
resetThreadContextData
Using AI Code Generation
1public void beforeMethod() {2 TestcaseRunner.resetThreadContextData();3}4public void beforeMethod() {5 TestcaseRunner.resetThreadContextData();6}7public void beforeMethod() {8 TestcaseRunner.resetThreadContextData();9}10public void beforeMethod() {11 TestcaseRunner.resetThreadContextData();12}13public void beforeMethod() {14 TestcaseRunner.resetThreadContextData();15}16public void beforeMethod() {17 TestcaseRunner.resetThreadContextData();18}19public void beforeMethod() {20 TestcaseRunner.resetThreadContextData();21}22public void beforeMethod() {23 TestcaseRunner.resetThreadContextData();24}
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!