-
Notifications
You must be signed in to change notification settings - Fork 36
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changed testing framework (Pytest) #275
Merged
Merged
Changes from 13 commits
Commits
Show all changes
19 commits
Select commit
Hold shift + click to select a range
916056a
unittest to pytest
vishav1771 85a7756
Added CleanUp
vishav1771 65fcfc3
Added autouse
vishav1771 00cf456
Minor changes
vishav1771 e4b0b9c
Error Fix
vishav1771 afacf13
Error Fix
vishav1771 b6cc5e3
pyetst error fix
vishav1771 745d307
Changed Fixtures
vishav1771 e32d9fd
Removing Conflicts
vishav1771 e91cfb2
Error
vishav1771 8db5ec7
Formatting Issues
vishav1771 b9c8638
Minor Changes
vishav1771 1c4a2b2
Minor Changes
vishav1771 a31d567
typo
vishav1771 950fadc
typo
vishav1771 9b63363
typo :)
vishav1771 9938789
Modified README
vishav1771 06c8a77
Changes
vishav1771 8115f86
Minor Change
vishav1771 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,6 @@ | ||
# Copyright (c) 2018 The Regents of the University of Michigan | ||
# All rights reserved. | ||
# This software is licensed under the BSD 3-Clause License. | ||
import unittest | ||
import os | ||
import json | ||
import logging | ||
|
@@ -15,7 +14,8 @@ | |
from signac.errors import BufferException | ||
from signac.errors import BufferedFileError | ||
|
||
from test_project import BaseProjectTest | ||
from test_project import TestProjectBase | ||
import pytest | ||
|
||
|
||
PYPY = 'PyPy' in platform.python_implementation() | ||
|
@@ -38,87 +38,87 @@ | |
os.chmod(path, mode) | ||
|
||
|
||
@unittest.skipIf(PYPY, "Buffered mode not supported for PyPy.") | ||
class BufferedModeTest(BaseProjectTest): | ||
@pytest.mark.skipif(PYPY, reason="Buffered mode not supported for PyPy.") | ||
class TestBufferedMode(TestProjectBase): | ||
|
||
def test_enter_exit_buffered_mode(self): | ||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
with signac.buffered(): | ||
self.assertTrue(signac.is_buffered()) | ||
self.assertFalse(signac.is_buffered()) | ||
assert signac.is_buffered() | ||
assert not signac.is_buffered() | ||
|
||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
with signac.buffered(): | ||
self.assertTrue(signac.is_buffered()) | ||
assert signac.is_buffered() | ||
with signac.buffered(): | ||
self.assertTrue(signac.is_buffered()) | ||
self.assertTrue(signac.is_buffered()) | ||
self.assertFalse(signac.is_buffered()) | ||
assert signac.is_buffered() | ||
assert signac.is_buffered() | ||
assert not signac.is_buffered() | ||
|
||
def test_basic_and_nested(self): | ||
job = self.project.open_job(dict(a=0)) | ||
job.init() | ||
self.assertNotIn('a', job.doc) | ||
assert 'a' not in job.doc | ||
with signac.buffered(): | ||
self.assertNotIn('a', job.doc) | ||
assert 'a' not in job.doc | ||
job.doc.a = 0 | ||
self.assertEqual(job.doc.a, 0) | ||
self.assertEqual(job.doc.a, 0) | ||
assert job.doc.a == 0 | ||
assert job.doc.a == 0 | ||
|
||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, 0) | ||
assert job.doc.a == 0 | ||
job.doc.a = 1 | ||
self.assertEqual(job.doc.a, 1) | ||
assert job.doc.a == 1 | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, 1) | ||
assert job.doc.a == 1 | ||
job.doc.a = 2 | ||
self.assertEqual(job.doc.a, 2) | ||
self.assertEqual(job.doc.a, 2) | ||
self.assertEqual(job.doc.a, 2) | ||
assert job.doc.a == 2 | ||
assert job.doc.a == 2 | ||
assert job.doc.a == 2 | ||
|
||
def test_buffered_mode_force_write(self): | ||
with signac.buffered(force_write=False): | ||
with signac.buffered(force_write=False): | ||
pass | ||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
|
||
with signac.buffered(force_write=True): | ||
with signac.buffered(force_write=True): | ||
pass | ||
|
||
with self.assertRaises(Error): | ||
with pytest.raises(Error): | ||
with signac.buffered(): | ||
with signac.buffered(force_write=True): | ||
pass | ||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
|
||
def test_buffered_mode_force_write_with_file_modification(self): | ||
job = self.project.open_job(dict(a=0)) | ||
job.init() | ||
job.doc.a = True | ||
x = job.doc.a | ||
self.assertEqual(job.doc.a, x) | ||
with self.assertRaises(BufferedFileError): | ||
assert job.doc.a == x | ||
with pytest.raises(BufferedFileError): | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
sleep(1.0) | ||
with open(job.doc._filename, 'wb') as file: | ||
file.write(json.dumps({'a': x}).encode()) | ||
self.assertFalse(signac.is_buffered()) | ||
self.assertEqual(job.doc.a, x) | ||
assert not signac.is_buffered() | ||
assert job.doc.a == x | ||
|
||
with signac.buffered(force_write=True): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
sleep(1.0) | ||
with open(job.doc._filename, 'wb') as file: | ||
file.write(json.dumps({'a': x}).encode()) | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
|
||
@unittest.skipIf(not ABLE_TO_PREVENT_WRITE, 'unable to trigger permission error') | ||
@pytest.mark.skipif(not ABLE_TO_PREVENT_WRITE, reason='unable to trigger permission error') | ||
def test_force_write_mode_with_permission_error(self): | ||
job = self.project.open_job(dict(a=0)) | ||
job.init() | ||
|
@@ -128,42 +128,42 @@ def test_force_write_mode_with_permission_error(self): | |
mode = os.stat(path).st_mode | ||
logging.disable(logging.CRITICAL) | ||
try: | ||
self.assertEqual(job.doc.a, x) | ||
with self.assertRaises(BufferedFileError): | ||
assert job.doc.a == x | ||
with pytest.raises(BufferedFileError): | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
os.chmod(path, S_IREAD) # Trigger permissions error | ||
finally: | ||
logging.disable(logging.NOTSET) | ||
os.chmod(path, mode) | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
|
||
def test_buffered_mode_change_buffer_size(self): | ||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
with signac.buffered(buffer_size=12): | ||
self.assertTrue(signac.buffered()) | ||
self.assertEqual(signac.get_buffer_size(), 12) | ||
assert signac.buffered() | ||
assert signac.get_buffer_size() == 12 | ||
|
||
self.assertFalse(signac.is_buffered()) | ||
with self.assertRaises(TypeError): | ||
assert not signac.is_buffered() | ||
with pytest.raises(TypeError): | ||
with signac.buffered(buffer_size=True): | ||
pass | ||
|
||
self.assertFalse(signac.is_buffered()) | ||
assert not signac.is_buffered() | ||
with signac.buffered(buffer_size=12): | ||
self.assertTrue(signac.buffered()) | ||
self.assertEqual(signac.get_buffer_size(), 12) | ||
assert signac.buffered() | ||
assert signac.get_buffer_size() == 12 | ||
with signac.buffered(buffer_size=12): | ||
self.assertTrue(signac.buffered()) | ||
self.assertEqual(signac.get_buffer_size(), 12) | ||
assert signac.buffered() | ||
assert signac.get_buffer_size() == 12 | ||
|
||
self.assertFalse(signac.is_buffered()) | ||
with self.assertRaises(BufferException): | ||
assert not signac.is_buffered() | ||
with pytest.raises(BufferException): | ||
with signac.buffered(buffer_size=12): | ||
self.assertTrue(signac.buffered()) | ||
self.assertEqual(signac.get_buffer_size(), 12) | ||
assert signac.buffered() | ||
assert signac.get_buffer_size() == 12 | ||
with signac.buffered(buffer_size=14): | ||
pass | ||
|
||
|
@@ -175,77 +175,75 @@ def routine(): | |
job.doc.a = True | ||
|
||
for job in self.project: | ||
self.assertTrue(job.sp.a > 0) | ||
assert job.sp.a > 0 | ||
job.sp.a = - job.sp.a | ||
self.assertTrue(job.sp.a < 0) | ||
assert job.sp.a < 0 | ||
job2 = self.project.open_job(id=job.get_id()) | ||
self.assertTrue(job2.sp.a < 0) | ||
assert job2.sp.a < 0 | ||
job.sp.a = - job.sp.a | ||
self.assertTrue(job.sp.a > 0) | ||
assert job.sp.a > 0 | ||
job2 = self.project.open_job(id=job.get_id()) | ||
self.assertTrue(job2.sp.a > 0) | ||
assert job2.sp.a > 0 | ||
|
||
for job in self.project: | ||
self.assertTrue(job.doc.a) | ||
assert job.doc.a | ||
job.doc.a = not job.doc.a | ||
self.assertFalse(job.doc.a) | ||
assert not job.doc.a | ||
job.doc.a = not job.doc.a | ||
self.assertTrue(job.doc.a) | ||
assert job.doc.a | ||
|
||
routine() | ||
with signac.buffered(): | ||
self.assertTrue(signac.is_buffered()) | ||
assert signac.is_buffered() | ||
routine() | ||
|
||
for job in self.project: | ||
x = job.doc.a | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not job.doc.a | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
job2 = self.project.open_job(id=job.get_id()) | ||
self.assertEqual(job2.doc.a, not x) | ||
self.assertEqual(job.doc.a, not x) | ||
self.assertEqual(job2.doc.a, not x) | ||
assert job2.doc.a == (not x) | ||
assert job.doc.a == (not x) | ||
assert job2.doc.a == (not x) | ||
|
||
job.doc.a = x | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
job2.doc.a = x | ||
self.assertEqual(job.doc.a, x) | ||
self.assertEqual(job2.doc.a, x) | ||
self.assertEqual(job.doc.a, x) | ||
self.assertEqual(job2.doc.a, x) | ||
assert job.doc.a == x | ||
assert job2.doc.a == x | ||
assert job.doc.a == x | ||
assert job2.doc.a == x | ||
|
||
job.doc.a = x | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
job2.doc.a = x | ||
self.assertEqual(job.doc.a, x) | ||
self.assertEqual(job2.doc.a, x) | ||
assert job.doc.a == x | ||
assert job2.doc.a == x | ||
job.doc.a = not x | ||
self.assertEqual(job.doc.a, not x) | ||
self.assertEqual(job2.doc.a, not x) | ||
self.assertEqual(job.doc.a, not x) | ||
self.assertEqual(job2.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
assert job2.doc.a == (not x) | ||
assert job.doc.a == (not x) | ||
assert job2.doc.a == (not x) | ||
|
||
self.assertEqual(job.doc.a, not x) | ||
with self.assertRaises(BufferedFileError) as cm: | ||
assert job.doc.a == (not x) | ||
with pytest.raises(BufferedFileError) as cm: | ||
with signac.buffered(): | ||
self.assertEqual(job.doc.a, not x) | ||
assert job.doc.a == (not x) | ||
job.doc.a = x | ||
self.assertEqual(job.doc.a, x) | ||
assert job.doc.a == x | ||
sleep(1.0) | ||
with open(job.doc._filename, 'wb') as file: | ||
file.write(json.dumps({'a': not x}).encode()) | ||
self.assertIn(job.doc._filename, cm.exception.files) | ||
print(cm.value) | ||
print(job.doc._filename) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Please remove these prints. |
||
assert job.doc._filename in cm.value.files | ||
bdice marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
break # only test for one job | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.