showcase-rails 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +46 -5
- data/app/assets/builds/showcase.css +8 -0
- data/app/assets/builds/showcase.highlights.css +112 -0
- data/app/models/showcase/sample.rb +6 -6
- data/app/views/showcase/engine/_preview.html.erb +1 -1
- data/app/views/showcase/engine/_sample.html.erb +2 -2
- data/app/views/showcase/engine/_stylesheets.html.erb +1 -1
- data/app/views/showcase/engine/path/_path.html.erb +1 -1
- data/lib/showcase/engine.rb +2 -2
- data/lib/showcase/previews_test.rb +45 -0
- data/lib/showcase/version.rb +1 -1
- data/lib/showcase.rb +20 -4
- data/lib/tasks/showcase_tasks.rake +6 -6
- metadata +5 -4
- data/lib/showcase/integration_test.rb +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aead2040b7c095f85df0c152c6d96aa3bec927e52f49db09f407926536ce36ae
|
4
|
+
data.tar.gz: c5fd847fd56d1ffa39a4d9aae681106685c71aef2e199bbb637158ec80f43cbc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3ffe05a31b2be808620a735573c1cbaf705cceb75bdf03f750193f0ad5534096cb3bc81a4d98e51b80712408ca7b3b60465e85a23828ae469da9af3fdb348db5
|
7
|
+
data.tar.gz: f6ec194dec60349be7b4effd48a20517c8af04e45604b104687a6479a4bba92087ae11b36d702fac03e8d1faebb22521b6d49e62d816b5a42d187e027ce9ce00
|
data/README.md
CHANGED
@@ -54,11 +54,34 @@ if defined?(Showcase)
|
|
54
54
|
end
|
55
55
|
```
|
56
56
|
|
57
|
-
## Automatic
|
57
|
+
## Automatic previews testing
|
58
58
|
|
59
|
-
Showcase automatically runs
|
59
|
+
Showcase automatically runs tests for all your Showcases by rendering them. As long as `gem "showcase-rails"` is in the `:test` group you're set.
|
60
60
|
|
61
|
-
If you want to tweak this, run `bin/rails showcase:install:
|
61
|
+
If you want to tweak this, run `bin/rails showcase:install:previews_test` and open `test/views/showcase_test.rb`. You can then add your own `setup` and `teardown` hooks, as well as override the provided `assert_showcase_preview` to add custom assertions.
|
62
|
+
|
63
|
+
If you need custom assertions for specific previews and their samples, you can use the `test` helper:
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
# test/views/showcase_test.rb
|
67
|
+
require "test_helper"
|
68
|
+
|
69
|
+
class ShowcaseTest < Showcase::PreviewsTest
|
70
|
+
test showcase: "combobox" do
|
71
|
+
# This test block runs within the #combobox container element.
|
72
|
+
assert_text "This is a combobox, for sure."
|
73
|
+
end
|
74
|
+
|
75
|
+
test showcase: "button", id: "basic" do
|
76
|
+
# This test block runs within the #button container element's #basic sample.
|
77
|
+
assert_button class: ["text-xs"]
|
78
|
+
end
|
79
|
+
|
80
|
+
test "some non-Showcase test" do
|
81
|
+
# You can still use the regular Rails `test` method too.
|
82
|
+
end
|
83
|
+
end
|
84
|
+
```
|
62
85
|
|
63
86
|
## View examples
|
64
87
|
|
@@ -95,7 +118,7 @@ copy the file from our repo `app/views` directory into your `app/views` director
|
|
95
118
|
|
96
119
|
### Loading your own assets
|
97
120
|
|
98
|
-
Showcase bundles its own `showcase.js` and `showcase.css` asset files through
|
121
|
+
Showcase bundles its own `showcase.js`, `showcase.css` and `showcase.highlights.css` asset files through
|
99
122
|
Action View's [javascript_include_tag][] and [stylesheet_link_tag][].
|
100
123
|
|
101
124
|
If your assets require more sophisticated loading techniques, declare your own
|
@@ -103,12 +126,24 @@ versions of the [showcase/engine/_javascripts.html.erb][] and
|
|
103
126
|
[showcase/engine/_stylesheets.html.erb][] partials. When customizing those
|
104
127
|
partials, make sure to include `"showcase"` in your list of assets.
|
105
128
|
|
106
|
-
|
107
129
|
[javascript_include_tag]: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-javascript_include_tag
|
108
130
|
[stylesheet_link_tag]: https://edgeapi.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-stylesheet_link_tag
|
109
131
|
[showcase/engine/_javascripts.html.erb]: ./showcase/engine/_javascripts.html.erb
|
110
132
|
[showcase/engine/_stylesheets.html.erb]: ./showcase/engine/_stylesheets.html.erb
|
111
133
|
|
134
|
+
#### Loading your own syntax highlighting theme
|
135
|
+
|
136
|
+
By default, Showcase's syntax highlighting runs on Rouge's "github" theme.
|
137
|
+
|
138
|
+
To use a different theme, override [showcase/engine/_stylesheets.html.erb][] with the following, replacing `:magritte` with a [valid theme](rouge-themes):
|
139
|
+
|
140
|
+
```erb
|
141
|
+
<%= stylesheet_link_tag "application", "showcase" %> # We've removed the default showcase.highlights file here.
|
142
|
+
<%= tag.style Rouge::Theme.find(:magritte).render(scope: ".sc-highlight") %>
|
143
|
+
```
|
144
|
+
|
145
|
+
[rouge-themes]: https://github.com/rouge-ruby/rouge/tree/master/lib/rouge/themes
|
146
|
+
|
112
147
|
## Installation
|
113
148
|
|
114
149
|
Add this line to your application's Gemfile. To get the automatic integration testing make sure the `showcase-rails` gem is available to your test environment:
|
@@ -129,6 +164,12 @@ Or install it yourself as:
|
|
129
164
|
$ gem install showcase-rails
|
130
165
|
```
|
131
166
|
|
167
|
+
Then add the following in your `config/routes.rb` within the block passed to `Rails.application.routes.draw`:
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
mount Showcase::Engine, at: "/docs/showcase" if defined?(Showcase::Engine)
|
171
|
+
```
|
172
|
+
|
132
173
|
## Contributing
|
133
174
|
Contribution directions go here.
|
134
175
|
|
@@ -985,6 +985,14 @@ select {
|
|
985
985
|
background-color: rgb(238 242 255 / var(--tw-bg-opacity));
|
986
986
|
}
|
987
987
|
|
988
|
+
.hover\:sc-text-inherit:hover {
|
989
|
+
color: inherit;
|
990
|
+
}
|
991
|
+
|
992
|
+
.hover\:sc-no-underline:hover {
|
993
|
+
text-decoration-line: none;
|
994
|
+
}
|
995
|
+
|
988
996
|
@media (min-width: 768px) {
|
989
997
|
.md\:sc-text-lg {
|
990
998
|
font-size: 1.125rem;
|
@@ -0,0 +1,112 @@
|
|
1
|
+
.sc-highlight table td { padding: 5px; }
|
2
|
+
.sc-highlight table pre { margin: 0; }
|
3
|
+
.sc-highlight, .sc-highlight .w {
|
4
|
+
color: #24292f;
|
5
|
+
background-color: #f6f8fa;
|
6
|
+
}
|
7
|
+
.sc-highlight .k, .sc-highlight .kd, .sc-highlight .kn, .sc-highlight .kp, .sc-highlight .kr, .sc-highlight .kt, .sc-highlight .kv {
|
8
|
+
color: #cf222e;
|
9
|
+
}
|
10
|
+
.sc-highlight .gr {
|
11
|
+
color: #f6f8fa;
|
12
|
+
}
|
13
|
+
.sc-highlight .gd {
|
14
|
+
color: #82071e;
|
15
|
+
background-color: #ffebe9;
|
16
|
+
}
|
17
|
+
.sc-highlight .nb {
|
18
|
+
color: #953800;
|
19
|
+
}
|
20
|
+
.sc-highlight .nc {
|
21
|
+
color: #953800;
|
22
|
+
}
|
23
|
+
.sc-highlight .no {
|
24
|
+
color: #953800;
|
25
|
+
}
|
26
|
+
.sc-highlight .nn {
|
27
|
+
color: #953800;
|
28
|
+
}
|
29
|
+
.sc-highlight .sr {
|
30
|
+
color: #116329;
|
31
|
+
}
|
32
|
+
.sc-highlight .na {
|
33
|
+
color: #116329;
|
34
|
+
}
|
35
|
+
.sc-highlight .nt {
|
36
|
+
color: #116329;
|
37
|
+
}
|
38
|
+
.sc-highlight .gi {
|
39
|
+
color: #116329;
|
40
|
+
background-color: #dafbe1;
|
41
|
+
}
|
42
|
+
.sc-highlight .kc {
|
43
|
+
color: #0550ae;
|
44
|
+
}
|
45
|
+
.sc-highlight .l, .sc-highlight .ld, .sc-highlight .m, .sc-highlight .mb, .sc-highlight .mf, .sc-highlight .mh, .sc-highlight .mi, .sc-highlight .il, .sc-highlight .mo, .sc-highlight .mx {
|
46
|
+
color: #0550ae;
|
47
|
+
}
|
48
|
+
.sc-highlight .sb {
|
49
|
+
color: #0550ae;
|
50
|
+
}
|
51
|
+
.sc-highlight .bp {
|
52
|
+
color: #0550ae;
|
53
|
+
}
|
54
|
+
.sc-highlight .ne {
|
55
|
+
color: #0550ae;
|
56
|
+
}
|
57
|
+
.sc-highlight .nl {
|
58
|
+
color: #0550ae;
|
59
|
+
}
|
60
|
+
.sc-highlight .py {
|
61
|
+
color: #0550ae;
|
62
|
+
}
|
63
|
+
.sc-highlight .nv, .sc-highlight .vc, .sc-highlight .vg, .sc-highlight .vi, .sc-highlight .vm {
|
64
|
+
color: #0550ae;
|
65
|
+
}
|
66
|
+
.sc-highlight .o, .sc-highlight .ow {
|
67
|
+
color: #0550ae;
|
68
|
+
}
|
69
|
+
.sc-highlight .gh {
|
70
|
+
color: #0550ae;
|
71
|
+
font-weight: bold;
|
72
|
+
}
|
73
|
+
.sc-highlight .gu {
|
74
|
+
color: #0550ae;
|
75
|
+
font-weight: bold;
|
76
|
+
}
|
77
|
+
.sc-highlight .s, .sc-highlight .sa, .sc-highlight .sc, .sc-highlight .dl, .sc-highlight .sd, .sc-highlight .s2, .sc-highlight .se, .sc-highlight .sh, .sc-highlight .sx, .sc-highlight .s1, .sc-highlight .ss {
|
78
|
+
color: #0a3069;
|
79
|
+
}
|
80
|
+
.sc-highlight .nd {
|
81
|
+
color: #8250df;
|
82
|
+
}
|
83
|
+
.sc-highlight .nf, .sc-highlight .fm {
|
84
|
+
color: #8250df;
|
85
|
+
}
|
86
|
+
.sc-highlight .err {
|
87
|
+
color: #f6f8fa;
|
88
|
+
background-color: #82071e;
|
89
|
+
}
|
90
|
+
.sc-highlight .c, .sc-highlight .ch, .sc-highlight .cd, .sc-highlight .cm, .sc-highlight .cp, .sc-highlight .cpf, .sc-highlight .c1, .sc-highlight .cs {
|
91
|
+
color: #6e7781;
|
92
|
+
}
|
93
|
+
.sc-highlight .gl {
|
94
|
+
color: #6e7781;
|
95
|
+
}
|
96
|
+
.sc-highlight .gt {
|
97
|
+
color: #6e7781;
|
98
|
+
}
|
99
|
+
.sc-highlight .ni {
|
100
|
+
color: #24292f;
|
101
|
+
}
|
102
|
+
.sc-highlight .si {
|
103
|
+
color: #24292f;
|
104
|
+
}
|
105
|
+
.sc-highlight .ge {
|
106
|
+
color: #24292f;
|
107
|
+
font-style: italic;
|
108
|
+
}
|
109
|
+
.sc-highlight .gs {
|
110
|
+
color: #24292f;
|
111
|
+
font-weight: bold;
|
112
|
+
}
|
@@ -2,9 +2,9 @@ class Showcase::Sample
|
|
2
2
|
attr_reader :name, :id, :events, :details
|
3
3
|
attr_reader :source, :instrumented
|
4
4
|
|
5
|
-
def initialize(view_context, name, description: nil, id: name.parameterize, events: nil, **details)
|
5
|
+
def initialize(view_context, name, description: nil, id: name.parameterize, syntax: :erb, events: nil, **details)
|
6
6
|
@view_context = view_context
|
7
|
-
@name, @id, @details = name, id, details
|
7
|
+
@name, @id, @syntax, @details = name, id, syntax, details
|
8
8
|
@events = Array(events)
|
9
9
|
description description if description
|
10
10
|
end
|
@@ -34,13 +34,13 @@ class Showcase::Sample
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def extract(&block)
|
37
|
-
|
38
|
-
@source = @view_context.instance_exec(
|
37
|
+
source = extract_source_block_via_matched_indentation_from(*block.source_location)
|
38
|
+
@source = @view_context.instance_exec(source, @syntax, &Showcase.sample_renderer)
|
39
39
|
end
|
40
40
|
|
41
41
|
private
|
42
42
|
|
43
|
-
def
|
43
|
+
def extract_source_block_via_matched_indentation_from(file, starting_index)
|
44
44
|
first_line, *lines = File.readlines(file).from(starting_index - 1)
|
45
45
|
|
46
46
|
indentation = first_line.match(/^\s+(?=\b)/).to_s
|
@@ -48,6 +48,6 @@ class Showcase::Sample
|
|
48
48
|
|
49
49
|
index = lines.index { _1.match?(matcher) }
|
50
50
|
lines.slice!(index..) if index
|
51
|
-
lines
|
51
|
+
lines.join.strip_heredoc
|
52
52
|
end
|
53
53
|
end
|
@@ -27,8 +27,8 @@
|
|
27
27
|
<details>
|
28
28
|
<summary class="sc-px-4 sc-py-2 hover:sc-bg-indigo-50 sc-cursor-pointer sc-select-none">View Source</summary>
|
29
29
|
|
30
|
-
<section class="sc-px-4 sc-py-2 sc-relative sc-overflow-y-auto hover:sc-select-all">
|
31
|
-
|
30
|
+
<section class="sc-highlight sc-px-4 sc-py-2 sc-relative sc-overflow-y-auto hover:sc-select-all">
|
31
|
+
<pre><%= sample.source %></pre>
|
32
32
|
</section>
|
33
33
|
</details>
|
34
34
|
<% end %>
|
@@ -1 +1 @@
|
|
1
|
-
<%= stylesheet_link_tag "application", "showcase" %>
|
1
|
+
<%= stylesheet_link_tag "application", "showcase", "showcase.highlights" %>
|
@@ -1,3 +1,3 @@
|
|
1
1
|
<article class="hover:sc-bg-indigo-50 <%= "sc-bg-indigo-50" if path.id == params[:id] %>">
|
2
|
-
<%= link_to path.basename.titleize, preview_path(path.id), class: "sc-inline-block sc-py-2 sc-px-8 sc-w-full" %>
|
2
|
+
<%= link_to path.basename.titleize, preview_path(path.id), class: "sc-inline-block sc-py-2 sc-px-8 sc-w-full hover:sc-text-inherit hover:sc-no-underline" %>
|
3
3
|
</article>
|
data/lib/showcase/engine.rb
CHANGED
@@ -6,8 +6,8 @@ module Showcase
|
|
6
6
|
config.assets.precompile += %w[showcase_manifest]
|
7
7
|
end
|
8
8
|
|
9
|
-
initializer "showcase.
|
10
|
-
Showcase::
|
9
|
+
initializer "showcase.previews_test.autorun" do
|
10
|
+
Showcase::PreviewsTest.autorun if Rails.env.test?
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
class Showcase::PreviewsTest < ActionView::TestCase
|
2
|
+
def self.inherited(test_class)
|
3
|
+
super
|
4
|
+
test_class.prepare
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.autorun
|
8
|
+
at_exit { prepare unless subclasses.any? }
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.prepare
|
12
|
+
tests Showcase::EngineController._helpers
|
13
|
+
|
14
|
+
tree = Showcase::Path.tree
|
15
|
+
tree.flat_map(&:ordered_paths).each do |path|
|
16
|
+
test "Showcase: automatically renders showcase/previews/#{path.id}" do
|
17
|
+
render "showcase/engine/preview", preview: path.preview_for(view)
|
18
|
+
assert_showcase_preview(path.id)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
test "Showcase: isn't empty" do
|
23
|
+
assert_not_empty tree, "Showcase couldn't find any samples to generate tests for"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.test(name = nil, showcase: nil, id: nil, &block)
|
28
|
+
case
|
29
|
+
when name then super(name, &block)
|
30
|
+
when id && showcase.nil? then raise ArgumentError, "can't test a sample without a showcase"
|
31
|
+
else
|
32
|
+
super "Showcase: showcase/previews/#{showcase} #{"sample #{id}" if id}".squish do
|
33
|
+
path = Showcase::Path.new(showcase)
|
34
|
+
render "showcase/engine/preview", preview: path.preview_for(view)
|
35
|
+
|
36
|
+
assert_showcase_preview(path.id)
|
37
|
+
assert_element(id: id || path.id) { instance_eval(&block) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Override `assert_showcase_preview` to add custom assertions.
|
43
|
+
def assert_showcase_preview(id)
|
44
|
+
end
|
45
|
+
end
|
data/lib/showcase/version.rb
CHANGED
data/lib/showcase.rb
CHANGED
@@ -1,12 +1,28 @@
|
|
1
1
|
require_relative "showcase/version"
|
2
2
|
|
3
|
+
# Activate the app-bundled Rouge gem to setup default syntax highlighting.
|
4
|
+
begin
|
5
|
+
gem "rouge"
|
6
|
+
require "rouge"
|
7
|
+
rescue LoadError
|
8
|
+
end
|
9
|
+
|
3
10
|
module Showcase
|
4
|
-
autoload :
|
5
|
-
autoload :RouteHelper,
|
6
|
-
autoload :Options,
|
11
|
+
autoload :PreviewsTest, "showcase/previews_test"
|
12
|
+
autoload :RouteHelper, "showcase/route_helper"
|
13
|
+
autoload :Options, "showcase/options"
|
7
14
|
|
8
15
|
singleton_class.attr_accessor :sample_renderer
|
9
|
-
@sample_renderer =
|
16
|
+
@sample_renderer = proc { _1 }
|
17
|
+
|
18
|
+
if defined?(Rouge)
|
19
|
+
Formatter = Rouge::Formatters::HTML.new
|
20
|
+
|
21
|
+
@sample_renderer = ->(source, syntax) do
|
22
|
+
lexed = Rouge::Lexer.find(syntax).lex(source)
|
23
|
+
Showcase::Formatter.format(lexed).html_safe
|
24
|
+
end
|
25
|
+
end
|
10
26
|
|
11
27
|
singleton_class.attr_reader :previews_path
|
12
28
|
@previews_path = "showcase/previews"
|
@@ -1,14 +1,14 @@
|
|
1
1
|
namespace :showcase do
|
2
2
|
namespace :install do
|
3
|
-
|
3
|
+
PREVIEWS_TEST_PATH = "test/views/showcase_test.rb"
|
4
4
|
|
5
|
-
desc "Install Showcase
|
6
|
-
task :
|
7
|
-
mkdir_p File.dirname(
|
8
|
-
File.write
|
5
|
+
desc "Install Showcase previews testing in #{PREVIEWS_TEST_PATH}"
|
6
|
+
task :previews_test do
|
7
|
+
mkdir_p File.dirname(PREVIEWS_TEST_PATH)
|
8
|
+
File.write PREVIEWS_TEST_PATH, <<~RUBY
|
9
9
|
require "test_helper"
|
10
10
|
|
11
|
-
class ShowcaseTest < Showcase::
|
11
|
+
class ShowcaseTest < Showcase::PreviewsTest
|
12
12
|
def assert_showcase_preview(id)
|
13
13
|
# Add any custom preview response body assertions here.
|
14
14
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: showcase-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Pence
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-
|
12
|
+
date: 2023-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- README.md
|
51
51
|
- Rakefile
|
52
52
|
- app/assets/builds/showcase.css
|
53
|
+
- app/assets/builds/showcase.highlights.css
|
53
54
|
- app/assets/config/showcase_manifest.js
|
54
55
|
- app/assets/javascripts/showcase.js
|
55
56
|
- app/controllers/showcase/engine_controller.rb
|
@@ -73,8 +74,8 @@ files:
|
|
73
74
|
- lib/showcase-rails.rb
|
74
75
|
- lib/showcase.rb
|
75
76
|
- lib/showcase/engine.rb
|
76
|
-
- lib/showcase/integration_test.rb
|
77
77
|
- lib/showcase/options.rb
|
78
|
+
- lib/showcase/previews_test.rb
|
78
79
|
- lib/showcase/route_helper.rb
|
79
80
|
- lib/showcase/version.rb
|
80
81
|
- lib/tasks/showcase_tasks.rake
|
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
101
|
- !ruby/object:Gem::Version
|
101
102
|
version: '0'
|
102
103
|
requirements: []
|
103
|
-
rubygems_version: 3.4.
|
104
|
+
rubygems_version: 3.4.1
|
104
105
|
signing_key:
|
105
106
|
specification_version: 4
|
106
107
|
summary: Showcase helps you show off and document your partials, components, view
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class Showcase::IntegrationTest < ActionDispatch::IntegrationTest
|
2
|
-
def self.inherited(test_class)
|
3
|
-
super
|
4
|
-
test_class.prepare
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.autorun
|
8
|
-
at_exit { prepare unless subclasses.any? }
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.prepare
|
12
|
-
tree = Showcase::Path.tree
|
13
|
-
tree.flat_map(&:ordered_paths).each do |path|
|
14
|
-
test "Showcase: GET showcase/previews/#{path.id} renders successfully" do
|
15
|
-
get showcase.preview_path(path.id)
|
16
|
-
|
17
|
-
assert_response :ok
|
18
|
-
assert_showcase_preview(path.id)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
test "Showcase: isn't empty" do
|
23
|
-
assert_not_empty tree, "Showcase couldn't find any samples to generate tests for"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Override `assert_showcase_preview` to add custom assertions.
|
28
|
-
def assert_showcase_preview(id)
|
29
|
-
end
|
30
|
-
end
|