this repo has no description
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