lppexam 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.coveralls.yml +2 -0
- data/.gitignore +22 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +91 -0
- data/Guardfile +38 -0
- data/Guardfile.example +39 -0
- data/LICENSE.txt +22 -0
- data/README.md +43 -0
- data/Rakefile +46 -0
- data/docs/prct10.pdf +0 -0
- data/docs/prct11.pdf +0 -0
- data/docs/prct5.pdf +0 -0
- data/docs/prct6.pdf +0 -0
- data/docs/prct7.pdf +0 -0
- data/docs/prct8.pdf +0 -0
- data/docs/prct9.pdf +0 -0
- data/exam.gemspec +30 -0
- data/lib/List.rb +175 -0
- data/lib/Quiz.rb +112 -0
- data/lib/exam/version.rb +5 -0
- data/lib/exam.rb +126 -0
- data/lib/quiz_dsl.rb +84 -0
- data/spec/exam_spec.rb +139 -0
- data/spec/list_exam_spec.rb +80 -0
- data/spec/quiz_dsl_spec.rb +131 -0
- data/spec/quiz_spec.rb +117 -0
- data/spec/spec_helper.rb +10 -0
- metadata +175 -0
data/lib/exam.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
require "exam/version"
|
2
|
+
|
3
|
+
# = exam.rb
|
4
|
+
#
|
5
|
+
# Autor:: Dailos Sabina Rodriguez
|
6
|
+
# Autor:: Raul Perez Hernandez
|
7
|
+
#
|
8
|
+
#
|
9
|
+
|
10
|
+
#Implementamos modulo Exam
|
11
|
+
module Exam
|
12
|
+
|
13
|
+
# === Clase Pregunta
|
14
|
+
# Definición de la clase Pregunta que permite almacenar y representar una pregunta por pantalla, proporciona una interfaz de usuario y permite saber el nivel de la pregunta mediante una variable. Sus metodos son:
|
15
|
+
# * metodo <=>
|
16
|
+
# * metodo ==
|
17
|
+
# * metodo obtener_pregunta
|
18
|
+
# * metodo obtener_level
|
19
|
+
# * metodo obtener_respuestas
|
20
|
+
# * metodo obtener_correcta
|
21
|
+
# * metodo obtener_respuesta
|
22
|
+
# * metodo initiliaze
|
23
|
+
# * metodo to_s
|
24
|
+
class Pregunta
|
25
|
+
# Se incluye el modulo comparable para comparar diferentes niveles de preguntas
|
26
|
+
include Comparable
|
27
|
+
|
28
|
+
# Atributo answers, para almacenar las respuestas de la pregunta
|
29
|
+
# Atributo title, para almacenar la respuesta en si
|
30
|
+
# Atributo num_c, numero de la respuesta correcta
|
31
|
+
# Atributo level, nivel de la pregunta
|
32
|
+
attr_accessor :answers, :title, :num_c, :level
|
33
|
+
|
34
|
+
# Metodo para hacer uso del modulo Comparable comparando el nivel de dos preguntas
|
35
|
+
def <=> (anOther)
|
36
|
+
@level <=> anOther.level
|
37
|
+
end
|
38
|
+
|
39
|
+
# Metodo para comparar que una pregunta es igual a otra
|
40
|
+
def == (other)
|
41
|
+
@level == other.level && @title == other.title
|
42
|
+
end
|
43
|
+
|
44
|
+
# Metodo para obtener el titulo de la pregunta mediante una introducción por pantalla
|
45
|
+
def self.obtener_pregunta
|
46
|
+
puts 'Introduzca la pregunta'
|
47
|
+
title = gets.chomp
|
48
|
+
return title
|
49
|
+
end
|
50
|
+
|
51
|
+
# Metodo para obtener el nivel de la pregunta
|
52
|
+
def self.obtener_level
|
53
|
+
print "Introduzca nivel de dificultad de la pregunta, 0 minimo y 10 maximo"
|
54
|
+
@level = gets.chomp.to_i
|
55
|
+
end
|
56
|
+
|
57
|
+
# Metodo para obtener las diferentes respuestas a la pregunta, manteniendo la suposición de que el numero de respuestas será el que nos proporcionen
|
58
|
+
def self.obtener_respuestas
|
59
|
+
puts "Introduzca numero de respuestas a la pregunta"
|
60
|
+
num = gets.chomp.to_i
|
61
|
+
c = []
|
62
|
+
while num != 0
|
63
|
+
c = c + obtener_respuesta(c.length + 1)
|
64
|
+
num -= 1
|
65
|
+
end
|
66
|
+
@answers = c
|
67
|
+
end
|
68
|
+
|
69
|
+
# Metodo para saber dentro de la clase Pregunta cual de las respuestas es la correcta, mediante un indice que apunta a un array
|
70
|
+
def self.obtener_correcta
|
71
|
+
puts "Introduzca el numero de la respuesta correcta"
|
72
|
+
@num_c = gets.chomp.to_i
|
73
|
+
end
|
74
|
+
|
75
|
+
# Metodo para obtener una respuesta simple a una pregunta
|
76
|
+
def self.obtener_respuesta(num)
|
77
|
+
puts "Introduzca la respuesta #{num}"
|
78
|
+
ans = [gets.chomp]
|
79
|
+
return ans
|
80
|
+
end
|
81
|
+
|
82
|
+
# Metodo para inicializar la clase
|
83
|
+
def initialize(title = obtener_pregunta, answers = obtener_respuestas, num_c = obtener_correcta, level = obtener_level)
|
84
|
+
raise ArgumentError,
|
85
|
+
"Title has to be a String, got #{title.class}" unless title.is_a? String
|
86
|
+
@title = title
|
87
|
+
@answers = answers
|
88
|
+
@num_c = num_c
|
89
|
+
@level = level
|
90
|
+
end
|
91
|
+
|
92
|
+
# Metodo para mostrar por pantalla la pregunta y las posibles respuestas
|
93
|
+
def to_s
|
94
|
+
out = "# #{@title}" + "\n"
|
95
|
+
i = 1
|
96
|
+
answers.each do |a|
|
97
|
+
out << " #{i}.- #{a}\n"
|
98
|
+
i += 1
|
99
|
+
end
|
100
|
+
out
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# === Clase Pregunta_VF
|
105
|
+
# Definición de la clase Pregunta_VF que es hija de Pregunta y que constituye un caso particular de la clase Pregunta para preguntas de Verdadero y Falso. Hace uso de los metodos de Pregunta ademas de:
|
106
|
+
# * metodo initialize. Con overriding sobre el de Pregunta
|
107
|
+
# * metodo obtener_correcta. Con overriding sobre el de Pregunta
|
108
|
+
# Clase para representar la clase de preguntas de Verdadero y Falso
|
109
|
+
class Pregunta_VF < Pregunta
|
110
|
+
|
111
|
+
# Metodo para inicializar haciendo overriding
|
112
|
+
def initialize(title = obtener_pregunta, num_c = obtener_correcta, level = obtener_level)
|
113
|
+
raise ArgumenError, "Title has to be a String, got #{title.class}" unless title.is_a? String
|
114
|
+
@title = title
|
115
|
+
@answers = ["Cierto", "Falso"]
|
116
|
+
@num_c = num_c
|
117
|
+
@level = level
|
118
|
+
end
|
119
|
+
|
120
|
+
# Metodo para obtener la respuesta correcta haciendo overriding
|
121
|
+
def self.obtener_correcta
|
122
|
+
puts "Si la respuesta es correcta teclee 0, en caso contrario teclee 1"
|
123
|
+
@num_c = gets.chomp.to_i
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/quiz_dsl.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
require_relative 'List'
|
2
|
+
require_relative 'exam'
|
3
|
+
require_relative 'Quiz'
|
4
|
+
|
5
|
+
# = quiz_dsl.rb
|
6
|
+
#
|
7
|
+
# Autor:: Dailos Sabina Rodriguez
|
8
|
+
# Autor:: Raul Perez Hernandez
|
9
|
+
#
|
10
|
+
#
|
11
|
+
# === Clase QuizDSL
|
12
|
+
# Definicion de la clase Quiz que permite representar un examen por pantalla mediante los siguientes metodos y tambien comprobar el resultado del examen, para ello hemos definido la clase como DSL
|
13
|
+
# * metodo initialize
|
14
|
+
# * metodo question
|
15
|
+
# * metodo right
|
16
|
+
# * metodo wrong
|
17
|
+
#
|
18
|
+
|
19
|
+
class QuizDSL < InterfazQuiz
|
20
|
+
|
21
|
+
# Metodo para inicializar la clase
|
22
|
+
def initialize(name = "", &block)
|
23
|
+
@aciertos = 0
|
24
|
+
@name = name
|
25
|
+
@questions = List.new
|
26
|
+
@wr = 0
|
27
|
+
|
28
|
+
if block_given?
|
29
|
+
if block.arity == 1
|
30
|
+
yield
|
31
|
+
else
|
32
|
+
instance_eval &block
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Metodo para cargar una pregunta haciendo uso de DSL
|
38
|
+
def question(title, answers = {})
|
39
|
+
resp = []
|
40
|
+
a = 0
|
41
|
+
num_c = 0
|
42
|
+
correcta = answers[:right] if answers[:right]
|
43
|
+
answers.map do |key,r|
|
44
|
+
resp << r
|
45
|
+
num_c = a if r == correcta
|
46
|
+
a += 1
|
47
|
+
end
|
48
|
+
@questions.ins_final(Exam::Pregunta.new(title, resp, num_c, 0))
|
49
|
+
end
|
50
|
+
|
51
|
+
# Metodo para cargar la respuesta correcta
|
52
|
+
def right
|
53
|
+
:right
|
54
|
+
end
|
55
|
+
|
56
|
+
# Metodo para cargar la/s respuesta/s errónea/s
|
57
|
+
def wrong
|
58
|
+
@wr += 1
|
59
|
+
("wr"+@wr.to_s).intern
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if __FILE__ == $0
|
64
|
+
quiz = QuizDSL.new("Cuestionario de LPP 05/12/2014") do
|
65
|
+
question '¿Cuantos argumentos de tipo bloque puede recibir un metodo?',
|
66
|
+
right => '1',
|
67
|
+
wrong => '2',
|
68
|
+
wrong => 'muchos',
|
69
|
+
wrong => 'los que defina el usuario'
|
70
|
+
|
71
|
+
question "En Ruby los bloque son objetos que contienen codigo",
|
72
|
+
wrong =>'Cierto',
|
73
|
+
right =>'Falso'
|
74
|
+
|
75
|
+
question "Cual es el tipo del objeto en el siguiente codigo Ruby? class Objeto end",
|
76
|
+
wrong => 'Una constante',
|
77
|
+
wrong => 'Un objeto',
|
78
|
+
right => 'Una instancia de la clase Class',
|
79
|
+
wrong => 'Ninguna de las anteriores'
|
80
|
+
end
|
81
|
+
|
82
|
+
#quiz.invertir
|
83
|
+
quiz.run
|
84
|
+
end
|
data/spec/exam_spec.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'exam'
|
3
|
+
require 'List'
|
4
|
+
|
5
|
+
describe Exam do
|
6
|
+
before :each do
|
7
|
+
@p1 = Exam::Pregunta.new("Cuanto es 2 mas 2?", ["4", "3", "1"],0,2)
|
8
|
+
@p2 = Exam::Pregunta_VF.new("Es apropiado que una clase Tablero herede de una clase Juego",0,3)
|
9
|
+
@p3 = Exam::Pregunta.new("Cuanto es 3 mas 2?", ["5", "3", "1"],0,2)
|
10
|
+
@p4 = Exam::Pregunta_VF.new("Edison invento la bombilla?",0,5)
|
11
|
+
@p5 = Exam::Pregunta.new("Cuanto es 2 mas 2?", ["4", "3", "1"], 0, 2)
|
12
|
+
end
|
13
|
+
|
14
|
+
it "Comprobar clase Pregunta" do
|
15
|
+
expect(@p1.is_a? Exam::Pregunta).to eq(true)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "Comprueba que una pregunta es de menor nivel que otra" do
|
19
|
+
expect(@p1 < @p2).to eq(true)
|
20
|
+
expect(@p2 < @p1).to eq(false)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "Comprueba que una pregunta es de mismo nivel que otra" do
|
24
|
+
expect(@p1 == @p3).to eq(false)
|
25
|
+
expect(@p1 == @p5).to eq(true)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "Comprueba que una pregunta es de mayor nivel que otra" do
|
29
|
+
expect(@p4 > @p1).to eq(true)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "Debe existir un nivel de pregunta y debe estar entre 0 y 10" do
|
33
|
+
expect (@p1.level >= 0 && @p1.level <= 10)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Comprobar herencia de la clase Pregunta_VF" do
|
37
|
+
expect(@p2.is_a? Exam::Pregunta).to eq(true)
|
38
|
+
end
|
39
|
+
|
40
|
+
|
41
|
+
it "Comprobar instancia de Pregunta_VF" do
|
42
|
+
expect(@p2).to be_an_instance_of (Exam::Pregunta_VF)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "Debe existir una pregunta" do
|
46
|
+
expect(@p1.title).not_to be_empty
|
47
|
+
expect(@p2.title).not_to be_empty
|
48
|
+
end
|
49
|
+
|
50
|
+
it "Deben existir opciones de respuestas" do
|
51
|
+
expect(@p1.answers).not_to be_empty
|
52
|
+
expect(@p2.answers).not_to be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
it "Se debe invocar a un metodo para obtener la pregunta" do
|
56
|
+
expect(@p1.respond_to? :obtener_pregunta)
|
57
|
+
expect(@p2.respond_to? :obtener_pregunta)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "Se debe invocar a un metodo para obtener las opciones de respuesta" do
|
61
|
+
expect(@p1.respond_to? :obtener_respuestas)
|
62
|
+
expect(@p2.respond_to? :obtener_respuestas)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "Debe existir al menos una respuesta correcta" do
|
66
|
+
expect(@p1.num_c != nil)
|
67
|
+
expect(@p2.num_c != nil)
|
68
|
+
end
|
69
|
+
|
70
|
+
it "Se debe mostrar por la consola la pregunta y las opciones de respuesta" do
|
71
|
+
expect(@p1.respond_to? :to_s)
|
72
|
+
expect(@p2.respond_to? :to_s)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "Solo existen 2 respuestas: Verdadero o Falso" do
|
76
|
+
expect(@p2.answers.size == 2 && @p2.answers == ["Cierto", "Falso"])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
describe Node do
|
81
|
+
before :each do
|
82
|
+
@t1 = List.new
|
83
|
+
@t1.ins_inicio(1)
|
84
|
+
@t1.ins_inicio(2)
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'Debe existir un Nodo de la lista con sus datos y su siguiente' do
|
88
|
+
expect(@t1.head.dev_value != nil && @t1.head.dev_sig != nil)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe List do
|
93
|
+
before :each do
|
94
|
+
@t1 = List.new
|
95
|
+
@t1.ins_inicio(1)
|
96
|
+
@t1.ins_final(2)
|
97
|
+
@t1.ins_inicio(4)
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'Se extrae el primer elemento de la lista' do
|
101
|
+
l = @t1.length
|
102
|
+
@t1.sup_inicio
|
103
|
+
expect(@t1.length + 1 == l)
|
104
|
+
end
|
105
|
+
|
106
|
+
it "El maximo debe ser 4" do
|
107
|
+
expect(@t1.max == 4).to eq(true)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "El minimo debe ser 1" do
|
111
|
+
expect(@t1.min == 1).to eq(true)
|
112
|
+
end
|
113
|
+
|
114
|
+
it "Comprueba el numero de elementos de la lista" do
|
115
|
+
expect(@t1.count).to eq(3)
|
116
|
+
end
|
117
|
+
|
118
|
+
it "Comprueba que hay un elemento en la lista" do
|
119
|
+
expect(@t1.include?(4)).to eq(true)
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'Se puede insertar un elemento' do
|
123
|
+
l = @t1.length
|
124
|
+
@t1.ins_inicio(2)
|
125
|
+
expect(@t1.length - 1 == l)
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'Se pueden insertar varios elementos' do
|
129
|
+
l = @t1.length
|
130
|
+
@t1.ins_inicio(3)
|
131
|
+
@t1.ins_inicio(4)
|
132
|
+
@t1.ins_final(5)
|
133
|
+
expect(@t1.length - 3 == l)
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'Debe existir una lista con su cabeza' do
|
137
|
+
expect(@t1.count >= 1).to eq(true)
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'exam'
|
3
|
+
require 'List'
|
4
|
+
|
5
|
+
describe Exam do
|
6
|
+
before :each do
|
7
|
+
@l1 = List.new
|
8
|
+
@l1.ins_inicio(Exam::Pregunta.new('¿Cual es la salida del siguiente codigo Ruby? class Xyz def pots @nice end end xyz = Xyz.new p xyz.pots', ['#<Xyz:0xa000208>', 'nil', '0', 'Ninguna de las anteriores'], 1, 0))
|
9
|
+
@l1.ins_final(Exam::Pregunta.new('La siguiente definicion de un hash en Ruby es validad: hash_raro = { [1, 2, 3] => Object.new(), Hash.new => :toto }', ['Cierto', 'Falso'], 0, 1))
|
10
|
+
@l1.ins_final(Exam::Pregunta.new('Cual es la salida del siguiente codigo Ruby? class Array def say_hi "HEY!" end end p [1, "bob"].say_hi', ['1', 'bob', 'HEY!', 'Ninguna de las anteriores'], 2, 2))
|
11
|
+
@l1.ins_final(Exam::Pregunta.new('Cual es el tipo del objeto en el siguiente codigo Ruby? class Objeto end', ['Una instancia de la clase Class', 'Una constante', 'Un objeto', 'Ninguna de las anteriores'], 0, 3))
|
12
|
+
@l1.ins_final(Exam::Pregunta_VF.new('Es apropiado que una clase Tablero herede de una clase Juego', 0, 4))
|
13
|
+
@l1.ins_final(Exam::Pregunta.new('¿Cual es la salida del siguiente codigo Ruby? class Xyz def pots @nice end end xyz = Xyz.new p xyz.pots', ['#<Xyz:0xa000208>', 'nil', '0', 'Ninguna de las anteriores'], 1, 0))
|
14
|
+
end
|
15
|
+
|
16
|
+
it "Debe existir una pregunta" do
|
17
|
+
p = @l1.head
|
18
|
+
while p.dev_sig != nil
|
19
|
+
expect(p.dev_value.title).not_to be_empty
|
20
|
+
p = p.dev_sig
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
it "Deben existir opciones de respuestas" do
|
25
|
+
p = @l1.head
|
26
|
+
while p.dev_sig != nil
|
27
|
+
expect(p.dev_value.answers).not_to be_empty
|
28
|
+
p = p.dev_sig
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
it "Se debe invocar a un metodo para obtener la pregunta" do
|
33
|
+
p = @l1.head
|
34
|
+
while p.dev_sig != nil
|
35
|
+
expect(p.dev_value.respond_to? :obtener_pregunta)
|
36
|
+
p = p.dev_sig
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
it "Se debe invocar a un metodo para obtener las opciones de respuesta" do
|
41
|
+
p = @l1.head
|
42
|
+
while p.dev_sig != nil
|
43
|
+
expect(p.dev_value.respond_to? :obtener_respuestas)
|
44
|
+
p = p.dev_sig
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Debe existir al menos una respuesta correcta" do
|
49
|
+
p = @l1.head
|
50
|
+
while p.dev_sig != nil
|
51
|
+
expect(p.dev_value.num_c != nil)
|
52
|
+
p = p.dev_sig
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it "Se debe mostrar por la consola la pregunta y las opciones de respuesta" do
|
57
|
+
p = @l1.head
|
58
|
+
while p.dev_sig != nil
|
59
|
+
expect(p.dev_value.respond_to? :to_s)
|
60
|
+
p = p.dev_sig
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
it "Comprueba el numero de elementos de la lista" do
|
65
|
+
expect(@l1.count).to eq(6)
|
66
|
+
end
|
67
|
+
|
68
|
+
it "Comprobar que una pregunta es igual a otra" do
|
69
|
+
expect(@l1.head.dev_value == @l1.tail.dev_value).to eq(true)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "Comprobar clase Pregunta" do
|
73
|
+
expect((@l1.head.dev_value).is_a? Exam::Pregunta).to eq(true)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "Comprueba que una pregunta es de menor nivel que otra" do
|
77
|
+
expect(@l1.head.dev_value < @l1.head.dev_sig.dev_value).to eq(true)
|
78
|
+
expect(@l1.head.dev_sig.dev_value < @l1.head.dev_value).to eq(false)
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'exam'
|
3
|
+
require 'List'
|
4
|
+
require 'Quiz'
|
5
|
+
require 'quiz_dsl'
|
6
|
+
|
7
|
+
describe QuizDSL do
|
8
|
+
before :each do
|
9
|
+
@q1 = QuizDSL.new("Cuestionario de LPP 05/12/2014") {
|
10
|
+
question '¿Cuantos argumentos de tipo bloque puede recibir un metodo?',
|
11
|
+
right => '1',
|
12
|
+
wrong => '2',
|
13
|
+
wrong => 'muchos',
|
14
|
+
wrong => 'los que defina el usuario'
|
15
|
+
|
16
|
+
question "En Ruby los bloque son objetos que contienen codigo",
|
17
|
+
wrong =>'Cierto',
|
18
|
+
right =>'Falso'
|
19
|
+
|
20
|
+
question "Cual es el tipo del objeto en el siguiente codigo Ruby? class Objeto end",
|
21
|
+
wrong => 'Una constante',
|
22
|
+
wrong => 'Un objeto',
|
23
|
+
right => 'Una instancia de la clase Class',
|
24
|
+
wrong => 'Ninguna de las anteriores'
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
it "Se debe poder leer las preguntas" do
|
29
|
+
expect(@q1.respond_to? :question)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "Se debe poder leer la respuesta correcta" do
|
33
|
+
expect(@q1.respond_to? :right)
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Se debe poder leer las respuestas erroneas" do
|
37
|
+
expect(@q1.respond_to? :wrong)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "Se crea bien el examen" do
|
41
|
+
expect(@q1.name) == "Cuestionario de LPP 05/12/2014"
|
42
|
+
end
|
43
|
+
|
44
|
+
it "Se debe poder invertir el orden de las preguntas" do
|
45
|
+
expect(@q1.respond_to? :invertir)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "Se debe poder realizar por pantalla un examen" do
|
49
|
+
expect(@q1.respond_to? :run)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "Se debe poder mostrar por pantalla un examen" do
|
53
|
+
expect(@q1.respond_to? :to_s)
|
54
|
+
end
|
55
|
+
|
56
|
+
it "Se debe poder corregir un examen" do
|
57
|
+
expect(@q1.respond_to? :check)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "Debe existir alguna pregunta en el examen" do
|
61
|
+
expect(@q1.questions.count >= 1).to eq(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "Comprobar que no hay preguntas iguales" do
|
65
|
+
p1 = @q1.questions.head
|
66
|
+
while p1.dev_sig != nil
|
67
|
+
p2 = p1.dev_sig
|
68
|
+
while p2 != nil
|
69
|
+
expect(p1.dev_value == p2.dev_value).to eq(false)
|
70
|
+
p2 = p2.dev_sig
|
71
|
+
end
|
72
|
+
p1 = p1.dev_sig
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
it "Examen perfecto" do
|
77
|
+
expect(@q1.check([0, 1, 2])).to eq(3)
|
78
|
+
end
|
79
|
+
|
80
|
+
it "Examen aprobado" do
|
81
|
+
expect(@q1.check([1, 1, 2])).to be >= 2
|
82
|
+
end
|
83
|
+
|
84
|
+
it "Examen suspenso" do
|
85
|
+
expect(@q1.check([0, 0, 1])).to be < 2
|
86
|
+
end
|
87
|
+
|
88
|
+
it "Deben existir opciones de respuestas" do
|
89
|
+
p = @q1.questions.head
|
90
|
+
while p.dev_sig != nil
|
91
|
+
expect(p.dev_value.answers).not_to be_empty
|
92
|
+
p = p.dev_sig
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
it "Se debe invocar a un metodo para obtener la pregunta" do
|
97
|
+
p = @q1.questions.head
|
98
|
+
while p.dev_sig != nil
|
99
|
+
expect(p.dev_value.respond_to? :obtener_pregunta)
|
100
|
+
p = p.dev_sig
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
it "Se debe invocar a un metodo para obtener las opciones de respuesta" do
|
105
|
+
p = @q1.questions.head
|
106
|
+
while p.dev_sig != nil
|
107
|
+
expect(p.dev_value.respond_to? :obtener_respuestas)
|
108
|
+
p = p.dev_sig
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it "Debe existir al menos una respuesta correcta" do
|
113
|
+
p = @q1.questions.head
|
114
|
+
while p.dev_sig != nil
|
115
|
+
expect(p.dev_value.num_c != nil)
|
116
|
+
p = p.dev_sig
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it "Se debe mostrar por la consola la pregunta y las opciones de respuesta" do
|
121
|
+
p = @q1.questions.head
|
122
|
+
while p.dev_sig != nil
|
123
|
+
expect(p.dev_value.respond_to? :to_s)
|
124
|
+
p = p.dev_sig
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
it "Comprueba el numero de preguntas en el examen" do
|
129
|
+
expect(@q1.questions.count).to eq(3)
|
130
|
+
end
|
131
|
+
end
|
data/spec/quiz_spec.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'exam'
|
3
|
+
require 'List'
|
4
|
+
require 'Quiz'
|
5
|
+
|
6
|
+
describe Quiz do
|
7
|
+
before :each do
|
8
|
+
@l1 = List.new
|
9
|
+
@l1.ins_inicio(Exam::Pregunta.new('¿Cual es la salida del siguiente codigo Ruby? class Xyz def pots @nice end end xyz = Xyz.new p xyz.pots', ['#<Xyz:0xa000208>', 'nil', '0', 'Ninguna de las anteriores'], 1, 0))
|
10
|
+
@l1.ins_final(Exam::Pregunta.new('La siguiente definicion de un hash en Ruby es validad: hash_raro = { [1, 2, 3] => Object.new(), Hash.new => :toto }', ['Cierto', 'Falso'], 0, 1))
|
11
|
+
@l1.ins_final(Exam::Pregunta.new('Cual es la salida del siguiente codigo Ruby? class Array def say_hi "HEY!" end end p [1, "bob"].say_hi', ['1', 'bob', 'HEY!', 'Ninguna de las anteriores'], 2, 2))
|
12
|
+
@l1.ins_final(Exam::Pregunta.new('Cual es el tipo del objeto en el siguiente codigo Ruby? class Objeto end', ['Una instancia de la clase Class', 'Una constante', 'Un objeto', 'Ninguna de las anteriores'], 0, 3))
|
13
|
+
@l1.ins_final(Exam::Pregunta_VF.new('Es apropiado que una clase Tablero herede de una clase Juego', 0, 4))
|
14
|
+
#@l1.ins_final(Exam::Pregunta.new('¿Cual es la salida del siguiente codigo Ruby? class Xyz def pots @nice end end xyz = Xyz.new p xyz.pots', ['#<Xyz:0xa000208>', 'nil', '0', 'Ninguna de las anteriores'], 1, 1))
|
15
|
+
@q1 = InterfazQuiz.new("Examen LPP", @l1)
|
16
|
+
@q2 = InterfazQuiz.new("Examen LPP invertido", @l1)
|
17
|
+
@q2.invertir
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Se debe poder invertir el orden de las preguntas" do
|
21
|
+
expect(@q1.respond_to? :invertir)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "Orden de preguntas invertido" do
|
25
|
+
expect(@q1.questions.head == @q2.questions.tail).to eq(true)
|
26
|
+
expect(@q2.questions.head == @q1.questions.tail).to eq(true)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "Se debe poder realizar por pantalla un examen" do
|
30
|
+
expect(@q1.respond_to? :run)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "Se debe poder mostrar por pantalla un examen" do
|
34
|
+
expect(@q1.respond_to? :to_s)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "Se debe poder corregir un examen" do
|
38
|
+
expect(@q1.respond_to? :check)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "Debe existir alguna pregunta en el examen" do
|
42
|
+
expect(@q1.questions.count >= 1).to eq(true)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "Comprobar que no hay preguntas iguales" do
|
46
|
+
p1 = @q1.questions.head
|
47
|
+
while p1.dev_sig != nil
|
48
|
+
p2 = p1.dev_sig
|
49
|
+
while p2 != nil
|
50
|
+
expect(p1.dev_value == p2.dev_value).to eq(false)
|
51
|
+
p2 = p2.dev_sig
|
52
|
+
end
|
53
|
+
p1 = p1.dev_sig
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it "Examen perfecto" do
|
58
|
+
expect(@q1.check([1, 0, 2, 0, 0])).to eq(5)
|
59
|
+
end
|
60
|
+
|
61
|
+
it "Examen aprobado" do
|
62
|
+
expect(@q1.check([1, 0, 2, 1, 1])).to be >= 3
|
63
|
+
end
|
64
|
+
|
65
|
+
it "Examen suspenso" do
|
66
|
+
expect(@q1.check([1, 1, 2, 1, 1])).to be < 3
|
67
|
+
end
|
68
|
+
|
69
|
+
it "Deben existir opciones de respuestas" do
|
70
|
+
p = @q1.questions.head
|
71
|
+
while p.dev_sig != nil
|
72
|
+
expect(p.dev_value.answers).not_to be_empty
|
73
|
+
p = p.dev_sig
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
it "Se debe invocar a un metodo para obtener la pregunta" do
|
78
|
+
p = @q1.questions.head
|
79
|
+
while p.dev_sig != nil
|
80
|
+
expect(p.dev_value.respond_to? :obtener_pregunta)
|
81
|
+
p = p.dev_sig
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
it "Se debe invocar a un metodo para obtener las opciones de respuesta" do
|
86
|
+
p = @q1.questions.head
|
87
|
+
while p.dev_sig != nil
|
88
|
+
expect(p.dev_value.respond_to? :obtener_respuestas)
|
89
|
+
p = p.dev_sig
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
it "Debe existir al menos una respuesta correcta" do
|
94
|
+
p = @q1.questions.head
|
95
|
+
while p.dev_sig != nil
|
96
|
+
expect(p.dev_value.num_c != nil)
|
97
|
+
p = p.dev_sig
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "Se debe mostrar por la consola la pregunta y las opciones de respuesta" do
|
102
|
+
p = @q1.questions.head
|
103
|
+
while p.dev_sig != nil
|
104
|
+
expect(p.dev_value.respond_to? :to_s)
|
105
|
+
p = p.dev_sig
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
it "Comprueba el numero de preguntas en el examen" do
|
110
|
+
expect(@q1.questions.count).to eq(5)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "Comprueba que una pregunta es de menor nivel que otra" do
|
114
|
+
expect(@q1.questions.head.dev_value < @q1.questions.head.dev_sig.dev_value).to eq(true)
|
115
|
+
expect(@q1.questions.head.dev_sig.dev_value < @q1.questions.head.dev_value).to eq(false)
|
116
|
+
end
|
117
|
+
end
|
data/spec/spec_helper.rb
ADDED