| 203 | |
| 204 | @isolated_context |
| 205 | def test_context_getset_1(self): |
| 206 | c = contextvars.ContextVar('c') |
| 207 | with self.assertRaises(LookupError): |
| 208 | c.get() |
| 209 | |
| 210 | self.assertIsNone(c.get(None)) |
| 211 | |
| 212 | t0 = c.set(42) |
| 213 | self.assertEqual(c.get(), 42) |
| 214 | self.assertEqual(c.get(None), 42) |
| 215 | self.assertIs(t0.old_value, t0.MISSING) |
| 216 | self.assertIs(t0.old_value, contextvars.Token.MISSING) |
| 217 | self.assertIs(t0.var, c) |
| 218 | |
| 219 | t = c.set('spam') |
| 220 | self.assertEqual(c.get(), 'spam') |
| 221 | self.assertEqual(c.get(None), 'spam') |
| 222 | self.assertEqual(t.old_value, 42) |
| 223 | c.reset(t) |
| 224 | |
| 225 | self.assertEqual(c.get(), 42) |
| 226 | self.assertEqual(c.get(None), 42) |
| 227 | |
| 228 | c.set('spam2') |
| 229 | with self.assertRaisesRegex(RuntimeError, 'has already been used'): |
| 230 | c.reset(t) |
| 231 | self.assertEqual(c.get(), 'spam2') |
| 232 | |
| 233 | ctx1 = contextvars.copy_context() |
| 234 | self.assertIn(c, ctx1) |
| 235 | |
| 236 | c.reset(t0) |
| 237 | with self.assertRaisesRegex(RuntimeError, 'has already been used'): |
| 238 | c.reset(t0) |
| 239 | self.assertIsNone(c.get(None)) |
| 240 | |
| 241 | self.assertIn(c, ctx1) |
| 242 | self.assertEqual(ctx1[c], 'spam2') |
| 243 | self.assertEqual(ctx1.get(c, 'aa'), 'spam2') |
| 244 | self.assertEqual(len(ctx1), 1) |
| 245 | self.assertEqual(list(ctx1.items()), [(c, 'spam2')]) |
| 246 | self.assertEqual(list(ctx1.values()), ['spam2']) |
| 247 | self.assertEqual(list(ctx1.keys()), [c]) |
| 248 | self.assertEqual(list(ctx1), [c]) |
| 249 | |
| 250 | ctx2 = contextvars.copy_context() |
| 251 | self.assertNotIn(c, ctx2) |
| 252 | with self.assertRaises(KeyError): |
| 253 | ctx2[c] |
| 254 | self.assertEqual(ctx2.get(c, 'aa'), 'aa') |
| 255 | self.assertEqual(len(ctx2), 0) |
| 256 | self.assertEqual(list(ctx2), []) |
| 257 | |
| 258 | @isolated_context |
| 259 | def test_context_getset_2(self): |