コード例 #1
0
 def test_hidden_error(self):
     clear_report()
     contextualize_report('import pedal')
     verify()
     tifa_analysis()
     final = simple.resolve()
     self.assertNotEqual("No errors reported.", final.message)
コード例 #2
0
 def test_unmessaged_tifa(self):
     clear_report()
     contextualize_report('import random\nrandom')
     verify()
     tifa_analysis()
     final = simple.resolve()
     self.assertEqual(SUCCESS_MESSAGE, final.title+"\n"+final.message)
コード例 #3
0
 def _initialize_report(self):
     """
     Initialize a successful report with possible set of issues.
     """
     if self.report["source"]["success"]:
         std_ast = self.report['source']['ast']
         self.report['cait'] = {}
         self.report['cait']['std_ast'] = EasyNode(std_ast)
         tifa_analysis(report=self.report)
コード例 #4
0
 def test_empty(self):
     clear_report()
     contextualize_report('    ')
     verify()
     tifa_analysis()
     commands.run()
     final = simple.resolve()
     self.assertEqual(Feedback.CATEGORIES.SYNTAX, final.category)
     self.assertEqual("No Source Code", final.title)
     self.assertEqual("Source code file is blank.", final.message)
コード例 #5
0
 def test_success_suppression(self):
     clear_report()
     contextualize_report('a=0\na')
     verify()
     tifa_analysis()
     set_success()
     suppress(label='set_success')
     final = simple.resolve()
     self.assertEqual(Feedback.CATEGORIES.COMPLETE, final.category)
     self.assertEqual(SUCCESS_MESSAGE, final.title+"\n"+final.message)
コード例 #6
0
 def test_success(self):
     clear_report()
     contextualize_report('a=0\na')
     verify()
     tifa_analysis()
     set_success()
     final = simple.resolve()
     self.assertEqual(Feedback.CATEGORIES.COMPLETE, final.category)
     self.assertEqual("Complete", final.title)
     self.assertEqual("Great work!", final.message)
コード例 #7
0
 def test_runtime_suppression(self):
     clear_report()
     contextualize_report('import json\njson.loads("0")+"1"')
     verify()
     tifa_analysis()
     commands.run()
     suppress("Runtime")
     final = simple.resolve()
     self.assertEqual(Feedback.CATEGORIES.COMPLETE, final.category)
     self.assertEqual(SUCCESS_TEXT, final.message)
コード例 #8
0
 def test_analyzer_suppression(self):
     clear_report()
     contextualize_report('1+"Hello"')
     verify()
     tifa_analysis()
     commands.run()
     suppress("analyzer")
     final = simple.resolve()
     self.assertEqual("runtime", final.category)
     self.assertEqual("Type Error", final.title)
コード例 #9
0
 def __enter__(self):
     clear_report(report=self.report)
     contextualize_report(self.code, report=self.report)
     verify(report=self.report)
     if self.run_tifa:
         tifa_analysis(report=self.report)
     # TODO: Clean this up
     self.student = get_sandbox(self.report)
     self.report['sandbox']['sandbox'].tracer_style = self.tracer_style
     commands.run()
     return self
コード例 #10
0
    def to_source(source):
        """

        Args:
            source:
        """
        MAIN_REPORT.clear()
        contextualize_report(source)
        verify()
        parse_program()
        tifa_analysis()
コード例 #11
0
 def __init__(self,
              files=None,
              main_file='answer.py',
              main_code=None,
              user=None,
              assignment=None,
              course=None,
              execution=None,
              instructor_file='on_run.py',
              skip_tifa=False,
              skip_run=False,
              inputs=None,
              set_success=True,
              report=MAIN_REPORT,
              trace=True,
              threaded=True,
              **kwargs):
     super().__init__(files=files,
                      main_file=main_file,
                      main_code=main_code,
                      user=user,
                      assignment=assignment,
                      course=course,
                      execution=execution,
                      instructor_file=instructor_file,
                      report=report)
     self.skip_run = skip_run
     self.skip_tifa = skip_tifa
     self.trace = trace
     report.set_formatter(Formatter(report))
     verify(report=self.report)
     if not skip_tifa:
         tifa_analysis(report=self.report)
     if inputs:
         set_input(inputs)
     if skip_run:
         student = get_sandbox(report=report)
         student.threaded = threaded
     else:
         if trace:
             start_trace()
         student = run(report=report, threaded=threaded)
         student.threaded = threaded
     self.fields = {
         'student': student,
         'resolve': resolve,
         'next_section': self.next_section,
         'sectional_resolve': sectional_resolve,
         'show_as_hidden': show_as_hidden
     }
コード例 #12
0
 def next_section(self, name=""):
     original_next_section(name=name, report=self.report)
     verify(report=self.report)
     if not self.skip_tifa:
         tifa_analysis(report=self.report)
     student = get_sandbox(report=self.report)
     if self.skip_run:
         student.clear()
     else:
         if self.trace:
             start_trace()
         student.clear()
         student = student.run()
     return student
コード例 #13
0
 def __init__(self,
              files=None,
              main_file='answer.py',
              main_code=None,
              user=None,
              assignment=None,
              course=None,
              execution=None,
              instructor_file='on_run.py',
              skip_tifa=False,
              set_success=True,
              report=MAIN_REPORT):
     # Possibly user passed in stuff via the command line.
     if files is None and main_code is None:
         (instructor_file, files, main_file, main_code, user, assignment,
          course, execution) = parse_argv()
     super().__init__(files=files,
                      main_file=main_file,
                      main_code=main_code,
                      user=user,
                      assignment=assignment,
                      course=course,
                      execution=execution,
                      instructor_file=instructor_file,
                      report=report)
     # Then default custom stuff
     verify(report=report)
     self.ast = parse_program(report=report)
     if skip_tifa:
         self.tifa = None
     else:
         from pedal.tifa import tifa_analysis
         self.tifa = tifa_analysis(report=report)
     self.student = run(threaded=True, report=report)
     self.set_success = set_success
コード例 #14
0
 def __init__(self,
              files=None,
              main_file='answer.py',
              main_code=None,
              user=None,
              assignment=None,
              course=None,
              execution=None,
              instructor_file='on_run.py',
              skip_tifa=False,
              skip_run=False,
              inputs=None,
              set_success=True,
              report=MAIN_REPORT,
              trace=True):
     super().__init__(files=files,
                      main_file=main_file,
                      main_code=main_code,
                      user=user,
                      assignment=assignment,
                      course=course,
                      execution=execution,
                      instructor_file=instructor_file,
                      report=report)
     report.set_formatter(HtmlFormatter(report))
     verify(report=self.report)
     if not skip_tifa:
         tifa_analysis(report=self.report)
     if inputs:
         set_input(inputs)
     if skip_run:
         student = get_sandbox(report=report)
     else:
         if trace:
             start_trace()
         student = run(report=report)
     self.fields = {
         'student': student,
         'resolve': resolve,
         'stats_resolve': stats_resolve
     }
コード例 #15
0
    def test_gently_vs_runtime(self):
        # Runtime > Gently
        clear_report()
        contextualize_report('import json\njson.loads("0")+"1"')
        verify()
        tifa_analysis()
        commands.run()
        gently("I have a gentle opinion, but you don't want to hear it.")
        final = simple.resolve()
        print(final.label)
        self.assertEqual(Feedback.CATEGORIES.RUNTIME, final.category)

        # Runtime < Explain
        clear_report()
        contextualize_report('import json\njson.loads("0")+"1"')
        verify()
        tifa_analysis()
        commands.run()
        explain("LISTEN TO ME")
        final = simple.resolve()
        self.assertEqual(Feedback.CATEGORIES.INSTRUCTOR, final.category)
コード例 #16
0
    def test_sections_tifa(self):
        contextualize_report(
            dedent('''
        ##### Part 1
        a = 0
        ##### Part 2
        print(a)
        ##### Part 3
        print(b)
        '''))
        separate_into_sections(independent=False)
        # First section has an unused variable
        next_section()
        self.assertEqual(len(get_all_feedback()), 2)
        tifa_analysis()
        self.assertEqual(len(get_all_feedback()), 3)
        # Second section uses said variable
        next_section()
        self.assertEqual(len(get_all_feedback()), 4)
        tifa_analysis()
        self.assertEqual(len(get_all_feedback()), 4)
        # Third section has a new unused variables
        next_section()
        self.assertEqual(len(get_all_feedback()), 5)
        tifa_analysis()
        feedback = get_all_feedback()
        self.assertEqual(len(get_all_feedback()), 6)
        finals = sectional.resolve()
        self.assertEqual(
            """FeedbackSourceSection
Feedback separated into groups
Unused Variable
The variable a was given a value on line 3, but was never used after that.
Initialization Problem
The variable b was used on line 7, but it was not given a value on a previous line. You cannot use a variable until it has been given a value.""",
            "\n".join(f.title + "\n" + f.message for f in finals.values()))
コード例 #17
0
 def __enter__(self):
     clear_report()
     set_source(self.code)
     tifa_analysis()
     compatibility.run_student(raise_exceptions=True)
     return self
コード例 #18
0
ファイル: test_pedal.py プロジェクト: RealTimeWeb/skulpt
    print("Phase {}: {} secs".format(phase, round(diff, 2)))
    stopwatch = time.time()
    
import pedal
click("Imported pedal")

from pedal.source import set_source
click("Imported source")

set_source("a = 0")
click("Set source")

from pedal.tifa import tifa_analysis
click("Imported Tifa")

tifa_analysis()
click("Ran Tifa")

from pedal.cait import parse_program
click("Imported cait")

ast = parse_program()
click("Parsed program")

if ast.find_all("Assign"):
    print(ast.find_all("Assign"))
click("Found assignments")

from pedal.resolvers import simple
click("Imported resolver")
コード例 #19
0
import pedal

click("Imported pedal")

from pedal.source import set_source

click("Imported source")

set_source("a = 0")
click("Set source")

from pedal.tifa import tifa_analysis

click("Imported Tifa")

tifa_analysis()
click("Ran Tifa")

from pedal.cait import parse_program

click("Imported cait")

ast = parse_program()
click("Parsed program")

if ast.find_all("Assign"):
    print(ast.find_all("Assign"))
click("Found assignments")

from pedal.sandbox.sandbox import run
コード例 #20
0
 def to_source(source):
     MAIN_REPORT.clear()
     set_source(source)
     parse_program()
     tifa_analysis()
コード例 #21
0
################################################################################
# BlockPy Examples
# Boiler plate code automatically prepended before execution
# Import get_output, set_success, gently, explain
from pedal.report import *
# In JS, patch `get_program`, and then imperative define the report's source
report.set_source(get_program())
# Run the tifa analysis; stuff is automatically added to the report
from pedal.tifa import tifa_analysis()
_tifa = tifa_analysis()

# Set up CAIT to know about TIFA
import pedal.cait as cait
cait.configure(tifa=_tifa)

# End of boiler plate

# Minor modifications to pathing for the instructor_* stuff
from pedal.mistakes import mistakes
mistakes.filter_group()
mistakes.append.append_group()

# But most code left unchanged
if 'text' in get_output():
    gently("Hey now...")
set_success()

# Boilerplate begins again.
import pedal.feedback as feedback
_RESULT = feedback.select()
_PARTIALS = sum_partials()