this repo has no description
at trunk 71 lines 2.2 kB view raw
1// Copyright (c) Facebook, Inc. and its affiliates. (http://www.facebook.com) 2#include "Python.h" 3#include "gtest/gtest.h" 4 5#include "capi-fixture.h" 6 7namespace py { 8namespace testing { 9 10TEST(MainExtensionApiTest, NoSiteZeroLoadsSite) { 11 resetPythonEnv(); 12 Py_NoSiteFlag = 0; 13 ::testing::internal::CaptureStdout(); 14 wchar_t arg0[] = L"python"; 15 wchar_t arg1[] = L"-c"; 16 wchar_t arg2[] = L"import sys; print('site' in sys.modules)"; 17 wchar_t* argv[] = {arg0, arg1, arg2}; 18 EXPECT_EQ(Py_Main(/*argc=*/3, argv), 0); 19 EXPECT_EQ(::testing::internal::GetCapturedStdout(), "True\n"); 20 EXPECT_EQ(Py_NoSiteFlag, 0); 21} 22 23TEST(MainExtensionApiTest, DashSDoesNotLoadSite) { 24 resetPythonEnv(); 25 Py_NoSiteFlag = 0; 26 ::testing::internal::CaptureStdout(); 27 wchar_t arg0[] = L"python"; 28 wchar_t arg1[] = L"-S"; 29 wchar_t arg2[] = L"-c"; 30 wchar_t arg3[] = L"import sys; print('site' in sys.modules)"; 31 wchar_t* argv[] = {arg0, arg1, arg2, arg3}; 32 EXPECT_EQ(Py_Main(/*argc=*/4, argv), 0); 33 EXPECT_EQ(::testing::internal::GetCapturedStdout(), "False\n"); 34 EXPECT_EQ(Py_NoSiteFlag, 1); 35} 36 37TEST(MainExtensionApiTest, RunModule) { 38 resetPythonEnv(); 39 ::testing::internal::CaptureStdout(); 40 wchar_t arg0[] = L"python"; 41 wchar_t arg1[] = L"-m"; 42 wchar_t arg2[] = L"textwrap"; 43 wchar_t* argv[] = {arg0, arg1, arg2}; 44 EXPECT_EQ(Py_Main(/*argc=*/3, argv), 0); 45 EXPECT_EQ(::testing::internal::GetCapturedStdout(), 46 "Hello there.\n This is indented.\n"); 47} 48 49TEST(MainExtensionApiTest, RunCommand) { 50 resetPythonEnv(); 51 ::testing::internal::CaptureStdout(); 52 wchar_t arg0[] = L"python"; 53 wchar_t arg1[] = L"-c"; 54 wchar_t arg2[] = L"print(40 * 40)"; 55 wchar_t* argv[] = {arg0, arg1, arg2}; 56 EXPECT_EQ(Py_Main(/*argc=*/3, argv), 0); 57 EXPECT_EQ(::testing::internal::GetCapturedStdout(), "1600\n"); 58} 59 60TEST(MainExtensionApiTest, StoresProgramNamePyro) { 61 resetPythonEnv(); 62 wchar_t arg0[] = L"not-python"; 63 wchar_t arg1[] = L"-c"; 64 wchar_t arg2[] = L"None"; 65 wchar_t* argv[] = {arg0, arg1, arg2}; 66 EXPECT_EQ(Py_Main(/*argc=*/3, argv), 0); 67 EXPECT_STREQ(Py_GetProgramName(), L"not-python"); 68} 69 70} // namespace testing 71} // namespace py