From f3da09df0f4147223ab76a00a841586ccf11005d Mon Sep 17 00:00:00 2001 From: Hannes Ljungberg Date: Fri, 20 Mar 2020 23:08:32 +0100 Subject: Fixed #31396 -- Added binary XOR operator to F expressions. --- tests/expressions/tests.py | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py index da6e04e8fd..46fe6fa89d 100644 --- a/tests/expressions/tests.py +++ b/tests/expressions/tests.py @@ -6,7 +6,7 @@ from copy import deepcopy from unittest import mock from django.core.exceptions import FieldError -from django.db import DatabaseError, connection +from django.db import DatabaseError, NotSupportedError, connection from django.db.models import ( Avg, BooleanField, Case, CharField, Count, DateField, DateTimeField, DurationField, Exists, Expression, ExpressionList, ExpressionWrapper, F, @@ -1163,6 +1163,25 @@ class ExpressionOperatorTests(TestCase): self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 1764) self.assertEqual(Number.objects.get(pk=self.n.pk).float, Approximate(61.02, places=2)) + @unittest.skipIf(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.") + def test_lefthand_bitwise_xor(self): + Number.objects.update(integer=F('integer').bitxor(48)) + self.assertEqual(Number.objects.get(pk=self.n.pk).integer, 26) + self.assertEqual(Number.objects.get(pk=self.n1.pk).integer, -26) + + @unittest.skipIf(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.") + def test_lefthand_bitwise_xor_null(self): + employee = Employee.objects.create(firstname='John', lastname='Doe') + Employee.objects.update(salary=F('salary').bitxor(48)) + employee.refresh_from_db() + self.assertIsNone(employee.salary) + + @unittest.skipUnless(connection.vendor == 'oracle', "Oracle doesn't support bitwise XOR.") + def test_lefthand_bitwise_xor_not_supported(self): + msg = 'Bitwise XOR is not supported in Oracle.' + with self.assertRaisesMessage(NotSupportedError, msg): + Number.objects.update(integer=F('integer').bitxor(48)) + def test_right_hand_addition(self): # Right hand operators Number.objects.filter(pk=self.n.pk).update(integer=15 + F('integer'), float=42.7 + F('float')) -- cgit v1.3