mirror of
https://github.com/enso-org/enso.git
synced 2024-12-23 23:22:14 +03:00
f3f0697d56
Merges the temporary `Test_New` library into `Test`. This is the last PR in the series of PRs that refactor all the stdlib tests to the builder API.
131 lines
5.8 KiB
Plaintext
131 lines
5.8 KiB
Plaintext
from Standard.Base import all
|
||
|
||
from Standard.Table import Table, Column
|
||
|
||
import Standard.Visualization.Scatter_Plot
|
||
|
||
from Standard.Test import all
|
||
|
||
|
||
import project
|
||
|
||
add_specs suite_builder =
|
||
expect_text text axis_expected_text data_expected_text =
|
||
json = Json.parse text
|
||
json.field_names.should_equal ['data', 'axis']
|
||
|
||
expect_text = '{"axis": ' + axis_expected_text + ', "data": ' + data_expected_text + '}'
|
||
expected_result = Json.parse expect_text
|
||
|
||
json.should_equal expected_result
|
||
|
||
expect value axis_expected_text data_expected_text =
|
||
text = Scatter_Plot.process_to_json_text value
|
||
expect_text text axis_expected_text data_expected_text
|
||
|
||
index = Scatter_Plot.index_name
|
||
axis label = JS_Object.from_pairs [['label',label]]
|
||
labels x y = JS_Object.from_pairs [['x', axis x], ['y', axis y]] . to_text
|
||
no_labels = 'null'
|
||
|
||
suite_builder.group "Scatter Plot Visualization" group_builder->
|
||
group_builder.specify "plots first column if none recognized" <|
|
||
header = ['α', 'ω']
|
||
row_1 = [11 , 10 ]
|
||
row_2 = [21 , 20 ]
|
||
table = Table.from_rows header [row_1, row_2]
|
||
expect table (labels index 'α') '[{"x":0,"y":11},{"x":1,"y":21}]'
|
||
|
||
group_builder.specify "plots 'y' against indices when no 'x' recognized" <|
|
||
header = ['α', 'y']
|
||
row_1 = [11 , 10 ]
|
||
row_2 = [21 , 20 ]
|
||
table = Table.from_rows header [row_1, row_2]
|
||
expect table (labels index 'y') '[{"x":0,"y":10},{"x":1,"y":20}]'
|
||
|
||
group_builder.specify "recognizes all relevant columns" <|
|
||
header = ['x' , 'y' , 'size' , 'shape' , 'label' , 'color' ]
|
||
row_1 = [11 , 10 , 50 , 'square' , 'label' , 'ff0000']
|
||
table = Table.from_rows header [row_1]
|
||
expect table (labels 'x' 'y') '[{"color":"ff0000","label":"label","shape":"square","size":50,"x":11,"y":10}]'
|
||
|
||
group_builder.specify "is case-insensitive" <|
|
||
header = ['X' , 'Y' , 'Size' , 'Shape' , 'Label' , 'Color' ]
|
||
row_1 = [11 , 10 , 50 , 'square' , 'label' , 'ff0000']
|
||
table = Table.from_rows header [row_1]
|
||
expect table (labels 'X' 'Y') '[{"color":"ff0000","label":"label","shape":"square","size":50,"x":11,"y":10}]'
|
||
|
||
group_builder.specify "uses first unrecognized numeric column as `y` fallback" <|
|
||
header = ['x' , 'size' , 'name' , 'z' , 'ω']
|
||
row_1 = [11 , 50 , 'circul' , 20 , 30]
|
||
table = Table.from_rows header [row_1]
|
||
expect table (labels 'x' 'z') '[{"size":50,"x":11,"y":20}]'
|
||
|
||
group_builder.specify "provided only recognized columns" <|
|
||
header = ['x', 'y' , 'bar' , 'size']
|
||
row_1 = [11 , 10 , 'aa' , 40 ]
|
||
row_2 = [21 , 20 , 'bb' , 50 ]
|
||
table = Table.from_rows header [row_1, row_2]
|
||
expect table (labels 'x' 'y') '[{"size":40,"x":11,"y":10},{"size":50,"x":21,"y":20}]'
|
||
|
||
group_builder.specify "provided only recognized columns within bounds" <|
|
||
header = ['x', 'y' , 'bar' , 'size']
|
||
row_1 = [1 , 1 , '11' , 30 ]
|
||
row_2 = [11 , 10 , 'aa' , 40 ]
|
||
row_3 = [21 , 20 , 'bb' , 50 ]
|
||
row_4 = [31 , 30 , 'cc' , 60 ]
|
||
table = Table.from_rows header [row_1, row_2, row_3, row_4]
|
||
bounds = [0,5,25,25]
|
||
text = Scatter_Plot.process_to_json_text table bounds
|
||
expect_text text (labels 'x' 'y') '[{"size":40,"x":11,"y":10},{"size":50,"x":21,"y":20}]'
|
||
|
||
group_builder.specify "used default index for `x` if none set" <|
|
||
header = [ 'y' , 'bar' , 'size']
|
||
row_1 = [ 10 , 'aa' , 40 ]
|
||
row_2 = [ 20 , 'bb' , 50 ]
|
||
table = Table.from_rows header [row_1, row_2]
|
||
expect table (labels index 'y') '[{"size":40,"x":0,"y":10},{"size":50,"x":1,"y":20}]'
|
||
|
||
group_builder.specify "using indices for x if given a vector" <|
|
||
vector = [0,10,20]
|
||
expect vector no_labels '[{"x":0,"y":0},{"x":1,"y":10},{"x":2,"y":20}]'
|
||
|
||
group_builder.specify "limit the number of elements" <|
|
||
vector = [0,10,20,30]
|
||
text = Scatter_Plot.process_to_json_text vector limit=2
|
||
json = Json.parse text
|
||
json.field_names.should_equal ['data','axis']
|
||
data = json.get 'data'
|
||
data.should_be_a Vector
|
||
data.length . should_equal 2
|
||
|
||
group_builder.specify "limit the number of squared elements" <|
|
||
vector = (-15).up_to 15 . map (x -> x * x)
|
||
text = Scatter_Plot.process_to_json_text vector limit=10
|
||
json = Json.parse text
|
||
json.field_names.should_equal ['data','axis']
|
||
data = json.get 'data'
|
||
data.should_be_a Vector
|
||
data.length . should_equal 10
|
||
(data.take (First 3) . sort on=(_.get "x")).to_text . should_equal '[{"x":0,"y":225}, {"x":15,"y":0}, {"x":29,"y":196}]'
|
||
|
||
group_builder.specify "filter the elements" <|
|
||
vector = [0,10,20,30]
|
||
bounds = [0,5,10,25]
|
||
text = Scatter_Plot.process_to_json_text vector bounds
|
||
expect_text text no_labels '[{"x":1,"y":10},{"x":2,"y":20}]'
|
||
|
||
group_builder.specify "using indices for x if given a column" <|
|
||
column = Column.from_vector 'some_col' [10,2,3]
|
||
expect column (labels 'index' 'some_col') '[{"x":0,"y":10},{"x":1,"y":2},{"x":2,"y":3}]'
|
||
|
||
group_builder.specify "using indices for x if given a range" <|
|
||
value = 2.up_to 5
|
||
expect value no_labels '[{"x":0,"y":2},{"x":1,"y":3},{"x":2,"y":4}]'
|
||
|
||
main =
|
||
suite = Test.build suite_builder->
|
||
add_specs suite_builder
|
||
suite.run_with_filter
|
||
|