[3.7] bpo-34247: Fix Python 3.7 initialization (#8659) · python/cpython@0c90d6f (original) (raw)

`@@ -9,7 +9,7 @@

`

9

9

`import sys

`

10

10

``

11

11

``

12

``

`-

class EmbeddingTests(unittest.TestCase):

`

``

12

`+

class EmbeddingTestsMixin:

`

13

13

`def setUp(self):

`

14

14

`here = os.path.abspath(file)

`

15

15

`basepath = os.path.dirname(os.path.dirname(os.path.dirname(here)))

`

`@@ -110,6 +110,8 @@ def run_repeated_init_and_subinterpreters(self):

`

110

110

`yield current_run

`

111

111

`current_run = []

`

112

112

``

``

113

+

``

114

`+

class EmbeddingTests(EmbeddingTestsMixin, unittest.TestCase):

`

113

115

`def test_subinterps_main(self):

`

114

116

`for run in self.run_repeated_init_and_subinterpreters():

`

115

117

`main = run[0]

`

`@@ -247,5 +249,149 @@ def test_initialize_pymain(self):

`

247

249

`self.assertEqual(err, '')

`

248

250

``

249

251

``

``

252

`+

class InitConfigTests(EmbeddingTestsMixin, unittest.TestCase):

`

``

253

`+

maxDiff = 4096

`

``

254

`+

DEFAULT_CONFIG = {

`

``

255

`+

'install_signal_handlers': 1,

`

``

256

`+

'Py_IgnoreEnvironmentFlag': 0,

`

``

257

`+

'use_hash_seed': 0,

`

``

258

`+

'hash_seed': 0,

`

``

259

`+

'allocator': '(null)',

`

``

260

`+

'dev_mode': 0,

`

``

261

`+

'faulthandler': 0,

`

``

262

`+

'tracemalloc': 0,

`

``

263

`+

'import_time': 0,

`

``

264

`+

'show_ref_count': 0,

`

``

265

`+

'show_alloc_count': 0,

`

``

266

`+

'dump_refs': 0,

`

``

267

`+

'malloc_stats': 0,

`

``

268

`+

'utf8_mode': 0,

`

``

269

+

``

270

`+

'coerce_c_locale': 0,

`

``

271

`+

'coerce_c_locale_warn': 0,

`

``

272

+

``

273

`+

'program_name': './_testembed',

`

``

274

`+

'argc': 0,

`

``

275

`+

'argv': '[]',

`

``

276

`+

'program': '(null)',

`

``

277

+

``

278

`+

'Py_IsolatedFlag': 0,

`

``

279

`+

'Py_NoSiteFlag': 0,

`

``

280

`+

'Py_BytesWarningFlag': 0,

`

``

281

`+

'Py_InspectFlag': 0,

`

``

282

`+

'Py_InteractiveFlag': 0,

`

``

283

`+

'Py_OptimizeFlag': 0,

`

``

284

`+

'Py_DebugFlag': 0,

`

``

285

`+

'Py_DontWriteBytecodeFlag': 0,

`

``

286

`+

'Py_VerboseFlag': 0,

`

``

287

`+

'Py_QuietFlag': 0,

`

``

288

`+

'Py_NoUserSiteDirectory': 0,

`

``

289

`+

'Py_UnbufferedStdioFlag': 0,

`

``

290

+

``

291

`+

'_disable_importlib': 0,

`

``

292

`+

'Py_FrozenFlag': 0,

`

``

293

`+

}

`

``

294

+

``

295

`+

def check_config(self, testname, expected):

`

``

296

`+

env = dict(os.environ)

`

``

297

`+

for key in list(env):

`

``

298

`+

if key.startswith('PYTHON'):

`

``

299

`+

del env[key]

`

``

300

`+

Disable C locale coercion and UTF-8 mode to not depend

`

``

301

`+

on the current locale

`

``

302

`+

env['PYTHONCOERCECLOCALE'] = '0'

`

``

303

`+

env['PYTHONUTF8'] = '0'

`

``

304

`+

out, err = self.run_embedded_interpreter(testname, env=env)

`

``

305

`+

Ignore err

`

``

306

+

``

307

`+

expected = dict(self.DEFAULT_CONFIG, **expected)

`

``

308

`+

for key, value in expected.items():

`

``

309

`+

expected[key] = str(value)

`

``

310

+

``

311

`+

config = {}

`

``

312

`+

for line in out.splitlines():

`

``

313

`+

key, value = line.split(' = ', 1)

`

``

314

`+

config[key] = value

`

``

315

`+

self.assertEqual(config, expected)

`

``

316

+

``

317

`+

def test_init_default_config(self):

`

``

318

`+

self.check_config("init_default_config", {})

`

``

319

+

``

320

`+

def test_init_global_config(self):

`

``

321

`+

config = {

`

``

322

`+

'program_name': './globalvar',

`

``

323

`+

'Py_NoSiteFlag': 1,

`

``

324

`+

'Py_BytesWarningFlag': 1,

`

``

325

`+

'Py_InspectFlag': 1,

`

``

326

`+

'Py_InteractiveFlag': 1,

`

``

327

`+

'Py_OptimizeFlag': 2,

`

``

328

`+

'Py_DontWriteBytecodeFlag': 1,

`

``

329

`+

'Py_VerboseFlag': 1,

`

``

330

`+

'Py_QuietFlag': 1,

`

``

331

`+

'Py_UnbufferedStdioFlag': 1,

`

``

332

`+

'utf8_mode': 1,

`

``

333

`+

'Py_NoUserSiteDirectory': 1,

`

``

334

`+

'Py_FrozenFlag': 1,

`

``

335

`+

}

`

``

336

`+

self.check_config("init_global_config", config)

`

``

337

+

``

338

`+

def test_init_from_config(self):

`

``

339

`+

config = {

`

``

340

`+

'install_signal_handlers': 0,

`

``

341

`+

'use_hash_seed': 1,

`

``

342

`+

'hash_seed': 123,

`

``

343

`+

'allocator': 'malloc_debug',

`

``

344

`+

'tracemalloc': 2,

`

``

345

`+

'import_time': 1,

`

``

346

`+

'show_ref_count': 1,

`

``

347

`+

'show_alloc_count': 1,

`

``

348

`+

'malloc_stats': 1,

`

``

349

+

``

350

`+

'utf8_mode': 1,

`

``

351

+

``

352

`+

'program_name': './conf_program_name',

`

``

353

`+

'program': 'conf_program',

`

``

354

+

``

355

`+

'faulthandler': 1,

`

``

356

`+

}

`

``

357

`+

self.check_config("init_from_config", config)

`

``

358

+

``

359

`+

def test_init_env(self):

`

``

360

`+

config = {

`

``

361

`+

'use_hash_seed': 1,

`

``

362

`+

'hash_seed': 42,

`

``

363

`+

'allocator': 'malloc_debug',

`

``

364

`+

'tracemalloc': 2,

`

``

365

`+

'import_time': 1,

`

``

366

`+

'malloc_stats': 1,

`

``

367

`+

'utf8_mode': 1,

`

``

368

`+

'Py_InspectFlag': 1,

`

``

369

`+

'Py_OptimizeFlag': 2,

`

``

370

`+

'Py_DontWriteBytecodeFlag': 1,

`

``

371

`+

'Py_VerboseFlag': 1,

`

``

372

`+

'Py_UnbufferedStdioFlag': 1,

`

``

373

`+

'Py_NoUserSiteDirectory': 1,

`

``

374

`+

'faulthandler': 1,

`

``

375

`+

'dev_mode': 1,

`

``

376

`+

}

`

``

377

`+

self.check_config("init_env", config)

`

``

378

+

``

379

`+

def test_init_dev_mode(self):

`

``

380

`+

config = {

`

``

381

`+

'dev_mode': 1,

`

``

382

`+

'faulthandler': 1,

`

``

383

`+

'allocator': 'debug',

`

``

384

`+

}

`

``

385

`+

self.check_config("init_dev_mode", config)

`

``

386

+

``

387

`+

def test_init_isolated(self):

`

``

388

`+

config = {

`

``

389

`+

'Py_IsolatedFlag': 1,

`

``

390

`+

'Py_IgnoreEnvironmentFlag': 1,

`

``

391

`+

'Py_NoUserSiteDirectory': 1,

`

``

392

`+

}

`

``

393

`+

self.check_config("init_isolated", config)

`

``

394

+

``

395

+

250

396

`if name == "main":

`

251

397

`unittest.main()

`