brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.8 KiB · 5d1af20 Raw
101 lines · cpp
1//===-- unittests/Runtime/Stop.cpp ------------------------------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8//9/// Test runtime API for STOP statement and runtime API to kill the program.10//11//===----------------------------------------------------------------------===//12 13#include "flang/Runtime/stop.h"14#include "CrashHandlerFixture.h"15#include "flang-rt/runtime/environment.h"16#include <cstdlib>17#include <gtest/gtest.h>18 19using namespace Fortran::runtime;20 21struct TestProgramEnd : CrashHandlerFixture {};22 23TEST(TestProgramEnd, StopTest) {24  EXPECT_EXIT(RTNAME(StopStatement)(), testing::ExitedWithCode(EXIT_SUCCESS),25      "Fortran STOP");26}27 28TEST(TestProgramEnd, StopTestNoStopMessage) {29  putenv(const_cast<char *>("NO_STOP_MESSAGE=1"));30  Fortran::runtime::executionEnvironment.Configure(31      0, nullptr, nullptr, nullptr);32  EXPECT_EXIT(33      RTNAME(StopStatement)(), testing::ExitedWithCode(EXIT_SUCCESS), "");34}35 36TEST(TestProgramEnd, StopMessageTest) {37  static const char *message{"bye bye"};38  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),39                  /*isErrorStop=*/false, /*quiet=*/false),40      testing::ExitedWithCode(EXIT_SUCCESS), "Fortran STOP: bye bye");41 42  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),43                  /*isErrorStop=*/false, /*quiet=*/true),44      testing::ExitedWithCode(EXIT_SUCCESS), "");45 46  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),47                  /*isErrorStop=*/true, /*quiet=*/false),48      testing::ExitedWithCode(EXIT_FAILURE), "Fortran ERROR STOP: bye bye");49 50  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),51                  /*isErrorStop=*/true, /*quiet=*/true),52      testing::ExitedWithCode(EXIT_FAILURE), "");53}54 55TEST(TestProgramEnd, NoStopMessageTest) {56  putenv(const_cast<char *>("NO_STOP_MESSAGE=1"));57  Fortran::runtime::executionEnvironment.Configure(58      0, nullptr, nullptr, nullptr);59  static const char *message{"bye bye"};60  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),61                  /*isErrorStop=*/false, /*quiet=*/false),62      testing::ExitedWithCode(EXIT_SUCCESS), "bye bye");63 64  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),65                  /*isErrorStop=*/false, /*quiet=*/true),66      testing::ExitedWithCode(EXIT_SUCCESS), "");67 68  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),69                  /*isErrorStop=*/true, /*quiet=*/false),70      testing::ExitedWithCode(EXIT_FAILURE), "Fortran ERROR STOP: bye bye");71 72  EXPECT_EXIT(RTNAME(StopStatementText)(message, std::strlen(message),73                  /*isErrorStop=*/true, /*quiet=*/true),74      testing::ExitedWithCode(EXIT_FAILURE), "");75}76 77TEST(TestProgramEnd, FailImageTest) {78  EXPECT_EXIT(79      RTNAME(FailImageStatement)(), testing::ExitedWithCode(EXIT_FAILURE), "");80}81 82TEST(TestProgramEnd, ExitTest) {83  EXPECT_EXIT(RTNAME(Exit)(), testing::ExitedWithCode(EXIT_SUCCESS), "");84  EXPECT_EXIT(85      RTNAME(Exit)(EXIT_FAILURE), testing::ExitedWithCode(EXIT_FAILURE), "");86}87 88TEST(TestProgramEnd, AbortTest) { EXPECT_DEATH(RTNAME(Abort)(), ""); }89 90TEST(TestProgramEnd, CrashTest) {91  static const std::string crashMessage{"bad user code"};92  static const std::string fileName{"file name"};93  static const std::string headMessage{"fatal Fortran runtime error\\("};94  static const std::string tailMessage{":343\\): "};95  static const std::string fullMessage{96      headMessage + fileName + tailMessage + crashMessage};97  EXPECT_DEATH(98      RTNAME(ReportFatalUserError)(crashMessage.c_str(), fileName.c_str(), 343),99      fullMessage.c_str());100}101