Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Templates built for tests.py files for unit testing by Izaguirj · Pull Request #37 · University-Code/uni-code · GitHub
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
{
"python.linting.enabled": true
}
3 changes: 3 additions & 0 deletions unicode/editor/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,7 +11,9 @@
('Python', 'Python'),
('Clojure', 'Clojure')
}

# Create your models here.

class UserSubmission(models.Model):
submitter = models.ForeignKey(User, on_delete=models.CASCADE)
problem = models.ForeignKey(Problem, on_delete=models.CASCADE)
Expand All@@ -23,3 +25,4 @@ class UserSubmission(models.Model):

def __str__(self):
return f'{self.submitter} - {self.problem} - {self.language} - ({self.created})'

40 changes: 39 additions & 1 deletion unicode/editor/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,41 @@
import unittest

from datetime import datetime
from django.apps import apps
from django.test import TestCase
from editor.apps import EditorConfig
from editor.models import UserSubmission

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EditorConfig.name, 'editor')
self.assertEqual(apps.get_app_config('editor').name, 'editor')

# models.py test
class UserSubmissionModelTest(TestCase):
#def test_submitter(self):


#def test_problem(self):

#Testing __str__(self) for the correct string return
'''
def test_string_representation(self):
test_submission = UserSubmission(submitter = "This is my First Submission")
test_problem = UserSubmission(problem = "This is my First Problem")
test_language = UserSubmission(language = "Python")
test_created = UserSubmission(created = "11/6/2019 12:30")
test_return = test_submission + " - " + test_problem + " - " + test_language + " - " + test_created
self.assertEqual(str(test_return), UserSubmission.__str__(self))
'''
#def test_created(self):


#def test_modified(self):

'''
class UrlsTest(TestCase):

# Create your tests here.
class ViewsTest(TestCase):
'''
179 changes: 120 additions & 59 deletions unicode/eval_engine/services.py
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,121 @@
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1
=======
import requests
from . import settings

lang = {
'C': 4,
'C++': 10,
'C#': 16,
'Clojure': 18,
'Java': 26,
'JavaScript': 29,
'Octave': 32,
'Python': 34,
'Ruby': 38
}
def eval_engine(source, lang, test_in, test_out):
url = settings.CODE_EVAL_REQUEST_ENDPOINT # wait=true makes the API call synchronous, halving the number of requests needed
params = {
'source_code': source,
'language_id': lang,
'stdin': test_in,
'expected_output': test_out
}
r = requests.post(url, params=params)
eval_output = r.json()
return eval_output


def eval_setup(submission):
submission_info= submission['user_submission']
test_cases= submission['test_cases']

source_code= submission_info.submission
language= submission_info.language

'''
Collects all test case statuses in one object
'''

result={}
index=0
for case in test_cases:
status=""
test_input=case.test_input
test_output= case.test_output
eval_object = eval_engine(source_code, lang[language], test_input, test_output)
print(eval_object)

#Checks for error
if 'Error' in eval_object['status']['description']:
error= eval_object['status']['description']
return {'error': error}
elif eval_object['status']['description']=="Wrong Answer":
status='fail'
else:
status='pass'

#Adds test case object to result every iteration
result[index]=({"test_input":test_input,"test_output":test_output,"status":status})
index+=1

return result
5 changes: 0 additions & 5 deletions unicode/eval_engine/settings.py
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@


# v3 API endpoints of HackerEarth Code Checker API
COMPILE_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/compile/'
RUN_API_ENDPOINT = 'https://api.hackerearth.com/v3/code/run/'
Expand All@@ -15,6 +13,3 @@

# please keep this secret
CLIENT_SECRET = ''



17 changes: 16 additions & 1 deletion unicode/eval_engine/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from eval_engine.apps import EvalEngineConfig

# Create your tests here.
# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(EvalEngineConfig.name, 'eval_engine')
self.assertEqual(apps.get_app_config('eval_engine').name, 'eval_engine')
'''
# models.py test
class ModelsTest(TestCase):

# views.py test
class ViewsTest(TestCase):
'''
17 changes: 16 additions & 1 deletion unicode/global/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
import unittest

from django.apps import apps
from django.test import TestCase
from apps import GlobalConfig

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(GlobalConfig.name, 'global')
self.assertEqual(apps.get_app_config('global').name, 'global')
'''
# models.py test
class ModelsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
10 changes: 5 additions & 5 deletions unicode/problems/forms.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -12,8 +12,8 @@ class Meta:
'example_solution' : forms.Textarea(attrs=ATTRS)
}

#class TestCaseForm(forms.ModelForm):
#
# class Meta:
# model = ProblemTestCase
# fields = ('test_input', 'test_output')
class ProblemTestCaseForm(forms.ModelForm):

class Meta:
model = ProblemTestCase
fields = ('test_input', 'test_output')
4 changes: 4 additions & 0 deletions unicode/problems/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -30,5 +30,9 @@ class ProblemTestCase(models.Model):
test_input = models.CharField(max_length=1000)
test_output = models.CharField(max_length=1000)


def __str__(self):
return f'{self.problem} testcase {self.id}'



36 changes: 35 additions & 1 deletion unicode/problems/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
import unittest

from django.apps import apps
from django.test import TestCase
from problems.apps import ProblemsConfig
from problems.forms import ProblemForm, ProblemTestCaseForm
from problems.models import Problem, ProblemTestCase

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(ProblemsConfig.name, 'problems')
self.assertEqual(apps.get_app_config('problems').name, 'problems')

# forms.py test
'''
class ProblemFormTest(TestCase):

class ProblemTestCaseFormTest(TestCase):
'''

# models.py test
class ProblemModelTest(TestCase):

#Testing the models.CharField variables as strings
def test_title_string_representation(self):
test_title = Problem(title = "This is an Amazing Title!")
self.assertEqual(str(test_title), test_title.title)
'''
class ProblemTestCaseModelTest(TestCase):

# urls.py test
class UrlsTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''
2 changes: 2 additions & 0 deletions unicode/users/models.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,3 +18,5 @@ class Profile(models.Model):
school = models.CharField(max_length=50)
graduation_year = models.IntegerField()



23 changes: 22 additions & 1 deletion unicode/users/tests.py
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,24 @@
import unittest

from django.apps import apps
from django.test import TestCase
from users.apps import UsersConfig
from users.forms import UserRegistrationForm
from users.models import Profile

# app.py test
class AppsTest(unittest.TestCase):
def problem_config(self):
self.assertEqual(UsersConfig.name, 'users')
self.assertEqual(apps.get_app_config('users').name, 'users')

'''
# forms.py test
class UserRegistrationFormTest(TestCase):

# models.py test
class ProfileModelTest(TestCase):

# Create your tests here.
# views.py test
class ViewsTest(TestCase):
'''